From 37366198fc9d36b3935a794f9bff7751489e3e78 Mon Sep 17 00:00:00 2001 From: Beaudan Brown Date: Wed, 28 Aug 2019 17:00:48 +1000 Subject: [PATCH 1/2] Add database tables and helper functions for public server auth --- app/sql.js | 78 +++++++++++++++++++++++++++++++++++++++++++++- js/modules/data.js | 23 ++++++++++++++ 2 files changed, 100 insertions(+), 1 deletion(-) diff --git a/app/sql.js b/app/sql.js index 23fd7d40e..7e076096e 100644 --- a/app/sql.js +++ b/app/sql.js @@ -94,11 +94,14 @@ module.exports = { saveConversation, saveConversations, getConversationById, + savePublicServerToken, + getPublicServerTokenByServerName, updateConversation, removeConversation, getAllConversations, getAllRssFeedConversations, getAllPublicConversations, + getPublicConversationsByServer, getPubKeysWithFriendStatus, getAllConversationIds, getAllPrivateConversations, @@ -790,6 +793,13 @@ async function updateToLokiSchemaVersion1(currentVersion, instance) { ADD COLUMN serverId STRING;` ); + await instance.run( + `CREATE TABLE server_tokens( + server STRING PRIMARY KEY ASC, + token TEXT + );` + ); + const initConversation = async data => { const { id, type, name, friendRequestStatus } = data; await instance.run( @@ -822,6 +832,11 @@ async function updateToLokiSchemaVersion1(currentVersion, instance) { ); }; + const lokiPublicServerData = { + server: 'chat.lokinet.org', + token: null, + }; + const baseData = { friendRequestStatus: 4, // Friends sealedSender: 0, @@ -837,11 +852,27 @@ async function updateToLokiSchemaVersion1(currentVersion, instance) { const publicChatData = { ...baseData, id: 'publicChat:1@chat.lokinet.org', - server: 'https://chat.lokinet.org', + server: 'chat.lokinet.org', name: 'Loki Public Chat', channelId: '1', }; + const { server, token } = lokiPublicServerData; + + await instance.run( + `INSERT INTO server_tokens ( + server, + token + ) values ( + $server, + $token + );`, + { + $server: server, + $token: token, + } + ); + const newsRssFeedData = { ...baseData, id: 'rss://loki.network/feed/', @@ -1590,6 +1621,38 @@ async function removeConversation(id) { ); } +async function savePublicServerToken(data) { + const { server, token } = data; + await db.run( + `INSERT OR REPLACE INTO server_tokens ( + server, + token + ) values ( + $server, + $token + )`, + { + $server: server, + $token: token, + } + ); +} + +async function getPublicServerTokenByServerName(server) { + const row = await db.get( + 'SELECT * FROM server_tokens WHERE server = $server;', + { + $server: server, + } + ); + + if (!row) { + return null; + } + + return row.token; +} + async function getConversationById(id) { const row = await db.get('SELECT * FROM conversations WHERE id = $id;', { $id: id, @@ -1656,6 +1719,19 @@ async function getAllPublicConversations() { return map(rows, row => jsonToObject(row.json)); } +async function getPublicConversationsByServer(server) { + const rows = await db.all( + `SELECT * FROM conversations WHERE + server = $server + ORDER BY id ASC;`, + { + $server: server, + } + ); + + return map(rows, row => jsonToObject(row.json)); +} + async function getAllGroupsInvolvingId(id) { const rows = await db.all( `SELECT json FROM conversations WHERE diff --git a/js/modules/data.js b/js/modules/data.js index 36be09d6f..9d9978843 100644 --- a/js/modules/data.js +++ b/js/modules/data.js @@ -120,6 +120,9 @@ module.exports = { getAllPrivateConversations, getAllRssFeedConversations, getAllPublicConversations, + getPublicConversationsByServer, + savePublicServerToken, + getPublicServerTokenByServerName, getAllGroupsInvolvingId, searchConversations, @@ -766,6 +769,26 @@ async function getAllPrivateConversations({ ConversationCollection }) { return collection; } +async function savePublicServerToken(data) { + await channels.savePublicServerToken(data); +} + +async function getPublicServerTokenByServerName(server) { + const token = await channels.getPublicServerTokenByServerName(server); + return token; +} + +async function getPublicConversationsByServer( + server, + { ConversationCollection } +) { + const conversations = await channels.getPublicConversationsByServer(server); + + const collection = new ConversationCollection(); + collection.add(conversations); + return collection; +} + async function getAllGroupsInvolvingId(id, { ConversationCollection }) { const conversations = await channels.getAllGroupsInvolvingId(id); From 716e142ac4bed1bf4c852ebca4a4ebd0c86809d5 Mon Sep 17 00:00:00 2001 From: Beaudan Brown Date: Thu, 29 Aug 2019 10:49:10 +1000 Subject: [PATCH 2/2] Reviews --- app/sql.js | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/app/sql.js b/app/sql.js index 7e076096e..24835bbc4 100644 --- a/app/sql.js +++ b/app/sql.js @@ -794,7 +794,7 @@ async function updateToLokiSchemaVersion1(currentVersion, instance) { ); await instance.run( - `CREATE TABLE server_tokens( + `CREATE TABLE servers( server STRING PRIMARY KEY ASC, token TEXT );` @@ -851,8 +851,8 @@ async function updateToLokiSchemaVersion1(currentVersion, instance) { const publicChatData = { ...baseData, - id: 'publicChat:1@chat.lokinet.org', - server: 'chat.lokinet.org', + id: `publicChat:1@${lokiPublicServerData.server}`, + server: lokiPublicServerData.server, name: 'Loki Public Chat', channelId: '1', }; @@ -860,7 +860,7 @@ async function updateToLokiSchemaVersion1(currentVersion, instance) { const { server, token } = lokiPublicServerData; await instance.run( - `INSERT INTO server_tokens ( + `INSERT INTO servers ( server, token ) values ( @@ -1624,7 +1624,7 @@ async function removeConversation(id) { async function savePublicServerToken(data) { const { server, token } = data; await db.run( - `INSERT OR REPLACE INTO server_tokens ( + `INSERT OR REPLACE INTO servers ( server, token ) values ( @@ -1640,7 +1640,7 @@ async function savePublicServerToken(data) { async function getPublicServerTokenByServerName(server) { const row = await db.get( - 'SELECT * FROM server_tokens WHERE server = $server;', + 'SELECT * FROM servers WHERE server = $server;', { $server: server, }