Timer token show & reset

This commit is contained in:
2024-04-16 23:08:59 +02:00
parent 4e715ab1e1
commit 13a85f4218
8 changed files with 225 additions and 76 deletions

View File

@ -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)