From 0f5601988c5898658c6d585349249107370e0d40 Mon Sep 17 00:00:00 2001 From: Sebastian Reichel Date: Sat, 17 Sep 2016 00:45:30 +0200 Subject: move disabled flag from auth table to user table --- src/database/database.vala | 24 +++++++++++++----------- src/database/db-interface.vala | 5 ++++- src/scanner-session/scannersession.vala | 2 +- src/web/csv.vala | 4 +++- src/web/web.vala | 3 ++- src/web/websession.vala | 2 +- 6 files changed, 24 insertions(+), 16 deletions(-) (limited to 'src') diff --git a/src/database/database.vala b/src/database/database.vala index 9bfbd9d..74a554d 100644 --- a/src/database/database.vala +++ b/src/database/database.vala @@ -106,8 +106,8 @@ public class DataBase : Object { queries["username"] = "SELECT firstname, lastname FROM users WHERE id = ?"; queries["password_get"] = "SELECT password FROM authentication WHERE user = ?"; queries["password_set"] = "UPDATE authentication SET password=? WHERE user = ?"; - queries["userinfo"] = "SELECT firstname, lastname, email, gender, street, plz, city, pgp FROM users WHERE id = ?"; - queries["userauth"] = "SELECT disabled, superuser, auth_users, auth_products, auth_cashbox FROM authentication WHERE user = ?"; + queries["userinfo"] = "SELECT firstname, lastname, email, gender, street, plz, city, pgp, hidden, disabled FROM users WHERE id = ?"; + queries["userauth"] = "SELECT superuser, auth_users, auth_products, auth_cashbox FROM authentication WHERE user = ?"; queries["userauth_set"] = "UPDATE authentication SET auth_users = ?, auth_products = ?, auth_cashbox = ? WHERE user = ?"; queries["profit_by_product"] = "SELECT name, SUM(memberprice - (SELECT price FROM purchaseprices WHERE product = purch.product)) AS price FROM sales purch, prices, products WHERE purch.product = products.id AND purch.product = prices.product AND purch.user > 0 AND purch.timestamp > ? AND purch.timestamp < ? AND prices.valid_from = (SELECT valid_from FROM prices WHERE product = purch.product AND valid_from < purch.timestamp ORDER BY valid_from DESC LIMIT 1) GROUP BY name ORDER BY price;"; queries["invoice"] = "SELECT timestamp, id AS productid, name AS productname, CASE WHEN user < 0 THEN (SELECT SUM(price * amount) / SUM(amount) FROM restock WHERE restock.product = id AND restock.timestamp <= sales.timestamp) else (SELECT CASE WHEN user=0 THEN guestprice else memberprice END FROM prices WHERE product = id AND valid_from <= timestamp ORDER BY valid_from DESC LIMIT 1) END AS price FROM sales INNER JOIN products ON sales.product = products.id WHERE user = ? AND timestamp >= ? AND timestamp <= ? ORDER BY timestamp"; @@ -119,9 +119,9 @@ public class DataBase : Object { queries["total_sales"] = "SELECT SUM(price) FROM invoice WHERE user >= 0 AND timestamp >= ?"; queries["total_profit"] = "SELECT SUM(price - (SELECT price FROM purchaseprices WHERE product = productid)) FROM invoice WHERE user >= 0 AND timestamp >= ?"; queries["user_get_ids"] = "SELECT id FROM users WHERE id > 0"; - queries["user_replace"] = "INSERT OR REPLACE INTO users ('id', 'email', 'firstname', 'lastname', 'gender', 'street', 'plz', 'city', 'pgp') VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?)"; + queries["user_replace"] = "INSERT OR REPLACE INTO users ('id', 'email', 'firstname', 'lastname', 'gender', 'street', 'plz', 'city', 'pgp', 'hidden', 'disabled') VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)"; queries["user_auth_create"] = "INSERT OR IGNORE INTO authentication (user) VALUES (?)"; - queries["user_disable"] = "UPDATE authentication SET disabled = ? WHERE user = ?"; + queries["user_disable"] = "UPDATE users SET disabled = ? WHERE id = ?"; queries["last_timestamp"] = "SELECT timestamp FROM sales ORDER BY timestamp DESC LIMIT 1"; queries["category_list"] = "SELECT id, name FROM categories"; queries["supplier_list"] = "SELECT id, name, postal_code, city, street, phone, website FROM supplier"; @@ -605,6 +605,8 @@ public class DataBase : Object { result.postcode = statements["userinfo"].column_text(5); result.city = statements["userinfo"].column_text(6); result.pgp = statements["userinfo"].column_text(7); + result.hidden = statements["userinfo"].column_int(8) == 1; + result.disabled = statements["userinfo"].column_int(9) == 1; } else if(rc == Sqlite.DONE) { throw new DatabaseError.USER_NOT_FOUND("user not found"); } else { @@ -617,7 +619,6 @@ public class DataBase : Object { public UserAuth get_user_auth(int user) throws DatabaseError { var result = UserAuth(); result.id = user; - result.disabled = false; result.superuser = false; result.auth_cashbox = false; result.auth_products = false; @@ -628,11 +629,10 @@ public class DataBase : Object { int rc = statements["userauth"].step(); if(rc == Sqlite.ROW) { - result.disabled = statements["userauth"].column_int(0) == 1; - result.superuser = statements["userauth"].column_int(1) == 1; - result.auth_users = statements["userauth"].column_int(2) == 1; - result.auth_products = statements["userauth"].column_int(3) == 1; - result.auth_cashbox = statements["userauth"].column_int(4) == 1; + result.superuser = statements["userauth"].column_int(0) == 1; + result.auth_users = statements["userauth"].column_int(1) == 1; + result.auth_products = statements["userauth"].column_int(2) == 1; + result.auth_cashbox = statements["userauth"].column_int(3) == 1; } else if(rc == Sqlite.DONE) { /* entry not found, we return defaults */ } else { @@ -841,6 +841,8 @@ public class DataBase : Object { statements["user_replace"].bind_text(7, u.postcode); statements["user_replace"].bind_text(8, u.city); statements["user_replace"].bind_text(9, u.pgp); + statements["user_replace"].bind_int(10, u.hidden ? 1 : 0); + statements["user_replace"].bind_int(11, u.disabled ? 1 : 0); int rc = statements["user_replace"].step(); if(rc != Sqlite.DONE) @@ -848,7 +850,7 @@ public class DataBase : Object { } public bool user_is_disabled(int user) throws DatabaseError { - return get_user_auth(user).disabled; + return get_user_info(user).disabled; } public bool user_exists(int user) throws DatabaseError { diff --git a/src/database/db-interface.vala b/src/database/db-interface.vala index 7d4a691..f5bfada 100644 --- a/src/database/db-interface.vala +++ b/src/database/db-interface.vala @@ -119,6 +119,8 @@ public struct UserInfo { public string postcode; public string city; public string pgp; + public bool disabled; + public bool hidden; public bool equals(UserInfo x) { if(id != x.id) return false; @@ -130,6 +132,8 @@ public struct UserInfo { if(postcode != x.postcode) return false; if(city != x.city) return false; if(pgp != x.pgp) return false; + if(disabled != x.disabled) return false; + if(hidden != x.hidden) return false; return true; } @@ -137,7 +141,6 @@ public struct UserInfo { public struct UserAuth { public int id; - public bool disabled; public bool superuser; public bool auth_cashbox; public bool auth_products; diff --git a/src/scanner-session/scannersession.vala b/src/scanner-session/scannersession.vala index f3357af..666f2ac 100644 --- a/src/scanner-session/scannersession.vala +++ b/src/scanner-session/scannersession.vala @@ -59,7 +59,7 @@ public class ScannerSessionImplementation { this.user = user; try { this.name = db.get_username(user); - this.disabled = db.get_user_auth(user).disabled; + this.disabled = db.user_is_disabled(user); } catch(DatabaseError e) { send_message(MessageType.ERROR, "Error (user=%d): %s", user, e.message); return false; diff --git a/src/web/csv.vala b/src/web/csv.vala index 92e7017..ecfe2c2 100644 --- a/src/web/csv.vala +++ b/src/web/csv.vala @@ -52,7 +52,7 @@ public class CSVMemberFile { public CSVMemberFile(string data) { foreach(var line in data.split("\n")) { var linedata = csv_split(line); - if(linedata.length >= 9) { + if(linedata.length >= 11) { var m = UserInfo(); m.id = int.parse(csv_value(linedata[0])); m.email = csv_value(linedata[1]); @@ -63,6 +63,8 @@ public class CSVMemberFile { m.city = csv_value(linedata[6]); m.gender = csv_value(linedata[7]) == "m" ? "masculinum" : csv_value(linedata[7]) == "w" ? "femininum" : "unknown"; m.pgp = csv_value(linedata[8]); + m.hidden = int.parse(csv_value(linedata[9])) != 0; + m.disabled = int.parse(csv_value(linedata[10])) != 0; if(csv_value(linedata[0]) != "EXTERNEMITGLIEDSNUMMER") members += m; } diff --git a/src/web/web.vala b/src/web/web.vala index ee6e71a..1dedeff 100644 --- a/src/web/web.vala +++ b/src/web/web.vala @@ -333,9 +333,10 @@ public class WebServer { t.replace("POSTALCODE", userinfo.postcode); t.replace("CITY", userinfo.city); t.replace("PGPKEYID", userinfo.pgp); + t.replace("DISABLED", userinfo.disabled ? "true" : "false"); + t.replace("HIDDEN", userinfo.hidden ? "true" : "false"); var userauth = db.get_user_auth(id); - t.replace("DISABLED", userauth.disabled ? "true" : "false"); t.replace("ISSUPERUSER", userauth.superuser ? "true" : "false"); t.replace("HAS_AUTH_PRODUCTS", userauth.auth_products ? "Yes" : "No"); t.replace("HAS_AUTH_CASHBOX", userauth.auth_cashbox ? "Yes" : "No"); diff --git a/src/web/websession.vala b/src/web/websession.vala index 1b2e223..ae3cafc 100644 --- a/src/web/websession.vala +++ b/src/web/websession.vala @@ -84,7 +84,7 @@ public class WebSession { private void setup_auth(int user) throws DatabaseError, IOError { var auth = db.get_user_auth(user); - this.disabled = auth.disabled; + this.disabled = db.user_is_disabled(user); this.superuser = auth.superuser; this.auth_cashbox = auth.auth_cashbox; this.auth_products = auth.auth_products; -- cgit v1.2.3