/
handlers.go
70 lines (59 loc) · 1.92 KB
/
handlers.go
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
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
package core
import (
"time"
"github.com/google/uuid"
"github.com/pkg/errors"
"github.com/rarimo/verify-proxy/internal/data"
"github.com/rarimo/verify-proxy/internal/service/api/requests"
)
func (v *verifyProxy) NewVerificationRequest() (*uuid.UUID, string, error) {
requestID := uuid.New()
err := v.db.VerifyRequestsQ().Insert(&data.VerifyRequest{
ID: requestID,
Status: data.VerificationStatusInitialized,
CreatedAt: time.Now().UTC(),
})
if err != nil {
return nil, "", errors.Wrap(err, "failed to insert new verify request")
}
jwt, err := newBasicJWT(v.jwtSecret, BasicJWTClaims{
ID: requestID,
Exp: time.Now().UTC().Add(v.jwtExp).Unix(),
})
if err != nil {
return nil, "", errors.Wrap(err, "failed to create jwt")
}
return &requestID, jwt, nil
}
func (v *verifyProxy) VerifyCallback(request *requests.VerificationCallbackRequest) error {
verifyRequest, err := v.db.VerifyRequestsQ().WhereID(request.VerificationID).Get()
if err != nil {
return errors.Wrap(err, "failed to get verify request")
}
if verifyRequest == nil {
return ErrVerifyRequestNotFound
}
if verifyRequest.Status != data.VerificationStatusInitialized {
return ErrCallBackAlreadyProcessed
}
verifyRequest.CallbackData = []byte(request.JWZToken)
verifyRequest.UpdatedAt = time.Now().UTC()
verifyRequest.Status = data.VerificationStatusVerified
if err = v.db.VerifyRequestsQ().Update(verifyRequest); err != nil {
return errors.Wrap(err, "failed to update verify request")
}
return nil
}
func (v *verifyProxy) GetJWZToken(requestID uuid.UUID) (string, error) {
verifyRequest, err := v.db.VerifyRequestsQ().WhereID(requestID).Get()
if err != nil {
return "", errors.Wrap(err, "failed to get verify request")
}
if verifyRequest == nil {
return "", ErrVerifyRequestNotFound
}
if verifyRequest.Status != data.VerificationStatusVerified {
return "", ErrNotVerified
}
return string(verifyRequest.CallbackData), nil
}