mirror of
				https://gitlab.com/comunic/comunicapiv2
				synced 2025-11-04 11:34:04 +00:00 
			
		
		
		
	Can sign out user
This commit is contained in:
		@@ -41,6 +41,19 @@ export class AccountController {
 | 
				
			|||||||
		});
 | 
							});
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						/**
 | 
				
			||||||
 | 
						 * Disconnect user
 | 
				
			||||||
 | 
						 * 
 | 
				
			||||||
 | 
						 * @param handler 
 | 
				
			||||||
 | 
						 */
 | 
				
			||||||
 | 
						public static async LogoutUser(handler: RequestHandler) {
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
							await AccountHelper.DestroyUserTokens(handler.getClientInfo(), 
 | 
				
			||||||
 | 
								handler.getUserId());
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
							handler.success("User has been disconnected!");
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	/**
 | 
						/**
 | 
				
			||||||
	 * Get current user ID
 | 
						 * Get current user ID
 | 
				
			||||||
	 * 
 | 
						 * 
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -29,6 +29,9 @@ export const Routes : Route[] = [
 | 
				
			|||||||
	{path: "/account/login", cb: AccountController.LoginUser, needLogin: false},
 | 
						{path: "/account/login", cb: AccountController.LoginUser, needLogin: false},
 | 
				
			||||||
	{path: "/user/connectUSER", cb: AccountController.LoginUser, needLogin: false}, // Legacy
 | 
						{path: "/user/connectUSER", cb: AccountController.LoginUser, needLogin: false}, // Legacy
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						{path: "/account/logout", cb: AccountController.LogoutUser},
 | 
				
			||||||
 | 
						{path: "/user/disconnectUSER", cb: AccountController.LogoutUser}, // Legacy
 | 
				
			||||||
 | 
						
 | 
				
			||||||
	{path: "/account/id", cb: AccountController.CurrentUserID},
 | 
						{path: "/account/id", cb: AccountController.CurrentUserID},
 | 
				
			||||||
	{path: "/user/getCurrentUserID", cb: AccountController.CurrentUserID}, // Legacy
 | 
						{path: "/user/getCurrentUserID", cb: AccountController.CurrentUserID}, // Legacy
 | 
				
			||||||
]
 | 
					]
 | 
				
			||||||
@@ -107,6 +107,19 @@ export class AccountHelper {
 | 
				
			|||||||
		return Number(row.user_id);
 | 
							return Number(row.user_id);
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						/**
 | 
				
			||||||
 | 
						 * Destroy user tokens
 | 
				
			||||||
 | 
						 * 
 | 
				
			||||||
 | 
						 * @param client Information about the client
 | 
				
			||||||
 | 
						 * @param userID Target user ID
 | 
				
			||||||
 | 
						 */
 | 
				
			||||||
 | 
						public static async DestroyUserTokens(client: APIClient, userID: number) {
 | 
				
			||||||
 | 
							return DatabaseHelper.DeleteRows(USERS_TOKENS_TABLE, {
 | 
				
			||||||
 | 
								service_id: client.id,
 | 
				
			||||||
 | 
								user_id: userID
 | 
				
			||||||
 | 
							});
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	/**
 | 
						/**
 | 
				
			||||||
	 * Crypt a password
 | 
						 * Crypt a password
 | 
				
			||||||
	 * 
 | 
						 * 
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -122,12 +122,43 @@ export class DatabaseHelper {
 | 
				
			|||||||
	 */
 | 
						 */
 | 
				
			||||||
	static async InsertRow(table : string, values : any) : Promise<number> {
 | 
						static async InsertRow(table : string, values : any) : Promise<number> {
 | 
				
			||||||
		return new Promise((resolve, reject) => {
 | 
							return new Promise((resolve, reject) => {
 | 
				
			||||||
			this.connection.query("INSERT INTO " + table + " SET ?", values, (err, results, fields) => {
 | 
								this.connection.query("INSERT INTO " + table + " SET ?", values, (err, results, f) => {
 | 
				
			||||||
				if(err)
 | 
									if(err)
 | 
				
			||||||
					reject(err);
 | 
										reject(err);
 | 
				
			||||||
				
 | 
									else
 | 
				
			||||||
				resolve(results.insertId);
 | 
										resolve(results.insertId);
 | 
				
			||||||
			});
 | 
								});
 | 
				
			||||||
		});
 | 
							});
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						/**
 | 
				
			||||||
 | 
						 * Delete entries from a table
 | 
				
			||||||
 | 
						 * 
 | 
				
			||||||
 | 
						 * @param table Target table
 | 
				
			||||||
 | 
						 * @param where Where arguments
 | 
				
			||||||
 | 
						 */
 | 
				
			||||||
 | 
						static async DeleteRows(table: string, where: any) {
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
							let whereArgs = "";
 | 
				
			||||||
 | 
							let args = [];
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
							// Process conditions
 | 
				
			||||||
 | 
							for (const key in where) {
 | 
				
			||||||
 | 
								if (where.hasOwnProperty(key)) {
 | 
				
			||||||
 | 
									const value = where[key];
 | 
				
			||||||
 | 
									whereArgs += (whereArgs == "" ? "" : " AND ") + key + " = ?";
 | 
				
			||||||
 | 
									args.push(value);
 | 
				
			||||||
 | 
								}
 | 
				
			||||||
 | 
							}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
							if(whereArgs == "")
 | 
				
			||||||
 | 
								throw Error("Error : table could accidentally get purged!");
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
							return new Promise((resolve, reject) => {
 | 
				
			||||||
 | 
								this.connection.query("DELETE FROM " + table + " WHERE " + whereArgs, args, (err, r, f) => {
 | 
				
			||||||
 | 
									if(err) reject(err)
 | 
				
			||||||
 | 
									else resolve();
 | 
				
			||||||
 | 
								});
 | 
				
			||||||
 | 
							})
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
		Reference in New Issue
	
	Block a user