Add user authorization
This commit is contained in:
+42
-1
@@ -205,6 +205,40 @@ Json::Value AuthService::loginWithPassword(const Json::Value &body)
|
||||
return issueToken(user[0]["id"].as<long long>());
|
||||
}
|
||||
|
||||
Json::Value AuthService::changePassword(const auth::UserContext &user,
|
||||
const Json::Value &body)
|
||||
{
|
||||
const auto missing =
|
||||
validation::missingStrings(body, {"current_password", "new_password"});
|
||||
if (!missing.empty())
|
||||
{
|
||||
return failure("missing_fields");
|
||||
}
|
||||
if (body["new_password"].asString().size() < 10)
|
||||
{
|
||||
return failure("weak_password");
|
||||
}
|
||||
|
||||
auto db = drogon::app().getDbClient();
|
||||
const auto current = db->execSqlSync(
|
||||
"SELECT password_hash FROM users WHERE id = ? AND banned = FALSE",
|
||||
user.id);
|
||||
if (current.empty() ||
|
||||
!crypto::verifyPassword(
|
||||
body["current_password"].asString(),
|
||||
current[0]["password_hash"].as<std::string>()))
|
||||
{
|
||||
return failure("invalid_credentials");
|
||||
}
|
||||
|
||||
db->execSqlSync(
|
||||
"UPDATE users SET password_hash = ?, must_change_password = FALSE "
|
||||
"WHERE id = ?",
|
||||
crypto::hashPassword(body["new_password"].asString()),
|
||||
user.id);
|
||||
return success();
|
||||
}
|
||||
|
||||
Json::Value AuthService::currentUser(const auth::UserContext &user)
|
||||
{
|
||||
auto db = drogon::app().getDbClient();
|
||||
@@ -226,8 +260,15 @@ Json::Value AuthService::currentUser(const auth::UserContext &user)
|
||||
response["user"]["must_change_password"] =
|
||||
result[0]["must_change_password"].as<bool>();
|
||||
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;
|
||||
}
|
||||
} // namespace visione::services
|
||||
|
||||
|
||||
Reference in New Issue
Block a user