mirror of
https://github.com/AudebertAdrien/ft_transcendence.git
synced 2025-12-15 21:56:50 +01:00
final merge jchecca
This commit is contained in:
commit
34cdbc4ccb
@ -38,10 +38,10 @@ services:
|
|||||||
DB_NAME: ${POSTGRES_DB}
|
DB_NAME: ${POSTGRES_DB}
|
||||||
DB_USER: ${POSTGRES_USER}
|
DB_USER: ${POSTGRES_USER}
|
||||||
DB_PASSWORD: ${POSTGRES_PASSWORD}
|
DB_PASSWORD: ${POSTGRES_PASSWORD}
|
||||||
SECURE_SSL_REDIRECT: False
|
PRIVATE_KEY: ${PRIVATE_KEY}
|
||||||
SECURE_HSTS_SECONDS: 31536000
|
WEB3_PROVIDER: ${WEB3_PROVIDER}
|
||||||
SECURE_HSTS_INCLUDE_SUBDOMAINS: True
|
CONTRACT_ADDRESS: ${CONTRACT_ADDRESS}
|
||||||
SECURE_HSTS_PRELOAD: True
|
WEB3_ACCOUNT: ${WEB3_ACCOUNT}
|
||||||
depends_on:
|
depends_on:
|
||||||
- db
|
- db
|
||||||
healthcheck:
|
healthcheck:
|
||||||
|
|||||||
@ -23,3 +23,9 @@ KIBANA_USERNAME=kibana_system
|
|||||||
KIBANA_PASSWORD=
|
KIBANA_PASSWORD=
|
||||||
|
|
||||||
ENCRYPTION_KEY=c34d38b3a14956121ff2170e5030b471551370178f43e5626eec58b04a30fae2
|
ENCRYPTION_KEY=c34d38b3a14956121ff2170e5030b471551370178f43e5626eec58b04a30fae2
|
||||||
|
|
||||||
|
# Web3 settings
|
||||||
|
PRIVATE_KEY=
|
||||||
|
WEB3_PROVIDER=
|
||||||
|
CONTRACT_ADDRESS=
|
||||||
|
WEB3_ACCOUNT=
|
||||||
|
|||||||
@ -9,6 +9,7 @@ from .game import Game
|
|||||||
from .models import Tournoi
|
from .models import Tournoi
|
||||||
from .utils import create_tournament, update_tournament, getlen
|
from .utils import create_tournament, update_tournament, getlen
|
||||||
from asgiref.sync import sync_to_async
|
from asgiref.sync import sync_to_async
|
||||||
|
from .views import write_data
|
||||||
|
|
||||||
TOURNAMENT_NAMES = [
|
TOURNAMENT_NAMES = [
|
||||||
"Champion's Clash", "Ultimate Showdown", "Battle Royale",
|
"Champion's Clash", "Ultimate Showdown", "Battle Royale",
|
||||||
@ -209,6 +210,10 @@ class TournamentMatchMaker:
|
|||||||
})
|
})
|
||||||
|
|
||||||
await sync_to_async(update_tournament)(self.final_name, winner_username)
|
await sync_to_async(update_tournament)(self.final_name, winner_username)
|
||||||
|
|
||||||
|
player_list = [player.user.username for player in self.waiting_players]
|
||||||
|
write_data(player_list, winner_username)
|
||||||
|
|
||||||
# Reset tournament state
|
# Reset tournament state
|
||||||
self.waiting_players = []
|
self.waiting_players = []
|
||||||
self.matches = []
|
self.matches = []
|
||||||
|
|||||||
@ -11,7 +11,6 @@ urlpatterns = [
|
|||||||
path('check_user_exists/', views.check_user_exists, name='check_user_exists'),
|
path('check_user_exists/', views.check_user_exists, name='check_user_exists'),
|
||||||
path('register_user/', views.register_user, name='register_user'),
|
path('register_user/', views.register_user, name='register_user'),
|
||||||
path('authenticate_user/', views.authenticate_user, name='authenticate_user'),
|
path('authenticate_user/', views.authenticate_user, name='authenticate_user'),
|
||||||
path('web3/', views.read_data, name='read_data'),
|
|
||||||
path('api/match_list/', match_list_json, name='match_list_json'),
|
path('api/match_list/', match_list_json, name='match_list_json'),
|
||||||
path('api/player_list/', player_list_json, name='player_list_json'),
|
path('api/player_list/', player_list_json, name='player_list_json'),
|
||||||
path('api/tournoi_list/', tournoi_list_json, name='tournoi_list_json'),
|
path('api/tournoi_list/', tournoi_list_json, name='tournoi_list_json'),
|
||||||
|
|||||||
@ -113,67 +113,47 @@ def tournoi_list_json(request):
|
|||||||
return JsonResponse({"tournois": tournois_data})
|
return JsonResponse({"tournois": tournois_data})
|
||||||
|
|
||||||
|
|
||||||
|
import os
|
||||||
from web3 import Web3
|
from web3 import Web3
|
||||||
|
import time
|
||||||
|
|
||||||
provider = Web3.HTTPProvider("https://sepolia.infura.io/v3/60e51df7c97c4f4c8ab41605a4eb9907")
|
provider = Web3.HTTPProvider(os.getenv('WEB3_PROVIDER'))
|
||||||
web3 = Web3(provider)
|
web3 = Web3(provider)
|
||||||
eth_gas_price = web3.eth.gas_price/1000000000
|
eth_gas_price = web3.eth.gas_price/1000000000
|
||||||
print(eth_gas_price)
|
print(eth_gas_price)
|
||||||
|
|
||||||
contract_address = "0x078D04Eb6fb97Cd863361FC86000647DC876441B"
|
contract_address = os.getenv('CONTRACT_ADDRESS')
|
||||||
contract_abi = [{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"inputs":[{"internalType":"string","name":"_name","type":"string"},{"internalType":"uint256","name":"_timecode","type":"uint256"},{"internalType":"uint256","name":"_participantCount","type":"uint256"},{"internalType":"string[]","name":"_playerPseudonyms","type":"string[]"},{"internalType":"string[]","name":"_finalOrder","type":"string[]"}],"name":"addTournament","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"getAllTournaments","outputs":[{"components":[{"internalType":"uint256","name":"id","type":"uint256"},{"internalType":"string","name":"name","type":"string"},{"internalType":"uint256","name":"timecode","type":"uint256"},{"internalType":"uint256","name":"participantCount","type":"uint256"},{"internalType":"string[]","name":"playerPseudonyms","type":"string[]"},{"internalType":"string[]","name":"finalOrder","type":"string[]"}],"internalType":"struct PongTournament.Tournament[]","name":"","type":"tuple[]"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_id","type":"uint256"}],"name":"getTournament","outputs":[{"components":[{"internalType":"uint256","name":"id","type":"uint256"},{"internalType":"string","name":"name","type":"string"},{"internalType":"uint256","name":"timecode","type":"uint256"},{"internalType":"uint256","name":"participantCount","type":"uint256"},{"internalType":"string[]","name":"playerPseudonyms","type":"string[]"},{"internalType":"string[]","name":"finalOrder","type":"string[]"}],"internalType":"struct PongTournament.Tournament","name":"","type":"tuple"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tournamentCount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"tournaments","outputs":[{"internalType":"uint256","name":"id","type":"uint256"},{"internalType":"string","name":"name","type":"string"},{"internalType":"uint256","name":"timecode","type":"uint256"},{"internalType":"uint256","name":"participantCount","type":"uint256"}],"stateMutability":"view","type":"function"}]
|
contract_abi = [{"inputs": [{"internalType": "uint256","name": "_timecode","type": "uint256"},{"internalType": "string[]","name": "_player_list","type": "string[]"},{"internalType": "string","name": "_winner","type": "string"}],"name": "addTournament","outputs": [],"stateMutability": "nonpayable","type": "function"},{"inputs": [],"stateMutability": "nonpayable","type": "constructor"},{"inputs": [],"name": "getAllTournaments","outputs": [{"components": [{"internalType": "uint256","name": "id","type": "uint256"},{"internalType": "uint256","name": "timecode","type": "uint256"},{"internalType": "string[]","name": "player_list","type": "string[]"},{"internalType": "string","name": "winner","type": "string"}],"internalType": "struct PongTournament.Tournament[]","name": "","type": "tuple[]"}],"stateMutability": "view","type": "function"},{"inputs": [{"internalType": "uint256","name": "_id","type": "uint256"}],"name": "getTournament","outputs": [{"components": [{"internalType": "uint256","name": "id","type": "uint256"},{"internalType": "uint256","name": "timecode","type": "uint256"},{"internalType": "string[]","name": "player_list","type": "string[]"},{"internalType": "string","name": "winner","type": "string"}],"internalType": "struct PongTournament.Tournament","name": "","type": "tuple"}],"stateMutability": "view","type": "function"},{"inputs": [],"name": "owner","outputs": [{"internalType": "address","name": "","type": "address"}],"stateMutability": "view","type": "function"},{"inputs": [],"name": "tournamentCount","outputs": [{"internalType": "uint256","name": "","type": "uint256"}],"stateMutability": "view","type": "function"},{"inputs": [{"internalType": "uint256","name": "","type": "uint256"}],"name": "tournaments","outputs": [{"internalType": "uint256","name": "id","type": "uint256"},{"internalType": "uint256","name": "timecode","type": "uint256"},{"internalType": "string","name": "winner","type": "string"}],"stateMutability": "view","type": "function"}]
|
||||||
|
|
||||||
contract = web3.eth.contract(address=contract_address, abi=contract_abi)
|
contract = web3.eth.contract(address=contract_address, abi=contract_abi)
|
||||||
|
|
||||||
def read_data(request):
|
def write_data(player_list, winner):
|
||||||
# Créer une instance du contrat
|
if (os.getenv('WEB3_PROVIDER') != "https://sepolia.infura.io/v3/60e51df7c97c4f4c8ab41605a4eb9907"):
|
||||||
|
return
|
||||||
|
timecode = int(time.time())
|
||||||
|
account = os.getenv('WEB3_ACCOUNT')
|
||||||
|
private_key = os.getenv('PRIVATE_KEY')
|
||||||
|
|
||||||
# Appeler une fonction du contrat pour obtenir tous les tournois
|
print(contract_address, account, private_key)
|
||||||
tournaments = contract.functions.getAllTournaments().call()
|
print(timecode, player_list, winner)
|
||||||
|
|
||||||
# Afficher les résultats
|
nonce = web3.eth.get_transaction_count(account)
|
||||||
json_data = []
|
print(web3.to_wei(eth_gas_price, 'gwei'))
|
||||||
for tournament in tournaments:
|
print(nonce)
|
||||||
tournament_data = []
|
transaction = contract.functions.addTournament(timecode, player_list, winner).build_transaction({
|
||||||
for item in tournament:
|
'chainId': 11155111, # ID de la chaîne Sepolia
|
||||||
print(f"{item}")
|
'gas': 2000000,
|
||||||
tournament_data.append(item)
|
'gasPrice': web3.to_wei(eth_gas_price, 'gwei'),
|
||||||
json_data.append(tournament_data)
|
'nonce': nonce
|
||||||
|
})
|
||||||
|
|
||||||
# Retourner le JSON comme réponse HTTP
|
# Signature de la transaction
|
||||||
# print(f"Tournament ID: {tournament[0]}")
|
signed_txn = web3.eth.account.sign_transaction(transaction, private_key)
|
||||||
# print(f"Name: {tournament[1]}")
|
|
||||||
# print(f"Timecode: {tournament[2]}")
|
|
||||||
# print(f"Participant Count: {tournament[3]}")
|
|
||||||
# print(f"Player Pseudonyms: {', '.join(tournament[4])}")
|
|
||||||
# print(f"Final Order: {', '.join(tournament[5])}")
|
|
||||||
print("-----------------------------")
|
|
||||||
return JsonResponse(json_data, safe=False)
|
|
||||||
|
|
||||||
|
|
||||||
def write_data(request):
|
# Envoi de la transaction
|
||||||
# addTournament(string,uint256,uint256,string[],string[])
|
tx_hash = web3.eth.send_raw_transaction(signed_txn.raw_transaction)
|
||||||
|
print("Transaction hash:", web3.to_hex(tx_hash))
|
||||||
|
|
||||||
# # Configuration de la transaction pour la fonction store
|
# Attente de la confirmation de la transaction
|
||||||
# account = "0x66CeBE2A1F7dae0F6AdBAad2c15A56A9121abfEf"
|
tx_receipt = web3.eth.wait_for_transaction_receipt(tx_hash)
|
||||||
# private_key = "beb16ee3434ec5abec8b799549846cc04443c967b8d3643b943e2e969e7d25be"
|
print("Transaction receipt:", tx_receipt)
|
||||||
|
|
||||||
# nonce = web3.eth.get_transaction_count(account)
|
|
||||||
# transaction = contract.functions.addTournament("test",1721830559,6,["aaudeber", "tlorne", "ocassany", "yestello", "jcheca", "toto"],["toto", "jcheca", "yestello", "tlorne", "ocassany", "aaudeber"]).build_transaction({
|
|
||||||
# 'chainId': 11155111, # ID de la chaîne Sepolia
|
|
||||||
# 'gas': 2000000,
|
|
||||||
# 'gasPrice': web3.to_wei(eth_gas_price, 'gwei'),
|
|
||||||
# 'nonce': nonce
|
|
||||||
# })
|
|
||||||
|
|
||||||
# # Signature de la transaction
|
|
||||||
# signed_txn = web3.eth.account.sign_transaction(transaction, private_key)
|
|
||||||
|
|
||||||
# # Envoi de la transaction
|
|
||||||
# tx_hash = web3.eth.send_raw_transaction(signed_txn.rawTransaction)
|
|
||||||
# print("Transaction hash:", web3.to_hex(tx_hash))
|
|
||||||
|
|
||||||
# # Attente de la confirmation de la transaction
|
|
||||||
# tx_receipt = web3.eth.wait_for_transaction_receipt(tx_hash)
|
|
||||||
# print("Transaction receipt:", tx_receipt)
|
|
||||||
print("-----------------------------")
|
|
||||||
|
|||||||
@ -55,7 +55,7 @@ document.addEventListener('DOMContentLoaded', () => {
|
|||||||
fetchTournois();
|
fetchTournois();
|
||||||
} else if (tableId === 'blockchain-list') {
|
} else if (tableId === 'blockchain-list') {
|
||||||
console.log('Opening external page in a new tab');
|
console.log('Opening external page in a new tab');
|
||||||
window.open('https://sepolia.etherscan.io/address/0x078d04eb6fb97cd863361fc86000647dc876441b', '_blank');
|
window.open('https://sepolia.etherscan.io/address/0x32a4bf81628fdd65d7b00ac676b80772c920e0c4', '_blank');
|
||||||
}
|
}
|
||||||
|
|
||||||
if (dropdownMenu) {
|
if (dropdownMenu) {
|
||||||
|
|||||||
@ -1,39 +1,94 @@
|
|||||||
document.addEventListener('DOMContentLoaded', () => {
|
document.addEventListener('DOMContentLoaded', () => {
|
||||||
const translations = {
|
const translations = {
|
||||||
fr: {
|
fr: {
|
||||||
welcome: "BIENVENUE DANS LE PONG 42",
|
labelWelcome: "BIENVENUE DANS LE PONG 42",
|
||||||
labelNickname: "Entrez votre surnom:",
|
labelNickname: "Entrez votre surnom:",
|
||||||
labelPassword: "Entrez votre mot de passe:",
|
labelPassword: "Entrez votre mot de passe:",
|
||||||
labelConfirmPassword: "Confirmez votre mot de passe:",
|
labelConfirmPassword: "Confirmez votre mot de passe:",
|
||||||
labelLoginPassword: "Entrez votre mot de passe:"
|
labelLoginPassword: "Entrez votre mot de passe:",
|
||||||
|
labelSettings: "Paramètres",
|
||||||
|
labelCheckNickname: "Vérifiez votre surnom:",
|
||||||
|
labelLogin: "Se connecter",
|
||||||
|
labelLocalGame: "Jeu local",
|
||||||
|
labelQuickMatch: "Match rapide",
|
||||||
|
labelTournament: "Tournoi",
|
||||||
|
labelHome: "Accueil",
|
||||||
|
labelRetry: "Rejouer"
|
||||||
},
|
},
|
||||||
en: {
|
en: {
|
||||||
welcome: "WELCOME TO PONG 42",
|
labelWelcome: "WELCOME TO PONG 42",
|
||||||
labelNickname: "Enter your nickname:",
|
labelNickname: "Enter your nickname:",
|
||||||
labelPassword: "Enter your password:",
|
labelPassword: "Enter your password:",
|
||||||
labelConfirmPassword: "Confirm your password:",
|
labelConfirmPassword: "Confirm your password:",
|
||||||
labelLoginPassword: "Enter your password:"
|
labelLoginPassword: "Enter your password:",
|
||||||
|
labelSettings: "Settings",
|
||||||
|
labelCheckNickname: "Check your nickname:",
|
||||||
|
labelLogin: "Log in",
|
||||||
|
labelLocalGame: "Local game",
|
||||||
|
labelQuickMatch: "Quick match",
|
||||||
|
labelTournament: "Tournament",
|
||||||
|
labelHome: "Home",
|
||||||
|
labelRetry: "Retry"
|
||||||
},
|
},
|
||||||
it: {
|
it: {
|
||||||
welcome: "BENVENUTO A PONG 42",
|
labelWelcome: "BENVENUTO A PONG 42",
|
||||||
labelNickname: "Inserisci il tuo soprannome:",
|
labelNickname: "Inserisci il tuo soprannome:",
|
||||||
labelPassword: "Inserisci la tua password:",
|
labelPassword: "Inserisci la tua password:",
|
||||||
labelConfirmPassword: "Conferma la tua password:",
|
labelConfirmPassword: "Conferma la tua password:",
|
||||||
labelLoginPassword: "Inserisci la tua password:"
|
labelLoginPassword: "Inserisci la tua password:",
|
||||||
|
labelSettings: "Impostazioni",
|
||||||
|
labelCheckNickname: "Controlla il tuo soprannome:",
|
||||||
|
labelLogin: "Accedi",
|
||||||
|
labelLocalGame: "Gioco locale",
|
||||||
|
labelQuickMatch: "Partita rapida",
|
||||||
|
labelTournament: "Torneo",
|
||||||
|
labelHome: "Home",
|
||||||
|
labelRetry: "Riprova"
|
||||||
},
|
},
|
||||||
es: {
|
es: {
|
||||||
welcome: "BIENVENIDO A PONG 42",
|
labelWelcome: "BIENVENIDO A PONG 42",
|
||||||
labelNickname: "Introduce tu apodo:",
|
labelNickname: "Introduce tu apodo:",
|
||||||
labelPassword: "Introduce tu contraseña:",
|
labelPassword: "Introduce tu contraseña:",
|
||||||
labelConfirmPassword: "Confirma tu contraseña:",
|
labelConfirmPassword: "Confirma tu contraseña:",
|
||||||
labelLoginPassword: "Introduce tu contraseña:"
|
labelLoginPassword: "Introduce tu contraseña:",
|
||||||
|
labelSettings: "Ajustes",
|
||||||
|
labelCheckNickname: "Comprueba tu apodo:",
|
||||||
|
labelLogin: "Iniciar sesión",
|
||||||
|
labelLocalGame: "Juego local",
|
||||||
|
labelQuickMatch: "Partida rápida",
|
||||||
|
labelTournament: "Torneo",
|
||||||
|
labelHome: "Inicio",
|
||||||
|
labelRetry: "Reintentar"
|
||||||
},
|
},
|
||||||
de: {
|
de: {
|
||||||
welcome: "WILLKOMMEN BEI PONG 42",
|
labelWelcome: "WILLKOMMEN BEI PONG 42",
|
||||||
labelNickname: "Geben Sie Ihren Spitznamen ein:",
|
labelNickname: "Geben Sie Ihren Spitznamen ein:",
|
||||||
labelPassword: "Geben Sie Ihr Passwort ein:",
|
labelPassword: "Geben Sie Ihr Passwort ein:",
|
||||||
labelConfirmPassword: "Bestätigen Sie Ihr Passwort:",
|
labelConfirmPassword: "Bestätigen Sie Ihr Passwort:",
|
||||||
labelLoginPassword: "Geben Sie Ihr Passwort ein:"
|
labelLoginPassword: "Geben Sie Ihr Passwort ein:",
|
||||||
|
labelSettings: "Einstellungen",
|
||||||
|
labelCheckNickname: "Überprüfen Sie Ihren Spitznamen:",
|
||||||
|
labelLogin: "Anmelden",
|
||||||
|
labelLocalGame: "Lokales Spiel",
|
||||||
|
labelQuickMatch: "Schnelles Spiel",
|
||||||
|
labelTournament: "Turnier",
|
||||||
|
labelHome: "Startseite",
|
||||||
|
labelRetry: "Wiederholen"
|
||||||
|
},
|
||||||
|
test: {
|
||||||
|
labelWelcome: "1",
|
||||||
|
labelNickname: "2",
|
||||||
|
labelPassword: "3",
|
||||||
|
labelConfirmPassword: "4",
|
||||||
|
labelLoginPassword: "5",
|
||||||
|
labelSettings: "6",
|
||||||
|
labelCheckNickname: "7",
|
||||||
|
labelLogin: "8",
|
||||||
|
labelLocalGame: "9",
|
||||||
|
labelQuickMatch: "10",
|
||||||
|
labelTournament: "11",
|
||||||
|
labelHome: "12",
|
||||||
|
labelRetry: "13"
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
@ -62,11 +117,19 @@ document.addEventListener('DOMContentLoaded', () => {
|
|||||||
|
|
||||||
function changeLanguage(lang) {
|
function changeLanguage(lang) {
|
||||||
setCookie('preferredLanguage', lang, 365);
|
setCookie('preferredLanguage', lang, 365);
|
||||||
document.getElementById('welcome').innerText = translations[lang].welcome;
|
document.getElementById('welcome').innerText = translations[lang].labelWelcome;
|
||||||
document.getElementById('label-nickname').innerText = translations[lang].labelNickname;
|
document.getElementById('label-nickname').innerText = translations[lang].labelNickname;
|
||||||
document.getElementById('label-password').innerText = translations[lang].labelPassword;
|
document.getElementById('label-password').innerText = translations[lang].labelPassword;
|
||||||
document.getElementById('label-confirm-password').innerText = translations[lang].labelConfirmPassword;
|
document.getElementById('label-confirm-password').innerText = translations[lang].labelConfirmPassword;
|
||||||
document.getElementById('label-login-password').innerText = translations[lang].labelLoginPassword;
|
document.getElementById('label-login-password').innerText = translations[lang].labelLoginPassword;
|
||||||
|
document.getElementById('settings-btn').innerText = translations[lang].labelSettings;
|
||||||
|
document.getElementById('check-nickname').innerText = translations[lang].labelCheckNickname;
|
||||||
|
document.getElementById('login').innerText = translations[lang].labelLogin;
|
||||||
|
document.getElementById('local-game').innerText = translations[lang].labelLocalGame;
|
||||||
|
document.getElementById('quick-match').innerText = translations[lang].labelQuickMatch;
|
||||||
|
document.getElementById('tournament').innerText = translations[lang].labelTournament;
|
||||||
|
document.getElementById('home').innerText = translations[lang].labelHome;
|
||||||
|
document.getElementById('retry').innerText = translations[lang].labelRetry;
|
||||||
}
|
}
|
||||||
|
|
||||||
function setLanguageFromCookie() {
|
function setLanguageFromCookie() {
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user