aboutsummaryrefslogtreecommitdiff
Commit message (Collapse)AuthorAgeFilesLines
...
* ws.go: Fix previous commit's type inconsistenciesRunxi Yu2024-09-131-4/+5
|
* ws.go: Very basic channelsRunxi Yu2024-09-132-5/+23
|
* go.mod: Bump dependenciesRunxi Yu2024-09-122-21/+21
|
* tcourse.sql: Use real-ish example dataRunxi Yu2024-09-121-6/+5
|
* ws.go: Clarrify handleWs's purposeRunxi Yu2024-09-121-1/+2
|
* ws.go: Move the login logic to handleWs from handleConnRunxi Yu2024-09-121-19/+38
|
* ws.go: gofmtRunxi Yu2024-09-121-3/+2
|
* ws.go: Use channels to handle incoming messagesRunxi Yu2024-09-121-11/+30
|
* ws.go: Document the message formatRunxi Yu2024-09-121-0/+25
|
* fields.txt: Document the export fields we needRunxi Yu2024-09-111-0/+26
|
* ws.go: TODO: Select c.Read and a broadcast channelRunxi Yu2024-09-111-0/+1
| | | | | | | I'm not sure whether we need to spawn an entirely different goroutine, make a shared channel, and select between the channels. It certainlly doesn't seem like there's a trivial way to block from a synchronous function and a channel, but I might be wrong, being unfamiliar with Go's concurrency.
* auth.go: Use && instead of nested if statementRunxi Yu2024-09-111-14/+12
|
* tcourse.sql: Make the names slightly less randomRunxi Yu2024-09-091-6/+6
|
* *.go: Add more licensesRunxi Yu2024-09-094-0/+120
|
* .editorconfig: InitializeRunxi Yu2024-09-091-0/+16
|
* index{,_login}.tmpl: Rename .tmpl to .htmlRunxi Yu2024-09-092-0/+0
|
* *.go: Shorter line lengthsRunxi Yu2024-09-093-8/+34
|
* *.go: Add commentsRunxi Yu2024-09-098-11/+134
|
* ws.go: splitMsg should return strings instead of bytesRunxi Yu2024-09-091-7/+9
|
* ws.go: Split IRC-style messagesRunxi Yu2024-09-092-3/+30
|
* ws.go: gofmtRunxi Yu2024-09-091-1/+1
|
* index.tmpl: Add git.rx and GitHub URLRunxi Yu2024-09-081-1/+1
|
* style.css, index.tmpl: Style changesRunxi Yu2024-09-082-2/+8
|
* main.js, index.tmpl: Confirmation buttonRunxi Yu2024-09-082-0/+17
| | | | | In the future we shall the confirmation button to only work when all fields are correctly completed.
* index.tmpl: Place the search bar inside the tableRunxi Yu2024-09-081-3/+5
|
* *: Password login stubRunxi Yu2024-09-084-4/+76
|
* index.tmpl: Rename the "Course" field into "Name", in the HTMLRunxi Yu2024-09-081-1/+1
|
* ws.go: Check session cookieRunxi Yu2024-09-081-2/+24
| | | | I'm not sure if all browsers send them along in WebSocket requests.
* main.js: More robust check handlingRunxi Yu2024-09-081-1/+15
|
* main.js: Send message whenever the checkbox changesRunxi Yu2024-09-081-0/+6
|
* main.js: Send HELLO, not BLOOPRunxi Yu2024-09-081-1/+1
|
* main.js: Slight reformat and code commentsRunxi Yu2024-09-081-0/+7
|
* index.tmpl: Add .coursecheckbox to checkboxesRunxi Yu2024-09-081-1/+1
|
* ws.go: Don't close the connection that fastRunxi Yu2024-09-081-7/+8
|
* ws.go: Don't echo messages backRunxi Yu2024-09-081-4/+9
|
* tcourse.sql: Test SQL file to add random coursesRunxi Yu2024-09-081-0/+6
|
* schema.sql: course.id PRIMARY KEY; rearrange sessionsRunxi Yu2024-09-081-2/+2
|
* ws.go: More helpful error message for non-WS connectionsRunxi Yu2024-09-081-1/+1
|
* main.js: Break after caseRunxi Yu2024-09-081-3/+2
| | | | | Go's switch statements break implicitly so I assumed it was the same in JavaScript, but JavaScript's case is actually just like C's.
* index.tmpl: Search barRunxi Yu2024-09-081-3/+18
|
* main.js: Fix WS url and consistently use automatic semicolon insertionRunxi Yu2024-09-081-8/+11
|
* courses.go: Remove unused importsRunxi Yu2024-09-081-1/+0
|
* index.tmpl: Checkbox should not have {{.Id}} as textRunxi Yu2024-09-081-1/+1
|
* *: Display coursesRunxi Yu2024-09-086-35/+123
|
* *.go: Simplify error messages and reformatRunxi Yu2024-09-082-31/+30
|
* *: Basic WebSocket connection may be established nowRunxi Yu2024-09-089-3/+143
|
* sizechk.js: Delete as it's useless for CCAsRunxi Yu2024-09-081-27/+0
|
* index.tmpl: JavaScript warningRunxi Yu2024-09-081-1/+23
|
* auth.go: Expand staff departmentsRunxi Yu2024-09-071-2/+2
|
* *: Call Graph API for department informationRunxi Yu2024-09-079-72/+141
| | | | | | | | | | | | I am using a hybrid flow with "id_token" for OpenID Connect and "code" for an Authorization Code. I would use "token" too but that doesn't seem to be supported for standard web-apps and could result in strange session-hijacking issues. We still need PKCE sometime in the future; however it's not a priority: the worst attack someone could pull off is to use a different user's Authorization Code and steal a Department, which probably isn't too big of a deal as the Authorization Code should be secret anyways.