uid<->username lookup routes (#36)

This commit is contained in:
Barnaby 2022-04-12 22:43:14 +01:00 committed by GitHub
parent 78942467a0
commit acfc170d59
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
3 changed files with 109 additions and 1 deletions

81
account/lookup.js Normal file
View File

@ -0,0 +1,81 @@
const path = require( "path" )
const accounts = require( path.join( __dirname, "../shared/accounts.js" ) )
const { getRatelimit } = require( "../shared/ratelimit.js" )
module.exports = ( fastify, opts, done ) =>
{
// exported routes
// GET /accounts/lookup_uid
// attempts to find the uid of a player with a given username
fastify.get( "/accounts/lookup_uid",
{
config: { rateLimit: getRatelimit( "REQ_PER_MINUTE__ACCOUNT_LOOKUPUID" ) }, // ratelimit
schema: {
querystring: {
"username": { type: "string" }
}
},
},
async ( request ) =>
{
if( !request.query.username )
{
return {
success: false,
username: "",
matches: [],
error: "No username provided"
}
}
let matches = await accounts.AsyncGetPlayersByUsername( request.query.username )
return {
success: true,
username: request.query.username,
matches: matches.map( m => m.id )
}
} )
// GET /accounts/get_username
// attempts to find the username of a player with a given uid
fastify.get( "/accounts/get_username",
{
config: { rateLimit: getRatelimit( "REQ_PER_MINUTE__ACCOUNT_GETUSERNAME" ) }, // ratelimit
schema: {
querystring: {
"uid": { type: "string" }
}
},
},
async ( request ) =>
{
if( !request.query.uid )
{
return {
success: false,
uid: "",
matches: [],
error: "No UID provided"
}
}
console.log( request.query.uid )
let match = await accounts.AsyncGetPlayerByID( request.query.uid )
if( match == null )
{
return {
success: false,
uid: request.query.uid,
matches: [],
error: "No user found with that UID"
}
}
return {
success: true,
uid: request.query.uid,
matches: [match.username]
}
} )
done()
}

View File

@ -28,6 +28,8 @@ REQ_PER_MINUTE__SERVER_HEARTBEAT=60
REQ_PER_MINUTE__SERVER_UPDATEVALUES=20
REQ_PER_MINUTE__SERVER_REMOVESERVER=5
REQ_PER_MINUTE__ACCOUNT_WRITEPERSISTENCE=50
REQ_PER_MINUTE__ACCOUNT_LOOKUPUID=30
REQ_PER_MINUTE__ACCOUNT_GETUSERNAME=30
REQ_PER_MINUTE__PLAYER_DATA=50
# origin

View File

@ -88,6 +88,24 @@ function asyncDBGet( sql, params = [] )
} )
}
function asyncDBAll( sql, params = [] )
{
return new Promise( ( resolve, reject ) =>
{
playerDB.all( sql, params, ( ex, row ) =>
{
if ( ex )
{
console.error( "Encountered error querying player database: " + ex )
reject( ex )
}
else
resolve( row )
} )
} )
}
function asyncDBRun( sql, params = [] )
{
return new Promise( ( resolve, reject ) =>
@ -181,6 +199,13 @@ module.exports = {
return new PlayerAccount( row.id, row.currentAuthToken, row.currentAuthTokenExpirationTime, row.currentServerId, row.persistentDataBaseline, row.lastAuthIp, row.username )
},
AsyncGetPlayersByUsername: async function AsyncGetPlayerByUsername( username )
{
let rows = await asyncDBAll( "SELECT * FROM accounts WHERE username = ?", [ username ] )
return rows.map( row => new PlayerAccount( row.id, row.currentAuthToken, row.currentAuthTokenExpirationTime, row.currentServerId, row.persistentDataBaseline, row.lastAuthIp, row.username ) )
},
AsyncCreateAccountForID: async function AsyncCreateAccountForID( id )
{
await asyncDBRun( "INSERT INTO accounts ( id, persistentDataBaseline ) VALUES ( ?, ? )", [ id, DEFAULT_PDATA_BASELINE ] )
@ -247,6 +272,6 @@ module.exports = {
// newPdataJson = Object.assign( newPdataJson, this.AsyncGetPlayerModPersistence( id, pdiff.hash ) )
// }
// return PdataJsonToBuffer( newPdataJson, pdefCopy )
// return PdataJsonToBuffer( newPdataJson, pdefCopy )
}
}