Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- from flask import Flask, request, jsonify
- from datetime import datetime, timedelta
- import hashlib
- app = Flask(__name__)
- # Simulate a database
- banned_devices = set()
- request_logs = {} # { device_id: [timestamps] }
- # Your secret key to verify legitimate APKs (should be embedded securely in your real APK)
- SECRET_KEY = "your_super_secret_server_key"
- # Simple API key hashing to verify legit clients
- def verify_key(client_key):
- expected_hash = hashlib.sha256(SECRET_KEY.encode()).hexdigest()
- return client_key == expected_hash
- # Ban a device
- def ban_device(device_id):
- banned_devices.add(device_id)
- print(f"[!] Device banned: {device_id}")
- # Check rate limit (basic anti-spam)
- def is_rate_limited(device_id, max_requests=10, per_seconds=60):
- now = datetime.utcnow()
- logs = request_logs.get(device_id, [])
- # Remove old entries
- logs = [ts for ts in logs if now - ts < timedelta(seconds=per_seconds)]
- logs.append(now)
- request_logs[device_id] = logs
- return len(logs) > max_requests
- @app.route('/verify', methods=['POST'])
- def verify_client():
- data = request.json
- device_id = data.get('device_id')
- client_key = data.get('auth_key')
- if not device_id or not client_key:
- return jsonify({'error': 'Missing required fields'}), 400
- # Ban check
- if device_id in banned_devices:
- return jsonify({'status': 'banned'}), 403
- # Rate limit check
- if is_rate_limited(device_id):
- ban_device(device_id)
- return jsonify({'status': 'rate_limit_ban'}), 429
- # Key verification
- if not verify_key(client_key):
- ban_device(device_id)
- return jsonify({'status': 'invalid_key'}), 401
- # Passed all checks
- return jsonify({'status': 'verified'}), 200
- @app.route('/report', methods=['POST'])
- def report_mod():
- data = request.json
- device_id = data.get('device_id')
- reason = data.get('reason')
- if device_id:
- ban_device(device_id)
- return jsonify({'status': 'reported_and_banned', 'reason': reason}), 200
- return jsonify({'error': 'Missing device ID'}), 400
- @app.route('/admin/banned', methods=['GET'])
- def get_banned():
- return jsonify({'banned_devices': list(banned_devices)}), 200
- if __name__ == '__main__':
- app.run(debug=True, port=5000)
Advertisement
Add Comment
Please, Sign In to add comment