Commit Graph
100 Commits
Author SHA1 Message Date
shockrah 283c201e96 * More explicit query string guard in /channels/list endpoint handler
* rtc::make_url now builds websocket urls more robustly incase we have to percent
encode them
2021-04-10 16:44:24 -07:00
shockrah f92ced1241 + Websocket setup is almost proper but it completely hangs after we start listening for connections
Of course this is an issue because we can no longer get data from the user
A full rearchitecting may be in order here however its not impossible to modify the current architecture so far

The main issue here is that the cache is doing too much I think

If the termion(main input) task does its thing, and a socket task,
waits around waiting to build a sub task(socket) then we may be able to
pass messages to the socket task to open up sockets when request
This allows us to have shared state via message passing and a main task
can take care of updating the cache.

The renderer can then request data from the cache when it needs to render stuff
2021-04-09 22:10:08 -07:00
shockrah a0b8e82000 Adding tungstenite for async websocket support 2021-04-09 21:55:31 -07:00
shockrah abd2537918 really simple debugger logger, will remove at some point but it has use right now 2021-04-09 21:55:04 -07:00
shockrah bdd4a63a8d * Fixing url construction for websockets 2021-04-09 21:52:57 -07:00
shockrah 5df5329b6c * Fixed authentication parameter parsing for both users and servers
* Jwt is now given over the query string as many websocket libraries make
it hard to pass header parameters
Parsing these values should also work fine but we'll see in time
2021-04-09 18:59:10 -07:00
shockrah 7eb81f38f2 * Fixing bad /message/send route callback
Issue was that we weren't sending the correct headers/body data(ya I know)

- Removing mouse control from app since its completel irrelevant
!+ Putting app messagses behind a mutex for now since they are written to by
sockets and renderer process in the next few patches
2021-04-08 21:21:56 -07:00
shockrah 6088b0836f + Send message callback now implemented
+ channel switcher works as well, although it relies on /lc being ran prior to
its invocation
2021-04-08 15:45:20 -07:00
shockrah 9ad963f097 + Adding POST handler for message sending /message/send
Working as intended
2021-04-08 15:34:46 -07:00
shockrah fe448d07d4 Better naming scheme for when we start requesting voice channels after this 2021-04-07 22:17:28 -07:00
shockrah ceabc73cf7 Fixed hanging json-api issue with dev-run script 2021-04-07 21:06:46 -07:00
shockrah 368c9bc95f + Better logging in main
+
2021-04-07 21:06:08 -07:00
shockrah d030accddc * Adding id to insertion call in db-lib::channel::add
This is done at the driver level because the member id's are randomly generated
u64's
2021-04-07 20:48:58 -07:00
shockrah 86cd551309 Adding option to build release version of tui 2021-04-07 20:42:30 -07:00
shockrah 31dd85d8f0 simple make file to avoid repeatng args all the time 2021-04-07 20:41:54 -07:00
shockrah 704f372c3e + Adding list_channel handler
More agressive channel caching may be required here but it works as an MVP for now

* Switch to hashmap for container of channel caches instead of vector
This should help with cache accesses as we don't have to iterate anymore
Also it makes data fetches much cleaner/shorthanded

* net::list_channels has its own private structure for collecting channels vector
This is basically required and is in the scope of the func itsefl to not pollute any other namespaces
2021-04-07 20:38:06 -07:00
shockrah 8be5547d9e fixed channel api type 2021-04-07 20:24:31 -07:00
shockrah 10e8b7331f + Login route added to net module
! No wrapper goes around this module to avoid fragmentation
Note that basically every network hit is built around try's so they'll all return
HttpResult<T>'s
2021-04-05 17:41:28 -07:00
shockrah adea888b21 - Removing fluff from config structure 2021-04-05 17:37:43 -07:00
shockrah 0bee002164 + List channels backbone in place
Technically everything is there but I haven't really tested anything yet
Will 100% need fixing + optimizing

+ Switch server Command also working
! Requires a jwt check to avoid expensive+unnecssary network /login hits
! Probably have to hold onto the input to avoid spam somehow

