Added Mullvad_Account_Expiry_Notifier project
This commit is contained in:
		
							parent
							
								
									e7b97e1b5a
								
							
						
					
					
						commit
						e76649adad
					
				
							
								
								
									
										63
									
								
								Mullvad/Mullvad_Account_Expiry_Notifier/README.md
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										63
									
								
								Mullvad/Mullvad_Account_Expiry_Notifier/README.md
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,63 @@ | |||||||
|  | # Mullvad Account Expiry Notifier | ||||||
|  | 
 | ||||||
|  | ## # Features | ||||||
|  | 
 | ||||||
|  | * Reads 16-digit account numbers from a file (accounts.txt). | ||||||
|  | * Fetches expiration dates from the Mullvad API. | ||||||
|  | * Sends alerts to a specified Discord webhook if an account is nearing expiration. | ||||||
|  | * Ensures valid account numbers and handles API response errors gracefully. | ||||||
|  | 
 | ||||||
|  | ### Prerequisites | ||||||
|  | 
 | ||||||
|  | - A valid accounts.txt file containing Mullvad account numbers (one per line). | ||||||
|  | - A Discord webhook URL for notifications. | ||||||
|  | - Required dependencies: curl, jq, and date. | ||||||
|  | 
 | ||||||
|  | ### Installation | ||||||
|  | 
 | ||||||
|  | Ensure the script has execution permissions: | ||||||
|  | 
 | ||||||
|  | ``` | ||||||
|  | chmod +x check_mullvad_account_expiry.sh | ||||||
|  | 
 | ||||||
|  | ``` | ||||||
|  | ### Usage | ||||||
|  | 
 | ||||||
|  | Create a file named accounts.txt and list Mullvad account numbers: | ||||||
|  | 
 | ||||||
|  | ``` | ||||||
|  | 1234567890123456 | ||||||
|  | 9876543210987654 | ||||||
|  | ``` | ||||||
|  | 
 | ||||||
|  | Set your Discord webhook URL in the script: | ||||||
|  | 
 | ||||||
|  | ``` | ||||||
|  | DISCORD_WEBHOOK_URL="your_discord_webhook_url" | ||||||
|  | ``` | ||||||
|  | 
 | ||||||
|  | Run the script: | ||||||
|  | 
 | ||||||
|  | ``` | ||||||
|  | ./check_mullvad_account_expiry.sh | ||||||
|  | ``` | ||||||
|  | 
 | ||||||
|  | ### Configuration | ||||||
|  | 
 | ||||||
|  | - TXT_FILE: The file containing Mullvad account numbers (default: accounts.txt). | ||||||
|  | 
 | ||||||
|  | - DAYS_THRESHOLD: Number of days before expiry to trigger an alert (default: 14). | ||||||
|  | 
 | ||||||
|  | - DISCORD_WEBHOOK_URL: The webhook URL to send alerts to Discord. | ||||||
|  | 
 | ||||||
|  | #### Example Output | ||||||
|  | 
 | ||||||
|  | Account 1234567890123456 expires in 10 days. | ||||||
|  | Sending Discord notification... | ||||||
|  | Account 9876543210987654 expires in 20 days. | ||||||
|  | 
 | ||||||
|  | ### Notes | ||||||
|  | 
 | ||||||
|  | Ensure the accounts.txt file contains only valid 16-digit Mullvad account numbers. | ||||||
|  | The script adds a small delay between API requests to prevent rate-limiting. | ||||||
|  | Modify DAYS_THRESHOLD to adjust the notification period. | ||||||
| @ -0,0 +1,87 @@ | |||||||
|  | #!/bin/bash | ||||||
|  | 
 | ||||||
|  | # Configuration | ||||||
|  | TXT_FILE="accounts.txt"  # File containing 16-digit account numbers | ||||||
|  | DAYS_THRESHOLD=14       # Number of days before expiry to trigger alert | ||||||
|  | DISCORD_WEBHOOK_URL="your_discord_webhook_url" | ||||||
|  | 
 | ||||||
