Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <a_samp>
- #include <a_mysql>
- #include <hash>
- #include <sscanf2>
- #include <s_useful>
- #define MAILER_URL "s4t3kx.alwaysdata.net/mailer.php"
- #define MAIL_ADMIN "s4t3kx@alwaysdata.net"
- #include <mailer>
- #define HOTE ""
- #define USER ""
- #define DB ""
- #define PASS ""
- #define D_LOGIN 1998
- #define D_REGISTER 1999
- #define D_AEMAIL 2000
- #define D_SEMAIL 2001
- #define D_ITEL 2002
- #define WH_LENGHT WHIRLPOOL_LENGTH
- static MySQL, requete[1024];
- static bool:haveLoggedIn[MAX_PLAYERS char];
- static pName[MAX_PLAYERS][21];
- #if defined GetName
- #undef GetName
- #endif
- #define GetName(%1) (pName[%1])
- forward KickPublic(playerid);
- forward OnResponseSpawn(playerid);
- public KickPublic(playerid) { Kick(playerid); }
- stock KickWithMessage(playerid, message[])
- {
- if(!IsPlayerConnected(playerid)) return 0;
- SendClientMessage(playerid, -1, message);
- SetTimerEx("KickPublic", 2, false, "i", playerid);
- return 1;
- }
- stock FinInscription(playerid)
- {
- SendClientMessage(playerid, -1, "{FF0000}[Admin]{FFFFFF} Inscription terminée ! Vous allez maintenant pouvoir Spawn !");
- SpawnPlayer(playerid);
- haveLoggedIn{playerid} = true;
- mysql_format(MySQL, requete, sizeof(requete), "UPDATE `Joueurs` SET `fin_inscription` = 1 WHERE `pseudo` = '%s'", GetName(playerid));
- mysql_tquery(MySQL, requete);
- return 1;
- }
- public OnFilterScriptInit()
- {
- MySQL = mysql_connect(HOTE, USER, DB, PASS);
- if(MySQL) print(">> Connexion a l'hote reussie !");
- else mysql_reconnect(MySQL);
- print(">> s_register chargé !");
- return 1;
- }
- public OnFilterScriptExit()
- {
- mysql_close(MySQL);
- if(!MySQL) printf(">> Déconnexion de l'hôte réussie.");
- else mysql_close(MySQL);
- printf(">> s_register déchargé !");
- return 1;
- }
- public OnPlayerRequestSpawn(playerid)
- {
- if(haveLoggedIn{playerid}) return 0;
- GetPlayerName(playerid, pName[playerid], 21);
- mysql_format(MySQL, requete, sizeof(requete), "SELECT * FROM `Joueurs` WHERE `pseudo` = '%s'", GetName(playerid));
- mysql_tquery(MySQL, requete, "OnResponseSpawn", "i", playerid);
- return 0;
- }
- public OnPlayerRequestClass(playerid, classid)
- {
- #pragma unused classid
- SendClientMessage(playerid, -1, "{FF0000}[Admin]{FFFFFF} Cliquez sur \"Spawn\" pour vous connecter/enregistrer.");
- return 0;
- }
- public OnPlayerDisconnect(playerid, reason)
- {
- #pragma unused reason // inutile mais au moins c'est clair
- haveLoggedIn{playerid} = false;
- return 1;
- }
- public OnDialogResponse(playerid, dialogid, response, listitem, inputtext[])
- {
- if(dialogid == D_LOGIN)
- {
- if(!response) return KickWithMessage(playerid, "{FF0000}[Erreur]{FFFFFF} Vous devez être connecté pour spawn sur le serveur.");
- mysql_format(MySQL, requete, sizeof(requete), "SELECT `password` FROM `Joueurs` WHERE `pseudo` = '%s'", GetName(playerid));
- mysql_tquery(MySQL, requete);
- if(cache_num_rows() > 0)
- {
- new hashed[WH_LENGHT+1], actual_pass[WH_LENGHT+1], salt[WH_LENGHT+1], salted[150], essais;
- cache_get_field_content(0, "password", actual_pass, MySQL, WH_LENGHT+1);
- cache_get_field_content(0, "salt", salt, MySQL, WH_LENGHT+1);
- strcat(salted, inputtext);
- strcat(salted, salt);
- whirlpool(salted, hashed, WH_LENGHT+1);
- if(strcmp(hashed, actual_pass, false) != 0)
- {
- if(essais < 2)
- {
- ShowPlayerDialog(playerid, D_LOGIN, DIALOG_STYLE_PASSWORD, "{04AB94}Connexion", "Le mot de passe entré est incorrect. Entrez votre \n mot de passe dans la case ci-dessous.", "Valider", "Retour");
- essais++;
- }
- else
- {
- ShowPlayerDialog(playerid, D_SEMAIL, DIALOG_STYLE_INPUT, "{04AB94}Récupération", "Vous avez entré trois fois de suite un mauvais mot de passe. Par conséquent, \n vous devez entrer votre adresse e-mail mise à l'inscription pour récupérer \n votre compte perdu. Si l'adresse mail n'est pas identique deux fois de suite, votre compte \n sera banni.", "Valider", "");
- }
- }
- else SpawnPlayer(playerid), haveLoggedIn{playerid} = true;
- return 1;
- }
- }
- if(dialogid == D_REGISTER)
- {
- if(!response) return KickWithMessage(playerid, "Vous devez être enregistré pour jouer.");
- if(strlen(inputtext) < 6)
- {
- ShowPlayerDialog(playerid, D_REGISTER, DIALOG_STYLE_PASSWORD, "{04AB94}Enregistrement", "La taille du mot de passe doit être comprise entre {04AB94}6{FFFFFF} et {04AB94}64{FFFFFF} caractères.", "Valider", "Retour");
- return 1;
- }
- new salt[WH_LENGHT+1], whashed[WH_LENGHT+1], heure[6], salted1[258];
- random_string(129, salt, 129);
- strcat(salted1, inputtext);
- strcat(salted1, salt);
- whirlpool(salted1, whashed, WH_LENGHT+1);
- getdate(heure[0], heure[1], heure[2]);
- gettime(heure[3], heure[4], heure[5]);
- mysql_format(MySQL, requete, sizeof(requete), "INSERT INTO `Joueurs` VALUES (NULL, '%s', '%s', '%s', '%d-%d-%d %d:%d:%d', NULL, NULL, 0)", GetName(playerid), whashed, salt, heure[0], heure[1], heure[2], heure[3], heure[4], heure[5]);
- mysql_tquery(MySQL, requete);
- if(cache_affected_rows() > 0)
- {
- SendClientMessage(playerid, -1, "{FF0000}[Admin]{FFFFFF} Votre compte a été créé avec succès !");
- ShowPlayerDialog(playerid, D_AEMAIL, DIALOG_STYLE_INPUT, "{04AB94}Enregistrement", "Ajoutez votre adresse e-mail pour pouvoir directement réinitialiser votre mot de passe \n en cas d'oubli.", "Valider", "Retour");
- //SpawnPlayer(playerid);
- }
- else return KickWithMessage(playerid, "{FF0000}[Admin]{FFFFFF} Le système d'enregistrement a rencontré un problème lors de la création de votre compte. Veuillez vous déconnecter et recréer votre compte.");
- }
- if(dialogid == D_AEMAIL)
- {
- if(!response) return KickWithMessage(playerid, "{FF0000}[Admin]{FFFFFF} Vous devez entrer une adresse e-mail.");
- if(!strfind(inputtext, "@") || !strfind(inputtext, "."))
- {
- ShowPlayerDialog(playerid, D_AEMAIL, DIALOG_STYLE_INPUT, "{04AB94}Enregistrement", "L'adresse email entrée est invalide. Veuillez l'entrer à nouveau.", "Valider", "Retour");
- return 1;
- }
- else
- {
- mysql_format(MySQL, requete, sizeof(requete), "SELECT `pseudo` FROM `Joueurs` WHERE `e_mail` = '%s'", inputtext);
- mysql_tquery(MySQL, requete);
- if(cache_num_rows() > 0)
- {
- new mess[144], pseudow[MAX_PLAYER_NAME+1];
- cache_get_field_content(0, "pseudo", pseudow, MySQL, sizeof(pseudow));
- mysql_format(MySQL, mess, sizeof(mess), "{FF0000}[Admin]{FFFFFF} L'adresse email renseignée est déjà liée à un compte (Pseudo : %s)", pseudow);
- KickWithMessage(playerid, mess);
- return 1;
- }
- mysql_format(MySQL, requete, sizeof(requete), "UPDATE `Joueurs` SET `e_mail` = '%e' WHERE `pseudo` = '%s'", inputtext, GetName(playerid));
- mysql_tquery(MySQL, requete);
- if(cache_affected_rows() > 0)
- {
- SendClientMessage(playerid, -1, "{FF0000}[Admin]{FFFFFF} Votre adresse e-mail a été liée à votre compte avec succès !");
- ShowPlayerDialog(playerid, D_ITEL, DIALOG_STYLE_INPUT, "{04AB94}Enregistrement", "Veuillez ajouter votre numéro de téléphone InRealLife également. Il servira également de moyen de récupération de mot de passe en cas d'oubli.", "Valider", "Retour");
- //SpawnPlayer(playerid);
- return 1;
- }
- else return KickWithMessage(playerid, "{FF0000}[Admin]{FFFFFF} Une erreur a eu lieu lors de la liaison de votre adresse e-mail à votre compte.");
- }
- }
- if(dialogid == D_SEMAIL)
- {
- if(!response)
- {
- ShowPlayerDialog(playerid, D_SEMAIL, DIALOG_STYLE_INPUT, "{04AB94}Récupération", "Vous devez entrer une adresse e-mail valide.", "Valider", "");
- return 1;
- }
- mysql_format(MySQL, requete, sizeof(requete), "SELECT `e_mail` FROM `Joueurs` WHERE `pseudo` = '%s' LIMIT 1", GetName(playerid));
- mysql_tquery(MySQL, requete);
- if(cache_num_rows() <= 0) return Ban(playerid);
- else
- {
- new email[60];
- cache_get_field_content(0, "e_mail", email, MySQL, sizeof(email));
- if(!strcmp(inputtext, email, true)) return Ban(playerid);
- else
- {
- new mess[1024], mess1[256], rand_pass[16], salt[129], salted[150], hashed_random[WH_LENGHT+1];
- cache_get_field_content(0, "salt", salt, MySQL, 129);
- random_string(16, rand_pass, 16);
- strcat(salted, rand_pass);
- strcat(salted, salt);
- whirlpool(salted, hashed_random, WH_LENGHT+1);
- mysql_format(MySQL, requete, sizeof(requete), "UPDATE `Joueurs` SET `password` = '%s' WHERE `pseudo` = '%s'", hashed_random, GetName(playerid));
- mysql_tquery(MySQL, requete);
- mess = "Bonjour. Ce mail vous est envoyé à la suite de votre demande de réinitialisation de mot de passe.\n Un nouveau mot de passe a été généré aléatoirement à partir d'un algorithme puissant et sécurisé, puis re-hashé pour votre sécurité.";
- format(mess1, sizeof(mess1), "Si vous rencontrez des difficultés, demandez conseil à l'Admin de votre serveur. Personne ne lit les mails de cette boîte : c'est un automate.\n\n\n Le nouveau mot de passe généré aléatoirement est : %s . Pour encore plus de sécurité, il vous est recommandé de le changer une fois InGame via la commande /changepass.\n\n Toute l'équipe vous souhaite un excellent jeu parmi nous.", rand_pass);
- strcat(mess, mess1);
- SendMail(inputtext, MAIL_ADMIN, "Autobot [s_register]", "Réintialisation de mot de passe [s_register]", mess);
- return 1;
- }
- }
- }
- if(dialogid == D_ITEL)
- {
- if(!response)
- {
- ShowPlayerDialog(playerid, D_ITEL, DIALOG_STYLE_INPUT, "{04AB94}Enregistrement", "Vous devez entrer un numéro de téléphone valide (commençant par {04AB94}06{FFFFFF} ou par {04AB94}07{FFFFFF}). Les téléphones fixes sont aussi acceptés, à condition qu'ils lisent les SMS.", "Valider", "Retour");
- return 1;
- }
- new debut[3];
- strmid(debut, inputtext, 0, 2);
- if(!strcmp(debut, "01", true) || !strcmp(debut, "02", true) || !strcmp(debut, "03", true) || !strcmp(debut, "04", true) || !strcmp(debut, "05", true) || !strcmp(debut, "06", true) || !strcmp(debut, "07", true) || !strcmp(debut, "09", true))
- {
- ShowPlayerDialog(playerid, D_ITEL, DIALOG_STYLE_INPUT, "{04AB94}Enregistrement", "Vous devez entrer un numéro de téléphone valide (commençant par {04AB94}06{FFFFFF} ou par {04AB94}07{FFFFFF}). Les téléphones fixes sont aussi acceptés, à condition qu'ils lisent les SMS.", "Valider", "Retour");
- return 1;
- }
- if(strlen(inputtext) != 10)
- {
- ShowPlayerDialog(playerid, D_ITEL, DIALOG_STYLE_INPUT, "{04AB94}Enregistrement", "Vous devez entrer un numéro de téléphone valide (commençant par {04AB94}06{FFFFFF} ou par {04AB94}07{FFFFFF}). Les téléphones fixes sont aussi acceptés, à condition qu'ils lisent les SMS.", "Valider", "Retour");
- return 1;
- }
- mysql_format(MySQL, requete, sizeof(requete), "UPDATE `Joueurs` SET `telephone` = '%e' WHERE `pseudo` = '%s'", inputtext, GetName(playerid));
- mysql_tquery(MySQL, requete);
- if(cache_affected_rows() > 0)
- {
- FinInscription(playerid);
- return 1;
- }
- else return KickWithMessage(playerid, "{FF0000}[Admin]{FFFFFF} Il y a eu un problème d'insertion de numéro de téléphone. Veuillez vous reconnecter et recommencer l'inscription.");
- }
- return 0;
- }
- public OnPlayerCommandText(playerid, cmdtext[])
- {
- new cmd[26], params[128];
- sscanf(cmdtext, "'/'s[26] s[128]", cmd, params);
- if(!strcmp(cmd, "changepass", true))
- {
- if(!haveLoggedIn{playerid}) return 0;
- if(!strlen(params)) return SendClientMessage(playerid, -1, "{33CCFF}USAGE:{FFFFFF} /changepass [Nouveau pass]");
- new pass[20], hpass[WH_LENGHT+1];
- sscanf(params, "s[20]", pass);
- whirlpool(pass, hpass, WH_LENGHT+1);
- mysql_format(MySQL, requete, sizeof(requete), "UPDATE `Joueurs` SET `password` = '%e' WHERE `pseudo` = '%s'", hpass, GetName(playerid));
- mysql_tquery(MySQL, requete);
- if(cache_num_rows() > 0) return SendClientMessage(playerid, -1, "{FF0000}[Admin]{FFFFFF} Votre mot de passe a été changé avec succès. Il a également été hashé par mesure de sécurité.");
- else return SendClientMessage(playerid, -1, "{FF0000}[Admin]{FFFFFF} Il y a eu un problème lors du changement de votre mot de passe. Veuillez réessayer avec la commande.");
- }
- if(!strcmp(cmd, "achangepass", true))
- {
- if(!IsPlayerAdmin(playerid)) return SendClientMessage(playerid, -1, "{FF0000}[Erreur]{FFFFFF} Vous n'êtes pas autorisé à utiliser cette commande (admins rcon connectés seulement)");
- if(!strlen(params)) return SendClientMessage(playerid, -1, "{33CCFF}USAGE:{FFFFFF} /achangepass [Nom d'utilisateur] [Nouveau pass]");
- new pass[20], user[MAX_PLAYER_NAME+1], hpass[WH_LENGHT+1];
- sscanf(params, "s[MAX_PLAYER_NAME+1] s[20]", user, pass);
- whirlpool(pass, hpass, WH_LENGHT+1);
- mysql_format(MySQL, requete, sizeof(requete), "UPDATE `Joueurs` SET `password` = '%e' WHERE `pseudo` = '%s'", hpass, user);
- mysql_tquery(MySQL, requete);
- if(cache_num_rows() > 0) return SendClientMessage(playerid, -1, "{FF0000}[Admin]{FFFFFF} Le mot de passe de %s a été changé. Par mesure de sécurité, il a également été hashé.");
- else return SendClientFormattedMessage(playerid, -1, "{FF0000}[Admin]{FFFFFF} Il y a eu un problème lors du changement de mot de passe de %s. Veuillez réessayer avec la commande.", user);
- }
- return 0;
- }
- public OnResponseSpawn(playerid)
- {
- new phrase_login[512];
- if(cache_num_rows() > 0)
- {
- new var = cache_get_field_content_int(0, "fin_inscription", MySQL);
- if(var == 0)
- {
- ShowPlayerDialog(playerid, D_AEMAIL, DIALOG_STYLE_INPUT, "{04AB94}Enregistrement{FFFFFF} (reprise)", "Vous reprenez l'inscription à l'insertion d'adresse e-mail.", "Valider", "Retour");
- return 1;
- }
- else
- {
- format(phrase_login, sizeof(phrase_login), "Bienvenue sur le serveur, %s.\n Il semblerait que votre compte soit enregistré. Entrez votre mot de passe\n dans la barre ci-dessous. Attention : Les mots de passe sont sensibles à la casse !", GetName(playerid));
- ShowPlayerDialog(playerid, D_LOGIN, DIALOG_STYLE_PASSWORD, "{04AB94}Connexion", phrase_login, "Valider", "Retour");
- }
- }
- else
- {
- format(phrase_login, sizeof(phrase_login), "Bienvenue sur le serveur, %s.\n Il semblerait que vous ne soyez pas inscrit sur le serveur. Entrez votre\n mot de passe désiré dans la barre ci-dessous.", GetName(playerid));
- ShowPlayerDialog(playerid, D_REGISTER, DIALOG_STYLE_PASSWORD, "{04AB94}Enregistrement", phrase_login, "Valider", "Retour");
- }
- return 1;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement