Hallo zusammen,
mittlerweile besitze ich eine eigene API die gewisse Daten aus meinem Forum abruft und diese als JSON Ausgabe wiedergibt. Das ganze schaut so aus.
Code
https://www.meinedomain.de/index.php?user-api&method=login&username=Meinusername&password=MeinPassword&secret=MeinSecretKey
Als Ausgabe bekomme ich folgendes.
Brainfuck
status 200
data
userID 1
wscApiId 0
username "Dr.West"
email "webmaster@afd.de"
options
userID 1
userOption1 ""
userOption2 ""
userOption3 1
userOption4 "0"
userOption5 ""
userOption6 ""
userOption7 ""
userOption8 ""
userOption9 ""
userOption10 null
userOption11 null
userOption12 ""
userOption13 ""
userOption14 1
userOption15 "Europe/Berlin"
userOption16 1
userOption17 1
userOption18 "0"
userOption19 "0"
userOption20 "0"
userOption21 "3"
userOption22 "1"
userOption23 1
userOption24 "1"
userOption25 "0"
userOption26 "0"
userOption27 "0"
userOption28 "0"
userOption29 "0"
userOption30 1
userOption31 1
groups
0
groupID 1
groupName "Jeder"
groupType 1
1
groupID 3
groupName "Registrierte Benutzer"
groupType 3
2
groupID 4
groupName "Administratoren"
groupType 9
3
groupID 6
groupName "Bürger"
groupType 4
Alles anzeigen
Das ganze würde ich gerne in meinem Script umgesetzt haben, wie aber genau muss das umgesetzt werden?
Code
mp.events.add("sendDataToServer", (player, user, pass, state) => {
let loggedAccount = mp.players.toArray().find(p => p.loggedInAs == username);
switch(state){
//Account Login
case 0:
{
if(loggedAccount){
console.log("Logged in already.");
player.call("loginHandler", ["logged"]);
} else {
gm.mysql.handle.query('SELECT `password` FROM `accounts` WHERE `username` = ?', [username], function(err, res){
if(res.length > 0){
let sqlPassword = res[0]["password"];
bcrypt.compare(pass, sqlPassword, function(err, res2) {
if(res2 === true){
player.name = username;
player.call("loginHandler", ["success"]);
gm.auth.loadAccount(player);
} else {
player.call("loginHandler", ["incorrectinfo"]);
}
});
} else {
player.call("loginHandler", ["incorrectinfo"]);
}
});
}
break;
}
//Account Registration
case 1:
{
if(username.length >= 3 && pass.length >= 5){
gm.mysql.handle.query('SELECT * FROM `accounts` WHERE `username` = ?', [username], function(err, res){
if(res.length > 0){
player.call("loginHandler", ["takeninfo"]);
} else {
bcrypt.hash(pass, function(err, hash) {
if(!err){
gm.mysql.handle.query('INSERT INTO `accounts` SET username = ?, password = ?', [username, hash], function(err, res){
if(!err){
player.name = username;
console.log("\x1b[92m" + username + "\x1b[39m has just registered.");
} else {
console.log("\x1b[31m[ERROR] " + err)
}
});
} else {
console.log("\x1b[31m[BCrypt]: " + err)
}
});
}
});
} else {
player.call("loginHandler", ["tooshort"]);
}
break;
}
default:
{
player.outputChatBox("An error has occured, please contact your server administrator.")
console.log("\x1b[31m[ERROR] Login/Register state was one that isn't defined. State: " + state)
break;
}
}
});
Alles anzeigen
Meine Testfunktion scheint hier komplett falsch zu sein oder?
Code
function getTestPersonaLoginCredentials(callback) {
return http.get({
host: 'personatestuser.org',
path: '/email',
headers: { 'User-Agent': 'Projekt Reallife Agent 1.0.0' }
}, function(response) {
// Continuously update stream with data
var body = '';
response.on('data', function(d) {
body += d;
});
response.on('end', function() {
// Data reception is done, do whatever with it!
var parsed = JSON.parse(body);
callback({
email: parsed.email,
password: parsed.pass
});
});
});
}
Alles anzeigen
Ich möchte halt anstelle aus der Datenbank den USer aus dem Forum abfragen und wenn der User in der Bürger gruppe ist (ID 4), dann darf er einloggen und der Server sagt ok!