core: fix continuous invalid_grant error if login fails

This commit is contained in:
Abdullah Atta
2024-02-12 12:45:16 +05:00
parent 7542204c6e
commit f6fba20baf
2 changed files with 33 additions and 25 deletions

View File

@@ -150,40 +150,44 @@ class UserManager {
) {
if (!email || !password) throw new Error("email & password are required.");
const token = await this.tokenManager.getAccessToken();
if (!token) throw new Error("Unauthorized.");
const token = await this.tokenManager.getToken();
if (!token) throw new Error("No token found.");
email = email.toLowerCase();
if (!hashedPassword) {
hashedPassword = await this.db.storage().hash(password, email);
}
try {
await this.tokenManager.saveToken(
await http.post(
`${constants.AUTH_HOST}${ENDPOINTS.token}`,
{
grant_type: "mfa_password",
client_id: "notesnook",
scope: "notesnook.sync offline_access IdentityServerApi",
password: hashedPassword
},
token.access_token
)
);
await this.tokenManager.saveToken(
await http.post(
`${constants.AUTH_HOST}${ENDPOINTS.token}`,
{
grant_type: "mfa_password",
client_id: "notesnook",
scope: "notesnook.sync offline_access IdentityServerApi",
password: hashedPassword
},
token
)
);
const user = await this.fetchUser();
if (!user) throw new Error("Failed to fetch user.");
const user = await this.fetchUser();
if (!user) throw new Error("Unauthorized.");
if (!sessionExpired) {
await this.db.setLastSynced(0);
await this.db.syncer.devices.register();
}
await this.db.storage().deriveCryptoKey({
password,
salt: user.salt
});
if (!sessionExpired) {
await this.db.setLastSynced(0);
await this.db.syncer.devices.register();
await this.db.storage().deriveCryptoKey({
password,
salt: user.salt
});
EV.publish(EVENTS.userLoggedIn, user);
} catch (e) {
await this.tokenManager.saveToken(token);
throw e;
}
EV.publish(EVENTS.userLoggedIn, user);
}
async _login({

View File

@@ -72,4 +72,8 @@ export class KVStorage {
async delete<T extends keyof KV>(key: T) {
await this.db().deleteFrom("kv").where("key", "==", key).execute();
}
async clear() {
await this.db().deleteFrom("kv").execute();
}
}