From 90ab1a0c6ef368cbf3afb946fa0e532772067635 Mon Sep 17 00:00:00 2001 From: Michael Peters Date: Tue, 4 Oct 2022 21:04:19 -0700 Subject: [PATCH] remove .vscode, todo.txt --- .vscode/cordis.code-snippets | 37 --- .vscode/settings.json | 2 - src/client/tests/webapp/auto-verifier.test.ts | 4 +- todo.txt | 245 ------------------ 4 files changed, 3 insertions(+), 285 deletions(-) delete mode 100644 .vscode/cordis.code-snippets delete mode 100644 .vscode/settings.json delete mode 100644 todo.txt diff --git a/.vscode/cordis.code-snippets b/.vscode/cordis.code-snippets deleted file mode 100644 index fb995b5..0000000 --- a/.vscode/cordis.code-snippets +++ /dev/null @@ -1,37 +0,0 @@ -{ - // Place your cordis-ts workspace snippets here. Each snippet is defined under a snippet name and has a scope, prefix, body and - // description. Add comma separated ids of the languages where the snippet is applicable in the scope field. If scope - // is left empty or omitted, the snippet gets applied to all languages. The prefix is what is - // used to trigger the snippet and the body will be expanded and inserted. Possible variables are: - // $1, $2 for tab stops, $0 for the final cursor position, and ${1:label}, ${2:another} for placeholders. - // Placeholders with the same ids are connected. - // Example: - // "Print to console": { - // "scope": "javascript,typescript", - // "prefix": "log", - // "body": [ - // "console.log('$1');", - // "$2" - // ], - // "description": "Log output to console" - // } - "TSX Base": { - "description": "Generally you'll want this when you create a TSX file", - "prefix": [ "tsx" ], - "body": [ - "import React, { FC } from 'react';", - "", - "export interface ${1:Element}Props {", - "\ttext: string;", - "}", - "", - "const ${1:Element}: FC<${1:Element}Props> = (props: ${1:Element}Props) => {", - "\tconst { text } = props;", - "\treturn null;$0", - "}", - "", - "export default ${1:Element};", - "" - ] - } -} \ No newline at end of file diff --git a/.vscode/settings.json b/.vscode/settings.json deleted file mode 100644 index 7a73a41..0000000 --- a/.vscode/settings.json +++ /dev/null @@ -1,2 +0,0 @@ -{ -} \ No newline at end of file diff --git a/src/client/tests/webapp/auto-verifier.test.ts b/src/client/tests/webapp/auto-verifier.test.ts index 88f6173..79b023e 100644 --- a/src/client/tests/webapp/auto-verifier.test.ts +++ b/src/client/tests/webapp/auto-verifier.test.ts @@ -393,9 +393,11 @@ describe('fetchAndVerifyIfNeeded tests', () => { expect(av.trustedPromise).toBe(trusted.promise); expect(av.trustedStatus).toBe('verifying'); + expect(result).toBeUndefined(); verify.resolve(true); await disjoint(); + expect(result).toBeNull(); expect(av.primaryPromise).toBe(null); expect(av.trustedPromise).toBe(trusted.promise); expect(av.trustedStatus).toBe('none'); @@ -409,5 +411,5 @@ describe('fetchAndVerifyIfNeeded tests', () => { /* test('primary with value, then trusted with null - cache hit, server deleted', async () => { */ /* expect(false).toBe(true); */ /* }); */ - // Make sure to do try/catch errors + // Make sure to do try/catch errors, verification failures, unverifies in the middle }); diff --git a/todo.txt b/todo.txt deleted file mode 100644 index 8a114c9..0000000 --- a/todo.txt +++ /dev/null @@ -1,245 +0,0 @@ -Moved to https://cowfield.atlassian.net - - ------- Minimum Viable Product ------ - -Clean up TypeScript type names - -Clean up HTML / CSS - -Get rid of all static classes that store state - -There's a bug with 'undefined' when - -Unit tests would be pretty nice for the cache stuff - -Get rid of the duplicate fetch metadata query at startup (fetch-server) - -Add labels to input boxes - -Server requests should never be sent if not verified rather than waiting 5 seconds to verify -- May fix the duplicate fetch-members request -- However, we probably should wait if nothing is in the DB cache -- currently there are many requests that are getting sent before verification -- Relates to the _queryServer function in client-controller.js -- Especially since everything gets refreshed on verification anyway - -Rework message data structure to be a linked-list that stores the previous message in the channel (or the message index?) -- Maybe just the send time is fine too... - -Create invite token dialog - -Create invite with privileges - -Kick out members -- Do we delete all messages from the member? - - Probably not, just remove them from the member list and don't let them connect again. - - Actually, keep them in the member list but don't let them connect - -When leaving, send a courtesy message to the server so that the member no longer has to show up on the members list. - -Loading overlay before any servers connected to - -Re-order text channels for server admins -Remove text channel for server admins - -Flavor text length restriction - -Admin role management -- Create role -- Delete role (also removes from all users with specified role) -- Assign role privileges -- Apply role to a user -- Remove role from a user - -Install server node script? -For a lower effort, MUCH more contained install, use a sqlite3 database on the server side? -- uuidv4 id tables? probably switch to integer primary keys -- hashing data has to be done with node - -Keep scroll position after clicking try again when loading messages fails - -More testing with offline servers. -- How to make a pending-sent message timeout? Does it need to? -- Don't even send the queryServer requests when the server still is not verified? -- Again, would be better to have queryServer only called one time to refresh the cache in most situations rather than every time. - -Packaging and Distribution - -First-time setup dialog? - -Custom download directory (and preset to something not hard-coded) -- Use browser-based download rather than custom download manager -- Generally use browser-based file transfers rather than fs - -Sent messages highlight channel / server (notifications) - -Offline status that does not attempt to connect to server - -Test multiple connected members at once, multiple connections from the same - client at 2 servers on the same machine seems to work already - -Something is causing a fetch-messages-recent request with null channelId - -Properly figure out TLS so that the server identification can be done with x509 certs rather than an extra challenge-signature - -Get .cordis file from HTTP request - -Add hover overlay for ellipsized text - -Date spacer for messages on new days - -Member Role Groupings - -Channel groupings? - -Show overlay when hovering over ellipsized text - -Add server avatar to .cordis file - -Use server name / member display name / channel name as option in log files - -Default paths for file opening stuff should be properly handled cross-platform - -Server audit logs -- Registration times per-user, role changes, who created tokens, etc. - ------- After Voice Channels ------ - -Kick users for server admins -- Right click dialogue - -Per-user audio boost - ------- SECURITY RISKS ------ - -A DoS attack vector exists by sending oversized socket.io packets -- The max-size stuff should be good enough for now. -- socket.io-stream for resource transfers - ------- Future Goals ------ - -Auto-load things that will need to be fetched later (slowly) when there's nothing else to do. - -Revoke tokens with a flag rather than a full revocation, allow the user to undo the revocation from the list. -- Auto-delete tokens after a day of being revoked? - -Resources are left forever, they need to be garbage collected when no longer in use -- Server Icon is Changed -- Avatar is Changed -- Message is Deleted - -Don't re-fetch the recent messages if they have already been fetched since the last disconnect -- I think this also goes for channel list + members - -Allow SVG profile pictures / image resource elements - -Clicking maximize a second time should un-maximize - -For looks, add some images to the overlays - -BUG: Members not getting moved to the fully correct position. I think this happens when two are updated in VERY quick succession - -BUG: Overlay closes on mouseup rather than only when clicked on - -Multiple tokens for the same member on multiple devices - -Send a message to the server when leaving it (so that the member can be removed) - -Hello Gamers, this is definitely not needed in the MVP, we can definitely have this security risk sitting around -- Proper TLS to prevent MITM attacks? (could be forwarded at this point :|) - -Make **abcd generate "**abcd" instead of "abdd" -- Non-closed _, *, **, *** generate their text if not closed rather than making the rest - of everything underline/italic/bold/etc. -- **abc*d** -> abc*d - -Dedupe _queryServer requests? - -Messages, members, and text channels only need to be cache-checked one time after verification. -- Convert fetch events to not query the server every time - -Auto-set away? <- This has privacy concerns - -Set status across all servers at once - -Verify and maintain last used status - -Multiple connections from same member -- Properly update status - -Right-click to save images - -Remove deleted messages after reconnect before updating infinite scroll (corner case!) -- Since the top/bottom message could be deleted, possibly select messages based on a date range? - - 'Select-around' where it selects more messages on either-end if messages were deleted. (good for if a lot of messages were deleted) -- Without this, if a top/bottom message was deleted (and we're not using deleted flags), the - infinite scroll will get stuck at the deleted message. - -Socket.io use socket.io-stream for resources - -Max resource size / text message size per-server config - -Spam prevention - -Emojis! - -Roles - -Client-side nicknames / notes per-user - -Should we really be jpegging scaled-down images or would it be better to only store one resource in some situations. - -Sometimes messages take a long time to send, even on localhost. Find a way to reproduce this. - -Text channel day dividers - -Popup image preview css transition - -Play gif on hover, identify gifs with icon in top-right -In-memory cache also store one or two larger resource(s) (of GIF size, 5-20 MB) so that when gifs are hovered over, they -are cached in memory in case they are hovered out and back in quickly - -Pending sent messages show up within the channel feed and allow for another message to be queued to be sent - -Delete messages? (make sure to clean up resources) -Update messages? - -Private Messages - -Larger file sharing - -Cache (in memory) elements returned from q.js rather than re-querying all the time - ------- Stretch Goals ------ - -PNG -> SVG for any client - -Test building a list and swapping it out rather than updating the elements (especially for channel-list) - -Maintain scroll position after reconnect when scrolling through feed -- Also refresh current feed - -Peer-to-peer network option - -Embedded Videos - -Save Scroll Position - -Preview more image types? (webp, bmp, etc.) - -Create registration file dialogue (for server admins) - -Database encryption? - -Multiple public keys associated with one member - -Better server/identity differentiation in cache? (getServerConfigs) - -Web browser client? - -Mobile App? - -Private messages? - -Bots