aboutsummaryrefslogtreecommitdiff
Commit message (Collapse)AuthorAgeFilesLines
...
* 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.
* *: Basic authentication and templatesRunxi Yu2024-09-0715-0/+1247
| | | | | | | | These are imported from FBFP and slightly modified to be specific to YKPS (while not being hard to port to other environments that use APIs that use OAUTH 2.0). Some code is also simplified. Database code still needs an audit, and things are not tested yet.