mirror of
https://github.com/streetwriters/notesnook.git
synced 2025-12-22 14:39:34 +01:00
85 lines
2.0 KiB
JavaScript
85 lines
2.0 KiB
JavaScript
|
|
import { HOST, HEADERS } from "./constants";
|
||
|
|
const fetch = require("node-fetch");
|
||
|
|
|
||
|
|
async function authRequest(endpoint, data) {
|
||
|
|
let response = await fetch(`${HOST}${endpoint}`, {
|
||
|
|
method: "POST",
|
||
|
|
headers: HEADERS,
|
||
|
|
body: JSON.stringify(data)
|
||
|
|
});
|
||
|
|
if (response.ok) {
|
||
|
|
let result = await response.json();
|
||
|
|
if (result.error) {
|
||
|
|
throw new Error(result.error);
|
||
|
|
}
|
||
|
|
return result;
|
||
|
|
}
|
||
|
|
let json = await response.json();
|
||
|
|
if (json.error) {
|
||
|
|
throw new Error(json.error);
|
||
|
|
} else {
|
||
|
|
let error = `Request failed with status code: ${response.status} ${response.statusText}.`;
|
||
|
|
throw new Error(error);
|
||
|
|
}
|
||
|
|
}
|
||
|
|
|
||
|
|
async function saveUser(response) {
|
||
|
|
var dt = new Date();
|
||
|
|
dt.setDate(dt.getDate() + 1);
|
||
|
|
let user = {
|
||
|
|
...response.payload,
|
||
|
|
accessToken: response.accessToken,
|
||
|
|
refreshToken: response.refreshToken,
|
||
|
|
scopes: response.scopes,
|
||
|
|
expiry: dt.getTime()
|
||
|
|
};
|
||
|
|
await this.db.createUser(user);
|
||
|
|
return this.db.getUser();
|
||
|
|
}
|
||
|
|
|
||
|
|
export default class Auth {
|
||
|
|
constructor(db) {
|
||
|
|
this.db = db;
|
||
|
|
if (!this.db) {
|
||
|
|
throw new Error("db cannot be undefined.");
|
||
|
|
}
|
||
|
|
}
|
||
|
|
|
||
|
|
async login(username, password) {
|
||
|
|
let response = await authRequest("oauth/token", {
|
||
|
|
username,
|
||
|
|
password,
|
||
|
|
grant_type: "password"
|
||
|
|
});
|
||
|
|
return await saveUser.call(this, response);
|
||
|
|
}
|
||
|
|
|
||
|
|
async refreshToken() {
|
||
|
|
let user = this.getUser();
|
||
|
|
if (user.expiry < Date.now()) {
|
||
|
|
return true;
|
||
|
|
}
|
||
|
|
let response = await authRequest("oauth/token", {
|
||
|
|
refresh_token: user.refreshToken,
|
||
|
|
grant_type: "refresh_token"
|
||
|
|
});
|
||
|
|
var dt = new Date();
|
||
|
|
dt.setDate(dt.getDate() + 1);
|
||
|
|
await this.db.createUser({
|
||
|
|
accessToken: response.accessToken,
|
||
|
|
refreshToken: response.refreshToken,
|
||
|
|
expiry: dt.getTime()
|
||
|
|
});
|
||
|
|
return true;
|
||
|
|
}
|
||
|
|
|
||
|
|
async signup(username, email, password) {
|
||
|
|
let response = await authRequest("auth/register", {
|
||
|
|
username,
|
||
|
|
password,
|
||
|
|
email
|
||
|
|
});
|
||
|
|
return await saveUser.call(this, response);
|
||
|
|
}
|
||
|
|
}
|