ChannelCache is nearly ready for manipulation
2021-04-05 17:36:24 -07:00
shockrah 5ab2c961f6 - Adding listhost + listchan command variants 2021-04-05 17:00:59 -07:00
shockrah 939ee8c73f + Ignoring empty lines
+ Only adding / on '/' input activation
2021-04-05 16:54:27 -07:00
shockrah a8d4ca9028 Removing blocking client from reqwest dep as its not needed 2021-04-05 16:53:19 -07:00
shockrah 0bb7c5f49b adding / to start commands now 2021-04-05 14:24:21 -07:00
shockrah 3c10d342eb - Removing dead_code attr from TEXT_CHANNEL
+ Adding Clone derivation to Channel struct
2021-04-04 17:36:58 -07:00
shockrah a098121ab8 * Messages now grow from the top to the bottom(new messages ontop)
+ Option to enable/disable message-box borders

* Switching over to using bold! macro where applicable (especially in command.rs)
This change mostly reduces the eyesoreness of the termion code
2021-04-04 14:17:39 -07:00
shockrah 6fff48cfab * Messages now grow from the top to the bottom(new messages ontop)
+ Option to enable/disable message-box borders
* Switching over to using bold! macro where applicable
This change mostly reduces the eyesoreness of the termion code
2021-04-04 14:16:54 -07:00
shockrah 43e3f93aad + Handful of useful macros/functions that are used basically everywhere
! There's no real order to these as they are mostly miscellaneous
2021-04-04 14:15:06 -07:00
shockrah 1c85c88f96 * Normalized cache data structures a bit
* Also changed up the naming scheme to be more clear
* Config -> ConfigFile
- Removed ConfigFile::server_url method
! The ConfigFile struct is now pretty much entirely used for disk operations
* update_jwt method also take in correct parameters
2021-04-04 14:13:37 -07:00
shockrah 3f1dfbf824 Adding rtc notifications to relevant endpoints
! Still need a feature flag to compile this optionally instead of all the time
- Removed warning in main's auth::login_get_jwt call
2021-04-02 13:56:44 -07:00
shockrah be54ce6a57 - Removing Claim::new since its used once
+ New notify driver function which does the network magic we need
+ Adding event emitters for the following events
"delete-channel"
"create-channel"
"update-nick"
2021-04-02 13:55:21 -07:00
shockrah 17f281c91c Removing websocket library for tokio-tungstenite (rtc) 2021-04-02 12:29:53 -07:00
shockrah e496fbdd1a Message event now asynchonously emitted from /message/send to rtc server
+ Server claims are now also generated per request so this could get some benefit from caching the jwt
One idea is to cache a jwt for a temporary amount of time
+ event! macro also lets us generate json payloads more easily
! Still requiring this module to built under an optional feature however that should be done easily
2021-04-02 12:11:59 -07:00
shockrah c6a49a8437 User JWT's now have nbf field in claims set in seconds 2021-04-02 12:06:17 -07:00
shockrah 715f334619 - Removing peers module for simplicity and reduction of data complexity
Basically the peer map system that we had before isn't going to work simply because
succesful client connections already have the data we need inside them.
Adding a whole wrapper around this just complicates things in a way that doesn't
really give any benefit.

