\x89PNG\r\n\x1a\n\x00\x00\x00\x0DIHDR\x00\x00\x00\x01\x00 \x00\x00\x01\x08\x06\x00\x00\x00\x1F\x15\xC4\x89\x00\x00\x00 \x0AIDATx\x9Ccb\x00\x00\x00\x06\x00\x03\x1A\x05\x9D\x00\x00 \x00\x00IEND\xAE\x42\x60\x82
| Path : /var/www/html/mobile-ob/LanguageLearner/utils/ |
|
B-Con CMD Config cPanel C-Rdp D-Log Info Jump Mass Ransom Symlink vHost Zone-H |
| Current File : /var/www/html/mobile-ob/LanguageLearner/utils/mobileconfig.py |
import uuid
from datetime import datetime
import logging
logger = logging.getLogger(__name__)
def generate_mobileconfig(data):
"""
Generate an Apple mobileconfig file for email, CalDAV, and CardDAV configuration
"""
try:
profile_uuid = str(uuid.uuid4())
email_payload_uuid = str(uuid.uuid4())
caldav_payload_uuid = str(uuid.uuid4())
carddav_payload_uuid = str(uuid.uuid4())
# Email payload
email_payload = f''' <dict>
<key>EmailAccountDescription</key>
<string>{data['name']}</string>
<key>EmailAccountName</key>
<string>{data['name']}</string>
<key>EmailAccountType</key>
<string>EmailTypeIMAP</string>
<key>EmailAddress</key>
<string>{data['email']}</string>
<key>IncomingMailServerAuthentication</key>
<string>EmailAuthPassword</string>
<key>IncomingMailServerHostName</key>
<string>{data['imap_host']}</string>
<key>IncomingMailServerPortNumber</key>
<integer>{data['imap_port']}</integer>
<key>IncomingMailServerUseSSL</key>
<{str(data['use_ssl']).lower()}/>
<key>IncomingMailServerUsername</key>
<string>{data['username']}</string>
<key>OutgoingMailServerAuthentication</key>
<string>EmailAuthPassword</string>
<key>OutgoingMailServerHostName</key>
<string>{data['smtp_host']}</string>
<key>OutgoingMailServerPortNumber</key>
<integer>{data['smtp_port']}</integer>
<key>OutgoingMailServerUseSSL</key>
<{str(data['use_ssl']).lower()}/>
<key>OutgoingMailServerUsername</key>
<string>{data['username']}</string>
<key>PayloadDescription</key>
<string>Email account configuration</string>
<key>PayloadDisplayName</key>
<string>Email ({data['email']})</string>
<key>PayloadIdentifier</key>
<string>com.apple.mail.managed.{email_payload_uuid}</string>
<key>PayloadType</key>
<string>com.apple.mail.managed</string>
<key>PayloadUUID</key>
<string>{email_payload_uuid}</string>
<key>PayloadVersion</key>
<integer>1</integer>
</dict>'''
payloads = [email_payload]
# Add CalDAV payload if CalDAV server is specified
if data.get('caldav_host'):
try:
caldav_port = data.get('caldav_port', '443')
caldav_path = data.get('caldav_path', '/dav/user/Calendar/')
caldav_username = data.get('caldav_username', data['username'])
caldav_payload = f''' <dict>
<key>PayloadDescription</key>
<string>Configures CalDAV account</string>
<key>PayloadDisplayName</key>
<string>Calendar ({data['email']})</string>
<key>PayloadIdentifier</key>
<string>com.apple.caldav.account.{caldav_payload_uuid}</string>
<key>PayloadType</key>
<string>com.apple.caldav.account</string>
<key>PayloadUUID</key>
<string>{caldav_payload_uuid}</string>
<key>PayloadVersion</key>
<integer>1</integer>
<key>CalDAVAccountDescription</key>
<string>{data['name']} Calendar</string>
<key>CalDAVHostName</key>
<string>{data['caldav_host']}</string>
<key>CalDAVUsername</key>
<string>{caldav_username}</string>
<key>CalDAVUseSSL</key>
<{str(data['use_ssl']).lower()}/>
<key>CalDAVPort</key>
<integer>{caldav_port}</integer>
<key>CalDAVPrincipalURL</key>
<string>{caldav_path}</string>
</dict>'''
payloads.append(caldav_payload)
logger.debug("CalDAV payload generated successfully")
except Exception as e:
logger.error(f"Error generating CalDAV payload: {str(e)}")
# Continue without CalDAV if there's an error
# Add CardDAV payload if CardDAV server is specified
if data.get('carddav_host'):
try:
carddav_port = data.get('carddav_port', '443')
# Updated path structure for CardDAV to match exact URL
carddav_url = f"https://mail.hepsibulutta.com/home/{data['email']}/Contacts"
carddav_payload = f''' <dict>
<key>PayloadDescription</key>
<string>Configures CardDAV account</string>
<key>PayloadDisplayName</key>
<string>Contacts ({data['email']})</string>
<key>PayloadIdentifier</key>
<string>com.apple.carddav.account.{carddav_payload_uuid}</string>
<key>PayloadType</key>
<string>com.apple.carddav.account</string>
<key>PayloadUUID</key>
<string>{carddav_payload_uuid}</string>
<key>PayloadVersion</key>
<integer>1</integer>
<key>CardDAVAccountDescription</key>
<string>{data['name']} Contacts</string>
<key>CardDAVHostName</key>
<string>{data['carddav_host']}</string>
<key>CardDAVUsername</key>
<string>{data['username']}</string>
<key>CardDAVUseSSL</key>
<{str(data['use_ssl']).lower()}/>
<key>CardDAVPort</key>
<integer>{carddav_port}</integer>
<key>CardDAVPrincipalURL</key>
<string>{carddav_url}</string>
</dict>'''
payloads.append(carddav_payload)
logger.debug("CardDAV payload generated successfully")
except Exception as e:
logger.error(f"Error generating CardDAV payload: {str(e)}")
# Continue without CardDAV if there's an error
# Combine all payloads with proper indentation
xml_content = f'''<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
<key>PayloadContent</key>
<array>
{chr(10).join(payloads)}
</array>
<key>PayloadDisplayName</key>
<string>Mail, Calendar and Contacts Account ({data['email']})</string>
<key>PayloadIdentifier</key>
<string>com.example.config.{profile_uuid}</string>
<key>PayloadRemovalDisallowed</key>
<false/>
<key>PayloadType</key>
<string>Configuration</string>
<key>PayloadUUID</key>
<string>{profile_uuid}</string>
<key>PayloadVersion</key>
<integer>1</integer>
</dict>
</plist>'''
logger.debug("Mobileconfig XML generated successfully")
return xml_content
except Exception as e:
logger.error(f"Error generating mobileconfig: {str(e)}")
raise