core: clear cache and database on logout

This commit is contained in:
thecodrr
2020-04-16 03:27:22 +05:00
parent 2deec9b675
commit 55b6b0733b
4 changed files with 26 additions and 17 deletions

View File

@@ -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);

View File

@@ -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;
} }

View File

@@ -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;
}); });

View File

@@ -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);
} }
} }