|  | # Function to send a Discord notification | ||||||
|  | send_discord_notification() { | ||||||
|  |     local account_id="$1" | ||||||
|  |     local expiry="$2" | ||||||
|  |     local message="Account $account_id is expiring soon! Expiry date: $expiry" | ||||||
|  |      | ||||||
|  | curl -H "Content-Type: application/json" -X POST --data @- "$DISCORD_WEBHOOK_URL" <<EOF | ||||||
|  | { | ||||||
|  |   "content": "", | ||||||
|  |   "embeds": [ | ||||||
|  |     { | ||||||
|  |       "title": "Mullvad Account Alert - $account_id", | ||||||
|  |       "description": "Mullvad account $account_id is due to expire.", | ||||||
|  |       "url": "https://mullvad.net/en/account", | ||||||
|  |       "color": 16755968, | ||||||
|  |       "fields": [ | ||||||
|  |         { | ||||||
|  |           "name": "Days until Expiry:", | ||||||
|  |           "value": "$days_until_expiry" | ||||||
|  |         }, | ||||||
|  |         { | ||||||
|  |           "name": "Expiry Date:", | ||||||
|  |           "value": "$expiry" | ||||||
|  |         } | ||||||
|  |       ], | ||||||
|  |       "footer": { | ||||||
|  |         "text": "Mullvad Account URL: https://mullvad.net/en/account" | ||||||
|  |       } | ||||||
|  |     } | ||||||
|  |   ], | ||||||
|  |   "attachments": [] | ||||||
|  | } | ||||||
|  | EOF | ||||||
|  | 
 | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | # Read each line in the text file | ||||||
|  | while IFS= read -r account_id; do | ||||||
|  |     # Validate account_id (ensure it's a 16-digit number) | ||||||
|  |     if [[ ! "$account_id" =~ ^[0-9]{16}$ ]]; then | ||||||
|  |         echo "Skipping invalid account ID: $account_id" | ||||||
|  |         continue | ||||||
|  |     fi | ||||||
|  |      | ||||||
|  |     # Fetch account details with error handling | ||||||
|  |     response=$(curl -s --fail "https://api.mullvad.net/public/accounts/v1/$account_id") | ||||||
|  | 
 | ||||||
|  |     # Check if response is valid JSON and not empty | ||||||
|  |     if [[ -z "$response" ]] || ! echo "$response" | jq empty > /dev/null 2>&1; then | ||||||
|  |         echo "Invalid response for account $account_id" | ||||||
|  |         continue | ||||||
|  |     fi | ||||||
|  | 
 | ||||||
|  |     expiry=$(echo "$response" | jq -r '.expiry') | ||||||
|  | 
 | ||||||
|  |     # Check if expiry field is valid | ||||||
|  |     if [[ "$expiry" == "null" || -z "$expiry" ]]; then | ||||||
|  |         echo "No expiry date found for account $account_id" | ||||||
|  |         continue | ||||||
|  |     fi | ||||||
|  |      | ||||||
|  |     # Convert expiry date to epoch time | ||||||
|  |     expiry_epoch=$(date -d "$expiry" +%s) | ||||||
|  |     current_epoch=$(date +%s) | ||||||
|  |      | ||||||
|  |     # Calculate days until expiry | ||||||
|  |     days_until_expiry=$(( (expiry_epoch - current_epoch) / 86400 )) | ||||||
|  |      | ||||||
|  |     echo "Account $account_id expires in $days_until_expiry days." | ||||||
|  |      | ||||||
|  |     # Trigger alert if expiry is within the threshold | ||||||
|  |     if (( days_until_expiry <= DAYS_THRESHOLD )); then | ||||||
|  |         send_discord_notification "$account_id" "$expiry" | ||||||
|  |     fi | ||||||
|  | 
 | ||||||
|  |     # Small delay to prevent API rate limits | ||||||
|  |     sleep 1 | ||||||
|  | 
 | ||||||
|  | done < "$TXT_FILE" | ||||||
|  | 
 | ||||||
		Loading…
	
		Reference in New Issue
	
	Block a user