summaryrefslogtreecommitdiffstats
path: root/api/handlers/record.go
blob: 0f98f11e8d9ffac98460a5b59311ac796d8374a9 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
package handlers

import (
	"crypto/subtle"
	"net/http"

	"git.leonardobishop.net/history/api/dto"
	"git.leonardobishop.net/history/pkg/entries"
)

func RecordEntry(service entries.Service, token string) http.HandlerFunc {
	return dto.WrapResponseFunc(func(w http.ResponseWriter, r *http.Request) error {
		var request dto.CreateEntryRequest
		if err := dto.ReadDto(r, &request); err != nil {
			return err
		}

		if subtle.ConstantTimeCompare([]byte(token), []byte(request.Token)) != 1 {
			return &dto.ErrorResponse{
				Code:    http.StatusForbidden,
				Message: "Forbidden",
			}
		}

		entry, err := service.CreateEntry(request.Title, request.Kind, request.Url, request.Description)
		if err != nil {
			return err
		}

		return &dto.OkResponse{
			Code: http.StatusCreated,
			Data: entry,
		}
	})
}