diff --git a/services/AuthService.cc b/services/AuthService.cc index fb7a147..1ed92c9 100644 --- a/services/AuthService.cc +++ b/services/AuthService.cc @@ -239,7 +239,40 @@ Json::Value AuthService::changePassword(const auth::UserContext &user, return success(); } - Json::Value AuthService::editUser(const auth::UserContext &user, Json::Value::const_iterator::reference body) { +Json::Value AuthService::currentUser(const auth::UserContext &user) +{ + auto db = drogon::app().getDbClient(); + const auto result = db->execSqlSync( + "SELECT id, first_name, last_name, email, fiscal_code, phone, points, " + "must_change_password FROM users WHERE id = ?", + user.id); + + auto response = success(); + if (!result.empty()) + { + response["user"]["id"] = Json::Int64(result[0]["id"].as()); + response["user"]["first_name"] = result[0]["first_name"].as(); + response["user"]["last_name"] = result[0]["last_name"].as(); + response["user"]["email"] = result[0]["email"].as(); + response["user"]["fiscal_code"] = result[0]["fiscal_code"].as(); + response["user"]["phone"] = result[0]["phone"].as(); + response["user"]["points"] = result[0]["points"].as(); + response["user"]["must_change_password"] = + result[0]["must_change_password"].as(); + response["user"]["role"] = user.role; + for (const auto &role : user.roles) + { + response["user"]["roles"].append(role); + } + for (const auto &permission : user.permissions) + { + response["user"]["permissions"].append(permission); + } + } + return response; +} + +Json::Value AuthService::editUser(const auth::UserContext &user, Json::Value::const_iterator::reference body) { const auto allowedFields = {"first_name", "last_name", "phone"}; auto db = drogon::app().getDbClient(); bool hasUpdates = false; @@ -265,27 +298,4 @@ Json::Value AuthService::changePassword(const auth::UserContext &user, return success(); } - -Json::Value AuthService::editUser(const auth::UserContext &user, Json::Value::const_iterator::reference body) { - const auto allowedFields = {"first_name", "last_name", "phone"}; - if (!body.isMember("field") || !body.isMember("value") || - !body["field"].isString() || !body["value"].isString()) - { - return failure("missing_fields"); - } - const auto field = body["field"].asString(); - if (std::find(allowedFields.begin(), allowedFields.end(), field) == - allowedFields.end()) - { - return failure("invalid_field"); - } - - auto db = drogon::app().getDbClient(); - db->execSqlSync( - "UPDATE users SET " + field + " = ? WHERE id = ?", - body["value"].asString(), - user.id); - - return success(); -} } // namespace visione::services