summaryrefslogtreecommitdiff
Commit message (Collapse)AuthorAgeFilesLines
* ws.go, *.sql: Add course choices to the databaseRunxi Yu8 days3-7/+47
| | | | | | | | | | | | | | | | | | | | Note that this naive implementation currently allows users to submit multiple requests for the same course. See the TODO comment below: /* * TODO: Ensure that the user is not already enrolled in this course * and pay attention to relevant race conditions. It might be useful * to restructure this part, to begin a transaction that adds the user * to the database (and check the (currently not existing) uniqueness) * constraint at that exact moment, and abort the transaction if the * course limit is exceeded. * Or perhaps choices should be also stored in an internal data * structure, though that requires extra attention on consistency * issues between the internal data structure and the database. * (Sometime I should really go fix the LMDB bindings...) */ References: https://todo.sr.ht/~runxiyu/cca/1
* postgres_run.sh: Run in debug level 2Runxi Yu8 days1-1/+1
| | | | | This allows SQL statements to be logged which makes debugging much easier. Also "$@" is added so any extra arguments may be passed.
* ws.go: propagate -> propagateCouldFailRunxi Yu9 days1-3/+8
|
* ws.go: propagate course number updates in another goroutineRunxi Yu9 days1-1/+1
|
* auth.go: Add TODO about INSERTRunxi Yu9 days1-0/+7
|
* admin_handbook: List configuration caveatsRunxi Yu10 days1-3/+7
|
* iadocs: cover_page.{html->htm}Runxi Yu10 days2-353/+352
| | | | Cgit was kinda broken in serving HTML, it was a caching issue
* docs, iadocs: RevampRunxi Yu10 days6-352/+544
|
* docs: TeXinfo kinda sucks, removingRunxi Yu10 days3-57/+0
|
* ws.go: Separate c.Write calls into writeText()Runxi Yu10 days1-25/+17
|
* utils.go, auth.go: Rename random to randomBytesRunxi Yu10 days2-3/+3
|
* main.go: Actually repsect config.Perf.ReadHeaderTimeoutRunxi Yu10 days1-1/+1
|
* style.css: Misc enhancementsRunxi Yu10 days1-29/+25
|
* style.css: Break element specifiers onto its own line when longRunxi Yu10 days1-6/+12
|
* style.css: Rename --boxbg to --boxRunxi Yu10 days1-13/+11
|
* style.css: Add a dark themeRunxi Yu10 days1-8/+28
|
* style.css: Remove poorly-framed comment on --x-contrast colorsRunxi Yu10 days1-5/+0
|
* ws.go, utils.go: Document some synchronization design choicesRunxi Yu10 days2-1/+21
| | | | Also use TryLock in setupChanPool, and fail when not successful.
* index.html: Disable checkbox initially when .Selected >= MaxRunxi Yu10 days1-0/+4
|
* main.js: Move connect(s) to the event listener directlyRunxi Yu10 days1-6/+2
|
* {config,index}.go, cca.scfg.example, style.css, *.html: Link to sourceRunxi Yu10 days6-14/+17
|
* *: Change license to AGPL-3.0-or-laterRunxi Yu10 days13-238/+787
|
* index.go: Correct typoRunxi Yu10 days1-1/+1
|
* auth.go, config.go, cca.scfg.example: Issue expiring cookiesRunxi Yu10 days3-2/+13
|
* {auth,index,ws}.go, schema.sql: Move session cookie into the user tableRunxi Yu10 days4-55/+23
| | | | | | | One user shall only have one session at a time. This reduces the possibility of strange race conditions and simplifies the code a lot. References: https://todo.sr.ht/~runxiyu/cca/4
* utils.go: Better logging for wstr()Runxi Yu10 days1-1/+1
|
* main.js: Disable boxes when fullRunxi Yu10 days1-0/+8
|
* main.js: Fix the IRC-style message parserRunxi Yu10 days1-0/+4
| | | | | Previously, if it receives a message like "a b :c", it returns "["a", "b", "c "]" which is erroneous.
* index.html, main.js, ws.go: Enhance course selection rejection messageRunxi Yu10 days3-5/+9
|
* main.js: Handle "Y" (course selection approved)Runxi Yu11 days1-0/+4
|
* style.css: Remove styling for preformatted textRunxi Yu11 days1-9/+0
|
* ws.go, config.go, config.scfg.example: Attempt to fix deadlockRunxi Yu10 days3-4/+14
| | | | | | | When propagate tries to propagate a message to a connection that actually called propagate, it deadlocks because the it tries to send to that connection's send channel in the same goroutine. This is an attempt at a fix.
* main.js: Handle number updatesRunxi Yu10 days1-0/+3
|
* main.js: Relocate a comment and remove a blank lineRunxi Yu10 days1-2/+1
|
* ws.go: Attempt to propagate messagesRunxi Yu10 days1-1/+11
|
* ws.go: Implement course choice limitsRunxi Yu10 days1-0/+31
|
* pre-commit hook: Use && to chain lint.sh and eslint.shRunxi Yu10 days1-2/+1
|
* main.js: Add stub case "R" for course selection rejectedRunxi Yu10 days1-0/+5
|
* main.js: Comments should be /* */ rather than //Runxi Yu10 days1-2/+2
|
* main.js: Remove command "A" (authentication)Runxi Yu10 days1-3/+0
| | | | | Authentication is handled during the HTTP request that establishes the WebSocket connection since the cookie is passed there anyway.
* auth.go: Document why we use a hybrid auth flowRunxi Yu10 days1-1/+12
|
* ws.go: protocolError is now its own functionRunxi Yu10 days1-28/+15
|
* index.html: Remind user to report connection closed errorsRunxi Yu10 days1-0/+3
|
* style.css, index.html: Emit warning when CSS doesn't loadRunxi Yu10 days2-0/+7
|
* .github, .woodpecker: Remove CI for nowRunxi Yu10 days2-59/+0
| | | | I'll add them back when necessary
* .ws.go: Close websocket on protocol errorsRunxi Yu10 days1-0/+12
|
* ws.go: Stub for commands "Y" and "N", currently only counting argumentsRunxi Yu10 days1-0/+14
|
* lint.sh: Disable gocognitRunxi Yu10 days1-1/+1
|
* style.css: Use YK Pao GreenRunxi Yu10 days1-1/+1
|
* Add the pre-commit hookRunxi Yu10 days1-0/+4
|