For now every message is echo'd to all connections but that is easy enough to change
2021-04-01 17:21:57 -07:00
shockrah d8171f8b03 + Replacing rust microservice with more lenient js built server
The JSON-API can't _really_ use regular http requests because this server then has to do a lot of
multi-threading nonsense.
For the sake of simplicity for myself and others that try to write their own FC
compliant servers: the rtc server(for now) only takes in websocket requests,
and attemptes to discern servers from users connections for event handling
2021-04-01 11:41:51 -07:00
shockrah afdeef0a49 More warning removals and more db-lib result wrapping
This should be everything now
2021-03-30 23:00:50 -07:00
shockrah 4615374357 Comfy dev scripts to make life a little bit easier 2021-03-30 22:49:46 -07:00
shockrah 498da4c899 Updating dependancies to latest versions and removing some fluff interim libs 2021-03-30 22:49:20 -07:00
shockrah c45f8d0482 More db-lib ok/err wrapping
Some misc changes that don't really belong with anything else are bundled here
Those changes aren't actually very important however
2021-03-30 22:46:59 -07:00
shockrah 75dcb7b73e No more jwt db checks
Also wrapping relevant db code with ok/err checks
2021-03-30 22:45:39 -07:00
shockrah 41202507c1 removing warning 2021-03-30 22:44:09 -07:00
shockrah 4cbbfdd7a2 mysql_async updates
* More shorthand usage for clearer code in invite create
2021-03-30 22:43:07 -07:00
shockrah 54f4dd53be - Removing non-result returns
+ Updating further for newest version of mysql_async
2021-03-30 22:42:34 -07:00
shockrah fea94bffa0 Removing features flag from db-lib as its not needed 2021-03-30 21:41:57 -07:00
shockrah 15b56353b8 Removing passthrough for message send handler
This means we get more opaque errors for the clients but it also results in way less code to maintain
2021-03-30 21:39:44 -07:00
shockrah d88948385d Upgrading mysql_async to latest version
This version comes with the benefit of having much more concise exec_map functionality among other things

This commit and the following ones also move db-lib to using a more 'try' based approach
2021-03-30 21:38:16 -07:00
shockrah f7d90e4a09 - Removal of auth code in db-lib 2021-03-30 21:36:21 -07:00
shockrah 8eec9abd74 + More dev files 2021-03-30 12:25:34 -07:00
shockrah 56e4e22b4c + JWT Authentication
* Server JWT's and Client JWT's built with seperate signature types
2021-03-30 12:24:10 -07:00
shockrah 5bbc57313f + Json-API now pushes proper new-message event to rtc server correctly
+ Rtc server takes in new-message correctly but with basically no ux/auth for now
This should be fine as we can layer on security afterwards with no issue
2021-03-25 20:46:10 -07:00
shockrah 291505201b removng fluff and adding link to repo 2021-03-24 15:19:43 -07:00
shockrah 52fab01119 + Clearer logging from the json api
* Renamed db helper function to be (debatably) more clear in its intentions
	That function and everything in that module is quickly become awful however

+ Adding some notes for later db-lib development
2021-03-24 01:43:52 -07:00
shockrah a1f86fdf6e * Moving away from auto_increment
! Initial id size will stay as u64 but u128 are easily the next major change
This change shouldn't break clients written in high level languages since most already use 128's under the hood anyway
- This commit also removes the auto_increment flag from basically everything that uses RNG id's
2021-03-24 01:14:37 -07:00
shockrah d02084a22c + Adding proper file upload support
! Requirements for variable message fetching not yet met
! /message/get?id=<id> needs a way of passing back file contents
! The file upload is sketchy at best and not necessarily guaranteed to sync the
database with the file system
2021-03-23 17:16:05 -07:00
shockrah 92dc4d888f meta tags and favicon 2021-03-22 22:39:51 -07:00
shockrah 185b64d9db Base version of the rtc server
Authorization is required for implementation
So is a proper messaging model to make implementation clean and scalable
For now this serves as a good starting point for the rest of this project
2021-03-22 02:45:54 -07:00
shockrah 3ee22ff932 - Removed remaining mentions of joindate 2021-03-20 22:54:00 -07:00
shockrah 975acfd606 Backend REST API changes:
* Fixed weird match with get_online_members
+ Now using special(smoll) Public Member struct for public member data fetches as.
They're size on networks should be pretty small so we can package a ton of them in a single request

DOCS changes:
- Removing references to unix timestamps in seconds
- Removing references to joindate
* Exact content-type values now specified
2021-03-20 22:44:22 -07:00
shockrah 03c41b6833 - Removed joindate from members schema
+ Auth module now uses std::time for time based calculations
! All time notations are i64 and rounded to the Millisecond

* Moving db pool to a lazy static to avoid constructing a whole pool on every request

+ Adding more logging per request, even if its lazy logging
* Content-Types are now correctly written per type
2021-03-20 19:47:59 -07:00
shockrah 8812ff7198 + text/plain Message sending works now
+ More skeleton code for the caching system

