mirror of
https://github.com/IT4Change/gradido.git
synced 2025-12-13 07:45:54 +00:00
login with email or username
This commit is contained in:
parent
9e47ae36a4
commit
b08a9ff059
@ -38,9 +38,12 @@ with:
|
||||
```json
|
||||
{
|
||||
"email": "max.musterman@gmail.de",
|
||||
"username": "Maxilein",
|
||||
"password": "123abcDE&"
|
||||
}
|
||||
```
|
||||
`username` or `email` must be present!
|
||||
If booth present, `email` will be used.
|
||||
|
||||
### Response
|
||||
In case of success returns:
|
||||
|
||||
@ -21,6 +21,7 @@ Poco::JSON::Object* JsonUnsecureLogin::handle(Poco::Dynamic::Var params)
|
||||
// incoming
|
||||
|
||||
std::string email;
|
||||
std::string username;
|
||||
std::string password;
|
||||
|
||||
// if is json object
|
||||
@ -32,8 +33,17 @@ Poco::JSON::Object* JsonUnsecureLogin::handle(Poco::Dynamic::Var params)
|
||||
/// not available for the given type.
|
||||
/// Throws InvalidAccessException if Var is empty.
|
||||
try {
|
||||
paramJsonObject->get("email").convert(email);
|
||||
//paramJsonObject->get("email").convert(email);
|
||||
paramJsonObject->get("password").convert(password);
|
||||
auto email_obj = paramJsonObject->get("email");
|
||||
auto username_obj = paramJsonObject->get("username");
|
||||
|
||||
if (!email_obj.isEmpty()) {
|
||||
email_obj.convert(email);
|
||||
}
|
||||
if (!username_obj.isEmpty()) {
|
||||
username_obj.convert(username);
|
||||
}
|
||||
}
|
||||
catch (Poco::Exception& ex) {
|
||||
return stateError("json exception", ex.displayText());
|
||||
@ -43,13 +53,24 @@ Poco::JSON::Object* JsonUnsecureLogin::handle(Poco::Dynamic::Var params)
|
||||
return stateError("parameter format unknown");
|
||||
}
|
||||
|
||||
|
||||
if (!email.size() || !sm->isValid(email, VALIDATE_EMAIL)) {
|
||||
return stateError("invalid or empty email");
|
||||
if (!email.size() && !username.size()) {
|
||||
return stateError("no email or username given");
|
||||
}
|
||||
|
||||
auto user = controller::User::create();
|
||||
if (1 != user->load(email)) {
|
||||
return stateError("user with email not found", email);
|
||||
if (email.size()) {
|
||||
if (!sm->isValid(email, VALIDATE_EMAIL)) {
|
||||
return stateError("invalid email");
|
||||
}
|
||||
if (1 != user->load(email)) {
|
||||
return stateError("user with email not found", email);
|
||||
}
|
||||
}
|
||||
else if (username.size() > 0) {
|
||||
if (1 != user->load(username)) {
|
||||
return stateError("user with username not found", username);
|
||||
}
|
||||
email = user->getModel()->getEmail();
|
||||
}
|
||||
|
||||
NotificationList pwd_errors;
|
||||
|
||||
@ -122,6 +122,14 @@ namespace controller {
|
||||
Poco::Data::BLOB email_hash(*emailHash, crypto_generichash_BYTES);
|
||||
return getModel()->loadFromDB("email_hash", email_hash);
|
||||
}
|
||||
size_t User::load(const std::string& emailOrUsername)
|
||||
{
|
||||
auto model = getModel();
|
||||
if (1 == model->loadFromDB("email", emailOrUsername)) {
|
||||
return 1;
|
||||
}
|
||||
return model->loadFromDB("username", emailOrUsername);
|
||||
}
|
||||
Poco::AutoPtr<User> User::sload(int user_id)
|
||||
{
|
||||
auto db = new model::table::User();
|
||||
|
||||
@ -70,7 +70,7 @@ namespace controller {
|
||||
//! \return 0 matching entry found
|
||||
int tryLoadPassphraseUserBackup(KeyPairEd25519** createdKeyPair = nullptr);
|
||||
|
||||
inline size_t load(const std::string& email) { return getModel()->loadFromDB("email", email); }
|
||||
size_t load(const std::string& emailOrUsername);
|
||||
//! \brief try to load user from db via user_id
|
||||
//! \return count of found rows, should be 1 or 0
|
||||
inline size_t load(int user_id) { return getModel()->loadFromDB("id", user_id); }
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user