Files
lotto-app/app.py
2024-12-17 12:28:49 +00:00

76 lines
3.0 KiB
Python

from flask import Flask, render_template, request, session
import secrets
import os
import requests
app = Flask(__name__)
app.secret_key = 'your_secret_key' # Secret key for session management
# Function to combine secrets module and /dev/urandom for stronger randomness
def generate_secure_seed():
# Generate a random value using secrets and urandom
urandom_value = int.from_bytes(os.urandom(8), 'big')
secure_value = secrets.randbits(64)
combined_seed = urandom_value ^ secure_value # Combine randomness using XOR
return combined_seed
# Function to fetch random numbers from Random.org API
def fetch_random_org_numbers(count, min_value, max_value):
try:
url = "https://www.random.org/integers/"
params = {
'num': count,
'min': min_value,
'max': max_value,
'col': 1,
'base': 10,
'format': 'plain',
'rnd': 'new'
}
response = requests.get(url, params=params)
if response.status_code == 200:
numbers = [int(num) for num in response.text.strip().split()]
return sorted(numbers)
except Exception as e:
print(f"Error fetching from Random.org: {e}")
return None
# Function to generate lottery numbers based on rules
def generate_lottery_numbers(game_type, lines):
results = []
for _ in range(lines):
if game_type == 'euromillions':
numbers = fetch_random_org_numbers(5, 1, 50) or sorted(secrets.SystemRandom().sample(range(1, 51), 5))
lucky_stars = fetch_random_org_numbers(2, 1, 12) or sorted(secrets.SystemRandom().sample(range(1, 13), 2))
results.append({'numbers': numbers, 'lucky_stars': lucky_stars})
elif game_type == 'lotto':
numbers = fetch_random_org_numbers(6, 1, 47) or sorted(secrets.SystemRandom().sample(range(1, 48), 6))
results.append({'numbers': numbers})
elif game_type == 'eurodreams':
numbers = fetch_random_org_numbers(6, 1, 40) or sorted(secrets.SystemRandom().sample(range(1, 41), 6))
dream_number = fetch_random_org_numbers(1, 1, 5)
dream_number = dream_number[0] if dream_number else secrets.SystemRandom().randint(1, 5)
results.append({'numbers': numbers, 'dream_number': dream_number})
else:
return {'error': 'Invalid game type'}
return results
@app.route('/', methods=['GET', 'POST'])
def index():
result = None
game_type = session.get('game_type', 'euromillions') # Default to EuroMillions
lines = session.get('lines', 1) # Default to 1 line
if request.method == 'POST':
game_type = request.form.get('game_type')
lines = int(request.form.get('lines', 1))
session['game_type'] = game_type
session['lines'] = lines
result = generate_lottery_numbers(game_type, lines)
return render_template('index.html', result=result, game_type=game_type, lines=lines)
if __name__ == '__main__':
app.run(debug=True)