diff options
Diffstat (limited to 'endpoint_ws.go')
-rw-r--r-- | endpoint_ws.go | 110 |
1 files changed, 5 insertions, 105 deletions
diff --git a/endpoint_ws.go b/endpoint_ws.go index 4bf2319..45cee60 100644 --- a/endpoint_ws.go +++ b/endpoint_ws.go @@ -21,14 +21,10 @@ package main import ( - "errors" "log" "net/http" - "time" "github.com/coder/websocket" - "github.com/google/uuid" - "github.com/jackc/pgx/v5" ) /* @@ -57,114 +53,18 @@ func handleWs(w http.ResponseWriter, req *http.Request) { _ = c.CloseNow() }() - fake := false - - sessionCookie, err := req.Cookie("session") - if errors.Is(err, http.ErrNoCookie) { - if config.Auth.Fake == 0 { - err := writeText(req.Context(), c, "U") - if err != nil { - log.Println(err) - } - return - } - fake = true - } else if err != nil { - err := writeText(req.Context(), c, "E :Error fetching cookie") + userID, _, _, err := getUserInfoFromRequest(req) + if err != nil { + err := writeText(req.Context(), c, "U") if err != nil { log.Println(err) } return } - var userID string - var session string - var expr int - - if fake { - switch config.Auth.Fake { - case 9080: - _uuid, err := uuid.NewRandom() - if err != nil { - log.Println(err) - return - } - userID = _uuid.String() - case 4712: - userID = "fake" - default: - panic("not supposed to happen") - } - session, err = randomString(20) - if err != nil { - log.Println(err) - return - } - _, err = db.Exec( - req.Context(), - "INSERT INTO users (id, name, email, department, session, expr) VALUES ($1, $2, $3, $4, $5, $6)", - userID, - "Fake User", - "fake@runxiyu.org", - "Y11", - session, - time.Now().Add( - time.Duration(config.Auth.Expr)*time.Second, - ).Unix(), - ) - if err != nil && config.Auth.Fake != 4712 { - err := writeText( - req.Context(), - c, - "E :Database error while writing fake account info", - ) - if err != nil { - log.Println(err) - } - return - } - err = writeText(req.Context(), c, "FAKE "+userID+" "+session) - if err != nil { - log.Println(err) - return - } - } else { - session = sessionCookie.Value - err = db.QueryRow( - req.Context(), - "SELECT id, expr FROM users WHERE session = $1", - session, - ).Scan(&userID, &expr) - if errors.Is(err, pgx.ErrNoRows) { - err := writeText(req.Context(), c, "U") - if err != nil { - log.Println(err) - } - return - } else if err != nil { - err := writeText( - req.Context(), - c, - "E :Database error while selecting session", - ) - if err != nil { - log.Println(err) - } - return - } - } - - /* - * Now that we have an authenticated request, this WebSocket connection - * may be simply associated with the session and userID. - */ - err = handleConn( - req.Context(), - c, - userID, - ) + err = handleConn(req.Context(), c, userID) if err != nil { - log.Printf("%v", err) + log.Println(err) return } } |