mirror of
https://github.com/streetwriters/notesnook.git
synced 2025-12-23 06:59:31 +01:00
core: clear cache and database on logout
This commit is contained in:
@@ -17,7 +17,7 @@ class Database {
|
|||||||
}
|
}
|
||||||
|
|
||||||
async init() {
|
async init() {
|
||||||
this.user = new User(this.context);
|
this.user = new User(this);
|
||||||
this.syncer = new Sync(this);
|
this.syncer = new Sync(this);
|
||||||
this.vault = new Vault(this);
|
this.vault = new Vault(this);
|
||||||
this.conflicts = new Conflicts(this);
|
this.conflicts = new Conflicts(this);
|
||||||
|
|||||||
@@ -5,7 +5,11 @@ class Collection {
|
|||||||
static async new(db, name = undefined, cached = true) {
|
static async new(db, name = undefined, cached = true) {
|
||||||
const collection = new this(db, name || this.name.toLowerCase(), cached);
|
const collection = new this(db, name || this.name.toLowerCase(), cached);
|
||||||
await collection._collection.init();
|
await collection._collection.init();
|
||||||
|
|
||||||
if (collection.init) await collection.init();
|
if (collection.init) await collection.init();
|
||||||
|
if (collection.clear)
|
||||||
|
this._db.ev.subscribe("clear", collection._collection.clear);
|
||||||
|
|
||||||
return collection;
|
return collection;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -14,6 +14,10 @@ export default class CachedCollection {
|
|||||||
if (data.length > 0) this.map = new Map(data);
|
if (data.length > 0) this.map = new Map(data);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
clear = () => {
|
||||||
|
this.map.clear();
|
||||||
|
};
|
||||||
|
|
||||||
/**
|
/**
|
||||||
*
|
*
|
||||||
* @param {Promise} ops
|
* @param {Promise} ops
|
||||||
@@ -54,7 +58,7 @@ export default class CachedCollection {
|
|||||||
id,
|
id,
|
||||||
deleted: true,
|
deleted: true,
|
||||||
dateEdited: Date.now(),
|
dateEdited: Date.now(),
|
||||||
dateCreated: Date.now()
|
dateCreated: Date.now(),
|
||||||
};
|
};
|
||||||
await this.indexer.write(id, deletedItem);
|
await this.indexer.write(id, deletedItem);
|
||||||
this.map.set(id, deletedItem);
|
this.map.set(id, deletedItem);
|
||||||
@@ -72,9 +76,9 @@ export default class CachedCollection {
|
|||||||
return Array.from(this.map.values());
|
return Array.from(this.map.values());
|
||||||
}
|
}
|
||||||
|
|
||||||
getAllItems(sortFn = u => u.dateCreated) {
|
getAllItems(sortFn = (u) => u.dateCreated) {
|
||||||
let items = [];
|
let items = [];
|
||||||
this.map.forEach(value => {
|
this.map.forEach((value) => {
|
||||||
if (value.deleted) return;
|
if (value.deleted) return;
|
||||||
items[items.length] = value;
|
items[items.length] = value;
|
||||||
});
|
});
|
||||||
|
|||||||
@@ -1,17 +1,17 @@
|
|||||||
import { HOST, HEADERS } from "../utils/constants";
|
import { HOST, HEADERS } from "../utils/constants";
|
||||||
import StorageInterface from "../database/storage";
|
|
||||||
|
|
||||||
export default class User {
|
export default class User {
|
||||||
/**
|
/**
|
||||||
*
|
*
|
||||||
* @param {StorageInterface} context
|
* @param {import("../api").default} db
|
||||||
*/
|
*/
|
||||||
constructor(context) {
|
constructor(db) {
|
||||||
this.context = context;
|
this._db = db;
|
||||||
|
this._context = db._context;
|
||||||
}
|
}
|
||||||
|
|
||||||
get() {
|
get() {
|
||||||
return this.context.read("user");
|
return this._context.read("user");
|
||||||
}
|
}
|
||||||
|
|
||||||
async key() {
|
async key() {
|
||||||
@@ -22,7 +22,7 @@ export default class User {
|
|||||||
async set(user) {
|
async set(user) {
|
||||||
if (!user) return;
|
if (!user) return;
|
||||||
user = { ...(await this.get()), ...user };
|
user = { ...(await this.get()), ...user };
|
||||||
await this.context.write("user", user);
|
await this._context.write("user", user);
|
||||||
}
|
}
|
||||||
|
|
||||||
async login(username, password) {
|
async login(username, password) {
|
||||||
@@ -31,16 +31,16 @@ export default class User {
|
|||||||
password,
|
password,
|
||||||
grant_type: "password",
|
grant_type: "password",
|
||||||
});
|
});
|
||||||
const key = await this.context.deriveKey(password, response.payload.salt);
|
const key = await this._context.deriveKey(password, response.payload.salt);
|
||||||
let user = userFromResponse(response, key);
|
let user = userFromResponse(response, key);
|
||||||
await this.context.write("user", user);
|
await this._context.write("user", user);
|
||||||
}
|
}
|
||||||
|
|
||||||
async token() {
|
async token() {
|
||||||
let user = await this.get();
|
let user = await this.get();
|
||||||
if (!user) return;
|
if (!user) return;
|
||||||
if (!user.accessToken) {
|
if (!user.accessToken) {
|
||||||
return await this.context.remove("user");
|
return await this._context.remove("user");
|
||||||
}
|
}
|
||||||
if (user.expiry > Date.now()) {
|
if (user.expiry > Date.now()) {
|
||||||
return user.accessToken;
|
return user.accessToken;
|
||||||
@@ -56,11 +56,12 @@ export default class User {
|
|||||||
refreshToken: response.refresh_token,
|
refreshToken: response.refresh_token,
|
||||||
expiry: Date.now() + response.expiry * 100,
|
expiry: Date.now() + response.expiry * 100,
|
||||||
};
|
};
|
||||||
await this.context.write("user", user);
|
await this._context.write("user", user);
|
||||||
}
|
}
|
||||||
|
|
||||||
logout() {
|
logout() {
|
||||||
return this.context.clear();
|
this._db.ev.publish("clear");
|
||||||
|
return this._context.clear();
|
||||||
}
|
}
|
||||||
|
|
||||||
async signup(username, email, password) {
|
async signup(username, email, password) {
|
||||||
@@ -69,9 +70,9 @@ export default class User {
|
|||||||
password,
|
password,
|
||||||
email,
|
email,
|
||||||
});
|
});
|
||||||
const key = await this.context.deriveKey(password, response.payload.salt);
|
const key = await this._context.deriveKey(password, response.payload.salt);
|
||||||
let user = userFromResponse(response, key);
|
let user = userFromResponse(response, key);
|
||||||
await this.context.write("user", user);
|
await this._context.write("user", user);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user