Skip to content

Commit

Permalink
changed iapi format
Browse files Browse the repository at this point in the history
  • Loading branch information
SorenEricMent committed Jul 17, 2022
1 parent 1e5c6c1 commit a0a4c24
Show file tree
Hide file tree
Showing 4 changed files with 53 additions and 16 deletions.
3 changes: 1 addition & 2 deletions main.cjs
Original file line number Diff line number Diff line change
Expand Up @@ -21,8 +21,7 @@ async function wrapper() {
).listen(prerequisite.bootConfig.port, function () {
prerequisite.log("log", "Main", "Blorum Server started on port " + finalServer.address().port);
console.log("Welcome to Blorum, made with ♡ by Winslow S.E.M.");
}
).on('error', function (err) {
}).on('error', function (err) {
prerequisite.log("error", "Main", "Blorum Server failed to start on port " + prerequisite.bootConfig.port);
prerequisite.log("error", "Main", err);
});
Expand Down
50 changes: 38 additions & 12 deletions modules/iapi.mjs
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,8 @@ JSON.parse = parse.parse;

import {
generateNewToken, blake3Hash, objHasAllProperties,
strASCIIOnly, strStrictLegal, basicPasswordRequirement, isValidEmail, strNotOnlyNumber
strASCIIOnly, strStrictLegal, basicPasswordRequirement, isValidEmail, strNotOnlyNumber,
mergeJSON
} from "./utils.mjs";

class IAPI {
Expand Down Expand Up @@ -46,7 +47,7 @@ class IAPI {
let promisePool = [];
for(const element of results){
let parsedElement = JSON.parse(element);
if(parsedElement.statistics.date + userPermissions.flags.cookie_expire_after < this.timestamp()){
if(parsedElement.statistics.date + userPermissions.cookie_expire_after < this.timestamp()){
promisePool.push(new Promise((resolve, reject) => {
this.redis.lrem(redisKey, 0, element, (err, results) => {
if(err){
Expand All @@ -71,6 +72,30 @@ class IAPI {
});
});
}
getRedisKeyIfExists(redisKey){
return new Promise((resolve, reject) => {
//check if redisKey exists, if yes, get the value of it and return it, if not, return null.
this.redis.exists(redisKey, (err, results) => {
if(err){
reject(err);
this.log("log", "IAPI", "Failed to check if redis key exists: " + redisKey);
}else{
if(results == 1){
this.redis.get(redisKey, (err, results) => {
if(err){
reject(err);
this.log("log", "IAPI", "Failed to get redis key: " + redisKey);
}else{
resolve(results);
}
});
}else{
resolve(null);
}
}
});
});
}
checkIfUserHasSession(uid){
return new Promise((resolve, reject) => {
this.redis.lrange(this.rp + ":user_session:" + uid, 0, -1, (err, results) => {
Expand All @@ -82,6 +107,7 @@ class IAPI {
});
});
}
//Actual service functions
userLogin(req, username, password) {
let connIP = this.IP(req);
let userAgent = req.headers['user-agent'];
Expand Down Expand Up @@ -117,8 +143,8 @@ class IAPI {
});
this.redis.lrange(redisKey, 0, -1, (err, results) => {
this.removeExpiredSessions(redisKey, userPermissions, results).then((removedSessions) => {
if(results.length - removedSessions >= userPermissions.flags.max_session){
console.log(removedSessions);
if(results.length - removedSessions >= userPermissions.max_session){
this.log("debug", "IAPI", "Removed " + removedSessions + " expired sessions from redis");
reject("You have reached the maximum number of sessions.");
}else{
this.redis.lpush(redisKey,finalSession, (err, results) => {
Expand All @@ -129,10 +155,8 @@ class IAPI {
this.log("debug", "IAPI", "Successfully pushed user session to redis, user logged in: " + username + ",results: " + results);
resolve({
"uid": user.uid,
"permissions": {
"role": userRole,
"flags": userPermissions.flags.permissions.flags
},
"role": userRole,
"permissions": userPermissions.permissions,
"token": newToken
});
}
Expand Down Expand Up @@ -204,10 +228,12 @@ class IAPI {
let defaultPreferences = {

};
let defaultPermissions = {
"role": "user",
"flags": JSON.parse(this.siteConfig.roles_permissions)[this.siteConfig.register_default_role]
}
let defaultPermissions = mergeJSON(
{
"role": this.siteConfig.register_default_role
},
JSON.parse(this.siteConfig.roles_permissions)[this.siteConfig.register_default_role]
);
try {
this.mysql.query(
"INSERT INTO users (username, nickname, email, password, avatar, about, statistics, permissions, preferences) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?)",
Expand Down
13 changes: 12 additions & 1 deletion modules/utils.mjs
Original file line number Diff line number Diff line change
Expand Up @@ -142,9 +142,20 @@ function isValidEmail(str){
return /^[^\s@]+@[^\s@]+\.[^\s@]+$/.test(str);
}

function mergeJSON(...args){
let obj = {};
for(let i = 0; i < args.length; i++){
for(let key in args[i]){
obj[key] = args[i][key];
}
}
return obj;
}


export {
version, outputLogs, outputLogsColored, blake3Hash, generateNewToken,
isModuleAvailable, promisifiedMysqlConnect, promisifiedRedisConnect,
strASCIIOnly, strStrictLegal, basicPasswordRequirement, isValidEmail, isAllString,
objHasAllProperties, strNotOnlyNumber
objHasAllProperties, strNotOnlyNumber, mergeJSON
};
3 changes: 2 additions & 1 deletion node_modules/body-parser/lib/types/json.js

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

0 comments on commit a0a4c24

Please sign in to comment.