! Ready for rtc on text based message listening which is where heavy caching comes into play
2021-03-20 19:35:38 -07:00
shockrah 530d287431 Merge branch 'master' of gitlab.com:shockrah/freechat 2021-03-20 15:00:58 -07:00
shockrah 939042a4c5 skeleton code ready to start pluggin in async fetch calls to remote servers
Some model still has to be built to put RTC somewhere
Also stdout still requires async handling
2021-03-20 15:00:49 -07:00
shockrah 988aa9f155 Removal of chrono and async_trait as dependancy in db-lib
Removig chrono from api code as well

Removing chrono as dep in api code
+ Using Content-Type for /message/send content type

Updating cargo lists for removal of fluff deps

Removal of more fluff

Addking makefile to avoid compiling debug builds by accident while developing
2021-03-20 14:59:06 -07:00
shockrah ba14600b34 Removal of chrono and async_trait as dependancy in db-lib
Removig chrono from api code as well
2021-03-20 13:56:02 -07:00
shockrah cb5975f235 FULL REWORK AND PORT TO TERMION
This patch is simply meant to mark the beginning of the newest phase for the tui build.
I've 100% settled on using termion as the backend and marking what is done so far

Renderer side:
	Termion has a similar issue where moving data happens very quietly so its best
	if the two (renderer and cache) have the their data to use as they please

Cache Side:
	Basically we own the data we're using because we constantly have to mutate data
	ourselves

Config in the middle:
	Mutable but only from the rendering side because the cache is completely transient
	It technically to own its data but it does anyway because the render(backend)
	 likes to consume data like there's no tomorrow
2021-03-17 20:39:42 -07:00
shockrah c3d5c75cc0 messages rebind now work properly and sends message correctly,
Message constructor no longer incorrectly check message type
2021-03-12 23:16:06 -08:00
shockrah c667f69d0e Fixing busted config adder thingy 2021-03-12 21:36:44 -08:00
shockrah 67575cda53 adding tsc to make build 2021-03-12 02:20:33 -08:00
shockrah 5b2e92da06 Caching is still being designed but it _will_ be written in typescript to a more well docc'ed api for everything else
+ Basically im doing this to straight up abuse
- Moving cache types + methods to their own module
2021-03-12 02:20:00 -08:00
shockrah 9ce04e96a7 Query string parameter 'type' is now enforced by the api
+ Flag is literally called 'type'
2021-03-12 02:17:06 -08:00
shockrah dc117ba02f Moving message type to types.ts 2021-03-11 17:22:22 -08:00
shockrah d620d3cc61 New types module written with typescript to slowly start migrating code over to typescript
The main reason for this change is for writing more descriptive code
Such a change isn't impossible with JS but requires annoying doccing that  most dev environments don't really pick up on ever

