-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathparser.go
91 lines (81 loc) · 2.59 KB
/
parser.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
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
package goauthlib
import (
"github.com/techpro-studio/gohttplib"
"github.com/techpro-studio/gohttplib/utils"
"github.com/techpro-studio/gohttplib/validator"
)
func MakeAuthorizationEntityVMap() validator.VMap {
return validator.VMap{
"value": validator.RequiredStringValidators("value"),
}
}
func MakeCodeVMap() validator.VMap {
return validator.VMap{
"code": validator.RequiredStringValidators("code", validator.StringLengthValidator(5, "code")),
}
}
func MakeSocialProviderVMap() validator.VMap {
return validator.VMap{
"provider": validator.RequiredStringValidators("provider"),
"payload_type": validator.RequiredStringValidators("payload_type", validator.StringContainsValidator("payload_type", []string{
"token", "code"})),
"payload": validator.RequiredStringValidators("payload"),
}
}
func MakeTempTokenVMap() validator.VMap {
return validator.VMap{
"token": validator.RequiredStringValidators("token"),
}
}
type SocialProviderPayload struct {
Provider string
Payload string
PayloadType string
Remaining map[string]interface{}
}
func GetSocialProviderPayloadInfo(body map[string]interface{}) (*SocialProviderPayload, error) {
validated, err := validator.ValidateBody(body, MakeSocialProviderVMap())
if err != nil {
return nil, err
}
remaining := map[string]interface{}{}
for key, value := range body {
if key != "provider" && key != "payload" && key != "payload_type" {
remaining[key] = value
}
}
result := SocialProviderPayload{
Provider: validated["provider"].(string),
Payload: validated["payload"].(string),
PayloadType: validated["payload_type"].(string),
Remaining: remaining,
}
return &result, nil
}
func GetCode(body map[string]interface{}) (string, error) {
validated, err := validator.ValidateBody(body, MakeCodeVMap())
if err != nil {
return "", err
}
return validated["code"].(string), nil
}
func GetAuthorizationEntityFromBody(body map[string]interface{}) (*AuthorizationEntity, error) {
validated, err := validator.ValidateBody(body, MakeAuthorizationEntityVMap())
if err != nil {
return nil, err
}
var _type string
value := validated["value"].(string)
if utils.IsValidEmail(value) {
_type = EntityTypeEmail
} else if utils.IsValidPhone(value) {
_type = EntityTypePhone
return nil, gohttplib.NewServerError(400, "CREDENTIAL_PHONE_TEMPORARY_UNAVAILABLE", "Phone credentials temporary unavailable", "value", nil)
} else {
return nil, gohttplib.NewServerError(400, "INVALID_CREDENTIAL", "Invalid credential. Should be phone or email.", "value", nil)
}
return &AuthorizationEntity{
Value: value,
Type: _type,
}, nil
}