Ajout initLogs

adminDb
Corentin RICHARD 2 years ago
parent 0b4c5409d0
commit 6c84169736

@ -43,33 +43,41 @@ class AccountsToPostgres {
}); });
} }
// Create tables and other things for the database
static Future<void> createAccountTable() async { static Future<void> createAccountTable() async {
await connection await openConnection();
.query( await connection.query("""
"CREATE TABLE IF NOT EXISTS \"Account\"(id TEXT PRIMARY KEY,hash TEXT NOT NULL,salt TEXT NOT NULL,twofa VARCHAR(50)[],passwords INTEGER[])") CREATE TABLE IF NOT EXISTS \"Account\"(
.then((value) { id INT PRIMARY KEY,
mail TEXT NOT NULL UNIQUE,
hash TEXT NOT NULL,
salt TEXT NOT NULL,
twofa VARCHAR(50)[],
password_file INTEGER[]
)""");
await connection.query("""
CREATE SEQUENCE IF NOT EXISTS plus1id
INCREMENT 1
START 1""");
print("🟦 Account Table Created"); print("🟦 Account Table Created");
}); await initLogs();
} }
// Add support for twoFa if needed // Create user account
static Future<void> create(String email, String hash, static Future<void> createAccount(
String salt /*, List<String> twoFaStr*/) async { String mail, String hash, String salt) async {
await connection.query("INSERT INTO \"Account\" VALUES(@id,@hash,@salt)", await connection.query(
substitutionValues: { "INSERT INTO \"Account\" VALUES(nextval('plus1id'),@mail,@hash,@salt)",
"id": email, substitutionValues: {"mail": mail, "hash": hash, "salt": salt});
"hash": hash,
"salt": salt /*,
"twofa": twoFaStr*/
});
selectHashById(email); //Testing if the user is created
print("✅ Account succesfully created");
} }
static Future<String> selectHashById(String id) async { // get user passord hash by mail
static Future<String> selectHashByMail(String mail) async {
List<List<dynamic>> results = await connection.query( List<List<dynamic>> results = await connection.query(
"SELECT hash FROM \"Account\" WHERE id=@identifiant", "SELECT hash FROM \"Account\" WHERE mail=@mail",
substitutionValues: {"identifiant": id}); substitutionValues: {"mail": mail});
if (results.length < 1) { if (results.length < 1) {
throw PostgreSQLException("No user for this id", throw PostgreSQLException("No user for this id",
@ -82,6 +90,15 @@ class AccountsToPostgres {
return results[0][0]; return results[0][0];
} }
// check if mail is already used in database
static Future<String> selectMailByMail(String mail) async {
List<List<dynamic>> results = await connection.query(
"SELECT mail FROM \"Account\" WHERE mail=@mail",
substitutionValues: {"mail": mail});
return results[0][0];
}
static Future<List<Int>> selectPassFileById(String id) async { static Future<List<Int>> selectPassFileById(String id) async {
List<List<dynamic>> results = await connection.query( List<List<dynamic>> results = await connection.query(
"SELECT passwords FROM \"Account\" WHERE id=@identifiant", "SELECT passwords FROM \"Account\" WHERE id=@identifiant",
@ -99,54 +116,57 @@ class AccountsToPostgres {
return results[0][0]; return results[0][0];
} }
static Future<void> updatePass( // Update user password
String identifiant, String hash, String salt) async { static Future<void> updatePassword(
if (selectHashById(identifiant) == null) { String mail, String newHash, String newSalt) async {
if (selectHashByMail(mail) == null) {
return; return;
} else { } else {
await connection.query( await connection.query(
"UPDATE \"Account\" SET hash=@h, salt=@s WHERE id=@identifiant", "UPDATE \"Account\" SET hash=@newHash and salt=@salt WHERE mail=@mail",
substitutionValues: { substitutionValues: {
"identifiant": identifiant, "mail": mail,
"h": hash, "newHash": newHash,
"s": salt "newSalt": newSalt
}); });
print("✅ Passworld succesfully updated");
} }
} }
static Future<void> updateFilePass( // Update user password file
String identifiant, File passwordFile) async { static Future<void> updatePasswordFile(String mail, File passwordFile) async {
List<int> passwordBlob = List<int> passwordBlob =
utf8.encode(await passwordFile.readAsString(encoding: utf8)); utf8.encode(await passwordFile.readAsString(encoding: utf8));
if (selectHashById(identifiant) == null) { if (selectHashByMail(mail) == null) {
return; return;
} else { } else {
await connection.query( await connection.query(
"UPDATE \"Account\" SET passwords=@p WHERE id=@identifiant", "UPDATE \"Account\" SET passwords=@p WHERE id=@identifiant",
substitutionValues: {"identifiant": identifiant, "p": passwordBlob}); substitutionValues: {"identifiant": mail, "p": passwordBlob});
} }
} }
static Future<void> updateTwoFa(String identifiant, List<String> tfa) async { // Update user twoFa
static Future<void> updateTwoFa(String mail, List<String> tfa) async {
List<String> twoFaStr = List.empty(growable: true); List<String> twoFaStr = List.empty(growable: true);
if (selectHashById(identifiant) == null) { if (selectHashByMail(mail) == null) {
return; return;
} else { } else {
await connection.query( await connection.query(
"UPDATE \"Account\" SET twofa=@tfa WHERE id=@identifiant", "UPDATE \"Account\" SET twofa=@tfa WHERE id=@identifiant",
substitutionValues: {"identifiant": identifiant, "tfa": tfa}); substitutionValues: {"identifiant": mail, "tfa": tfa});
} }
} }
static Future<void> deleteById(String id) async { static Future<void> deleteAccount(String mail) async {
var deletion = 1; var deletion = 1;
await connection.query("DELETE FROM \"Account\" WHERE id=@identifiant", await connection.query("DELETE FROM \"Account\" WHERE mail=@mail",
substitutionValues: {"identifiant": id}); substitutionValues: {"mail": mail});
try { try {
selectHashById(id); selectHashByMail(mail);
} on PostgreSQLException catch (e) { } on PostgreSQLException catch (e) {
if (e.severity == PostgreSQLSeverity.error) { if (e.severity == PostgreSQLSeverity.error) {
deletion = 0; deletion = 0;
@ -159,6 +179,18 @@ class AccountsToPostgres {
} }
} }
// Update user mail
static Future<void> updateMail(String mail, String newMail) async {
if (selectHashByMail(mail) == null) {
return;
} else {
await connection.query(
"UPDATE \"Account\" SET mail=@newMail WHERE mail=@mail",
substitutionValues: {"newMail": newMail, "mail": mail});
print("✅ Mail succesfully updated");
}
}
// //
// ADMIN // ADMIN
// //
@ -236,4 +268,10 @@ class AccountsToPostgres {
print("⬛ ADMIN: Logs flushed"); print("⬛ ADMIN: Logs flushed");
}); });
} }
static Future<void> initLogs() async {
await createLogsTable();
await createLogingFunction();
createTriggerLogs();
}
} }

Loading…
Cancel
Save