You cannot select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
94 lines
2.7 KiB
JavaScript
94 lines
2.7 KiB
JavaScript
/* global log, window */
|
|
/* global log: false */
|
|
|
|
const LokiAppDotNetAPI = require('./loki_app_dot_net_api');
|
|
|
|
// can have multiple of these instances as each user can have a
|
|
// different home server
|
|
class LokiFileServerInstance {
|
|
constructor(ourKey) {
|
|
this.ourKey = ourKey;
|
|
}
|
|
|
|
// FIXME: this is not file-server specific
|
|
// and is currently called by LokiAppDotNetAPI.
|
|
// LokiAppDotNetAPI (base) should not know about LokiFileServer.
|
|
async establishConnection(serverUrl, options) {
|
|
// why don't we extend this?
|
|
this._server = new LokiAppDotNetAPI(this.ourKey, serverUrl);
|
|
|
|
// make sure pubKey & pubKeyHex are set in _server
|
|
this.pubKey = this._server.getPubKeyForUrl();
|
|
|
|
if (options !== undefined && options.skipToken) {
|
|
return;
|
|
}
|
|
|
|
// get a token for multidevice
|
|
const gotToken = await this._server.getOrRefreshServerToken();
|
|
// TODO: Handle this failure gracefully
|
|
if (!gotToken) {
|
|
log.error('You are blacklisted form this home server');
|
|
}
|
|
}
|
|
|
|
// for files
|
|
async downloadAttachment(url) {
|
|
return this._server.downloadAttachment(url);
|
|
}
|
|
}
|
|
|
|
// extends LokiFileServerInstance with functions we'd only perform on our own home server
|
|
// so we don't accidentally send info to the wrong file server
|
|
class LokiHomeServerInstance extends LokiFileServerInstance {
|
|
// you only upload to your own home server
|
|
// you can download from any server...
|
|
uploadAvatar(data) {
|
|
if (!this._server.token) {
|
|
log.warn('uploadAvatar no token yet');
|
|
}
|
|
return this._server.uploadAvatar(data);
|
|
}
|
|
|
|
static uploadPrivateAttachment(data) {
|
|
return window.tokenlessFileServerAdnAPI.uploadData(data);
|
|
}
|
|
}
|
|
|
|
// this will be our instance factory
|
|
class LokiFileServerFactoryAPI {
|
|
constructor(ourKey) {
|
|
this.ourKey = ourKey;
|
|
this.servers = [];
|
|
}
|
|
|
|
establishHomeConnection(serverUrl) {
|
|
let thisServer = this.servers.find(
|
|
server => server._server.baseServerUrl === serverUrl
|
|
);
|
|
if (!thisServer) {
|
|
thisServer = new LokiHomeServerInstance(this.ourKey);
|
|
log.info(`Registering HomeServer ${serverUrl}`);
|
|
// not await, so a failure or slow connection doesn't hinder loading of the app
|
|
thisServer.establishConnection(serverUrl);
|
|
this.servers.push(thisServer);
|
|
}
|
|
return thisServer;
|
|
}
|
|
|
|
async establishConnection(serverUrl) {
|
|
let thisServer = this.servers.find(
|
|
server => server._server.baseServerUrl === serverUrl
|
|
);
|
|
if (!thisServer) {
|
|
thisServer = new LokiFileServerInstance(this.ourKey);
|
|
log.info(`Registering FileServer ${serverUrl}`);
|
|
await thisServer.establishConnection(serverUrl, { skipToken: true });
|
|
this.servers.push(thisServer);
|
|
}
|
|
return thisServer;
|
|
}
|
|
}
|
|
|
|
module.exports = LokiFileServerFactoryAPI;
|