90 lines
3.5 KiB
Python
90 lines
3.5 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 = []
|
|
random_org_failure = False
|
|
|
|
for _ in range(lines):
|
|
if game_type == 'euromillions':
|
|
numbers = fetch_random_org_numbers(5, 1, 50)
|
|
if numbers is None:
|
|
random_org_failure = True
|
|
numbers = sorted(secrets.SystemRandom().sample(range(1, 51), 5))
|
|
lucky_stars = fetch_random_org_numbers(2, 1, 12)
|
|
if lucky_stars is None:
|
|
random_org_failure = True
|
|
lucky_stars = 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)
|
|
if numbers is None:
|
|
random_org_failure = True
|
|
numbers = sorted(secrets.SystemRandom().sample(range(1, 48), 6))
|
|
results.append({'numbers': numbers})
|
|
elif game_type == 'eurodreams':
|
|
numbers = fetch_random_org_numbers(6, 1, 40)
|
|
if numbers is None:
|
|
random_org_failure = True
|
|
numbers = 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, random_org_failure
|
|
|
|
@app.route('/', methods=['GET', 'POST'])
|
|
def index():
|
|
result = None
|
|
random_org_failed = False
|
|
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, random_org_failed = generate_lottery_numbers(game_type, lines)
|
|
|
|
return render_template('index.html', result=result, game_type=game_type, lines=lines, random_org_failed=random_org_failed)
|
|
|
|
if __name__ == '__main__':
|
|
app.run(debug=True)
|