Also the cache system is goingto be much more complex than anything else in this project so static compilation should help remove annoyances
2021-03-11 17:22:05 -08:00
shockrah 049e8aea82 Misc fixes
- I've no idea how to describe these but they're really not that important
2021-03-11 17:20:13 -08:00
shockrah e4f6e71ac8 ! Fixing message box to look decent
- Moving Initialization code into src/init.js
2021-03-11 17:18:26 -08:00
shockrah b5822cd3f1 ✨ Moving as much auth/initialization logic out of index.html
➕ New local push function in auth for push server buttons onto the dom
2021-03-09 15:36:55 -08:00
shockrah 911edd8114 ✨ Supporting content_type flag in messages properly now 2021-03-09 00:11:34 -08:00
shockrah 2fa1ec6f34 ❗ Async rewrite of entire module !
✨ Channels list now fully asynchronous
✨ html pusher is now its own function for cleanness
➕ New ANY_CHANNEL integer is supported by the backend for requesting all channels in one go instead of voice|text
➖ Removed more callback hell code
✨ JSDocs updated to reflect their respective function signatures
2021-03-09 00:10:59 -08:00
shockrah 7fede3b4e1 ➕ New css making channel buttons not ugly as hell
➕ Moving channels.list behind async call
✨ Moved server-name to top of dom to reduce clutter(i think)
2021-03-09 00:07:41 -08:00
shockrah ddb08818b1 ✨ Updating schemas to support content_type 2021-03-09 00:03:12 -08:00
shockrah ae675d000b ➕ content_type now a supported column in db-lib
➕ API layer now behaves as expected, returning 'content_type' flag with each message
2021-03-09 00:02:20 -08:00
shockrah d8244388c2 ➖ Removing myself from callback hell slowly but surely
➖ Removing ipc calls reducing chance to shrek the drive
2021-03-08 19:53:14 -08:00
shockrah ef0bc70f90 ➖ Complexity in auth.login by basically cutting it in half and throwing the bad half out
✨ auth.init is now the more complex site since it literally has 1 chance to fire
2021-03-08 19:51:57 -08:00
shockrah c4e3fa72ce ➕ More comprehensive example user config
➕ Moving main.js to use more async code and make things a bit more homogeneous
2021-03-08 19:50:01 -08:00
shockrah 7125fc954d ➕ SERVER_PROTOCOL is now an official env variable for the json-api to read 2021-03-07 23:55:38 -08:00
shockrah f14390f4bb ➕ Callback settings.add_server_to_config now in effect for people that don't want to fuck with config files 2021-03-07 23:54:57 -08:00
shockrah 0d888a4c63 ➖ More unused code that pull credentials out of an object
Like why was this here, it's literally just object[key_name]
2021-03-07 23:54:17 -08:00
shockrah 6cfb7e7e4d ➖ No more callback trickery with auth.init
➖ Even more fluff removed
❗ From this point forward the codebase is mature enough for slimming down fearlessly
2021-03-07 23:53:09 -08:00
shockrah 7d3325fdc6 ✨ ipcMain now uses handle instead of .on for
❗ config-request probably doesn't need to be async like at all
2021-03-07 23:51:51 -08:00
shockrah ca68c61f3a ➕ Framework/Modal for settings coming together
✨ Changing inline script to now run in an async block
❗ No more callback hell, literally anything can be written with async/await or callbacks when appropos
2021-03-07 23:49:49 -08:00
shockrah 5fc3e2a553 ❗ /channels/create refactored to use the new db-lib api
❗ Reduced branching a shit ton

Testing was ass but it should pass client tests now, back to normal
2021-03-07 17:47:24 -08:00
shockrah 7c3537e4f6 ➕ Updated target for debugger
✨ Tests now use the new flags required for /channels/create
❗ Doubled size for channel descriptions
2021-03-07 17:46:17 -08:00
shockrah fadc7d6dc1 ➖ Removing more unused trait methods in db-lib's channel module
➕ /channels/list now takes a "type" parameter which defaults to TEXT_CHANNEL(1)
✨ Refactoring db::Channel::filter to use a more latency friendly approach
✨ db::Channel::Filter now returns Result<Response<Self>, SqlError>
2021-03-07 14:26:50 -08:00
shockrah fd1bf41fec ✨ Message constructor now takes in username as a parameter and binds it to uname
➖ Removed some fluff
➕ New get_member endpoint handler for later
2021-03-07 13:50:48 -08:00
shockrah 784043fc89 ✨ Cleaned up channels list header/description
➕ Better scrollarea definition for messages area
➕ Logging http errors in catch statement on auth init
2021-03-07 13:47:41 -08:00
shockrah 12936d5b1a ➖ Removing double log issue with client-tester
➕ Moving Messages struct in db-lib to root for less namespacing uglyness
➖ Removing an whole unused trait
✨ Message::get_time_range now returns a special 'UserMessage' struct that includes the name of the author
❗ More code must be removed from db-lib since a ton of the trait methods aren't used anymore
2021-03-07 13:29:10 -08:00
shockrah a6e3f22eae Reverting package upgrades 2021-03-07 12:43:25 -08:00
shockrah 2fa77fecb1 ❗ Updating hyper and tokio to newest versions for better http2 support 2021-03-05 22:59:27 -08:00
shockrah cf1dee9842 ➕ New docs describing new /members/single route 2021-03-05 19:26:11 -08:00
shockrah 898a7a8ca2 ➕ New /members/single route
➕ Simple test for /members/single handler
❗ Should probably add some more tests to verify failure cases
2021-03-05 19:23:50 -08:00