diff --git a/app/app.go b/app/app.go index a56db6b..84c600a 100644 --- a/app/app.go +++ b/app/app.go @@ -89,8 +89,8 @@ func New(db *db.DB) *App { repoConfig := repo.PathPrefix("/config").Subrouter() - repoConfig.Handle("/", md.RequireAuth(a.DB)(http.HandlerFunc(a.RepoConfigHandler))) - repoConfig.Handle("/hackatime_project", md.RequireAuth(a.DB)(http.HandlerFunc(a.RepoConfigHackatimeProject))) + repoConfig.HandleFunc("/", a.RepoConfigHandler) + repoConfig.Handle("/hackatime_project", md.ValidateForm[repoUpdateHackatimeForm](http.HandlerFunc(a.RepoConfigHackatimeProject))) repoConfig.Use(md.RequireAuth(a.DB)) diff --git a/app/repo-config.go b/app/repo-config.go index 7101a57..143412b 100644 --- a/app/repo-config.go +++ b/app/repo-config.go @@ -3,7 +3,6 @@ package app import ( md "farga/app/middleware" "farga/db/types" - "farga/lib" "farga/lib/git" hk "farga/lib/hackatime" "net/http" @@ -12,12 +11,6 @@ import ( func (a *App) RepoConfigHandler(w http.ResponseWriter, r *http.Request) { dbRepo := r.Context().Value(md.RepoKey).(types.Repo) - reqUser := r.Context().Value(lib.UserKey).(*types.User) - if reqUser.ID != *dbRepo.UserID { - http.Error(w, "Forbidden", http.StatusForbidden) - return - } - var err error var projects []hk.Project if dbRepo.User.HackatimeToken != "" && r.URL.Query().Get("err") != "WarnOffline" { // TODO: use a cookie instead. @@ -42,10 +35,20 @@ func (a *App) RepoConfigHandler(w http.ResponseWriter, r *http.Request) { }) } +type repoUpdateHackatimeForm struct { + ProjectName string `form:"name" validate:"required"` +} + func (a *App) RepoConfigHackatimeProject(w http.ResponseWriter, r *http.Request) { + dbRepo := r.Context().Value(md.RepoKey).(types.Repo) switch r.Method { case http.MethodPost: - a.DB.SetRepoHackatimeName(nil, "") // TODO + form, ok := md.GetForm[repoUpdateHackatimeForm](r) + if !ok { + http.Error(w, "Something went wrong on our end, and our middleware has failed. Please contact us.", http.StatusInternalServerError) + return + } + a.DB.SetRepoHackatimeName(&dbRepo.ID, form.ProjectName) // TODO default: http.NotFound(w, r) } diff --git a/views/repo/config.html b/views/repo/config.html index 5a59fde..ff3d087 100644 --- a/views/repo/config.html +++ b/views/repo/config.html @@ -1,19 +1,23 @@ {{define "content"}}

Hackatime.

{{if .user.HackatimeToken}} -
- + {{if .RepoHackatimeName}} + + {{else}} + + {{end}} + {{range .Projects}} + {{if ne . $.RepoHackatimeName}}{{end}} + {{end}} + + +
{{else}} - +

Since we cannot reach the Hackatime API, we cannot allow you to configure your Hackatime project.

{{end}} - {{range .Projects}} - {{if ne . $.RepoHackatimeName}}{{end}} - {{end}} - - - {{else}}

You've got to link your Hackatime before you can link a repo to a project.

{{end}}