diff options
Diffstat (limited to 'timer.go')
-rw-r--r-- | timer.go | 58 |
1 files changed, 58 insertions, 0 deletions
@@ -6,6 +6,7 @@ import ( "database/sql" "encoding/base64" "errors" + "fmt" "log" "net/http" "strconv" @@ -231,6 +232,16 @@ func updateTimerEndTime(db *sql.DB, id model.UUID, endTime model.Time, userId mo return err == nil && affected == 1 } +func updateTimerToken(db *sql.DB, id model.UUID, token string, userId model.UUID) bool { + res, err := db.Exec("UPDATE Timer SET Token=$1 WHERE Id=$2 AND Owner=$3", token, id, userId) + if err != nil { + return false + } + + affected, err := res.RowsAffected() + return err == nil && affected == 1 +} + type Session struct { UserId model.UUID } @@ -369,6 +380,51 @@ func (server *MyServer) handleTimerAddTime(w http.ResponseWriter, r *http.Reques view.TimerView(*timer).Render(context.Background(), w) } +func (server *MyServer) handleGetTimerToken(w http.ResponseWriter, r *http.Request) { + currentUser := server.findCurrentUser(w, r) + if currentUser == nil { + w.WriteHeader(http.StatusUnauthorized) + return + } + + timer := queryTimer(server.db, r.PathValue("timerId"), currentUser.Id) + if timer == nil { + server.handleNotFound(w, r) + return + } + + w.Write([]byte(fmt.Sprint("<code>", timer.Token, "</code>"))) +} + +func (server *MyServer) handleResetTimerToken(w http.ResponseWriter, r *http.Request) { + currentUser := server.findCurrentUser(w, r) + if currentUser == nil { + w.WriteHeader(http.StatusUnauthorized) + return + } + + timer := queryTimer(server.db, r.PathValue("timerId"), currentUser.Id) + if timer == nil { + server.handleNotFound(w, r) + return + } + + newToken, err := generateTimerToken() + if err != nil { + w.WriteHeader(http.StatusInternalServerError) + return + } + + timer.Token = newToken + res := updateTimerToken(server.db, timer.Id, newToken, currentUser.Id) + if !res { + w.WriteHeader(http.StatusInternalServerError) + return + } + + view.TimerTokenForm(*timer).Render(context.Background(), w) +} + func (server *MyServer) handleDeleteTimer(w http.ResponseWriter, r *http.Request) { user := server.findCurrentUser(w, r) if user == nil { @@ -505,6 +561,8 @@ func main() { http.HandleFunc("GET /timer/{timerId}", myServer.handleTimer) http.HandleFunc("POST /timer/{timerId}/addTime/{timeToAdd}", myServer.handleTimerAddTime) http.HandleFunc("DELETE /timer/{timerId}", myServer.handleDeleteTimer) + http.HandleFunc("POST /timer/{timerId}/resetToken", myServer.handleResetTimerToken) + http.HandleFunc("GET /timer/{timerId}/token", myServer.handleGetTimerToken) http.HandleFunc("PUT /timer", myServer.handlePutTimer) http.HandleFunc("GET /", myServer.handleMain) |