]>
Commit | Line | Data |
---|---|---|
1 | package api | |
2 | ||
3 | import ( | |
4 | "net/http" | |
5 | ||
6 | "github.com/jloup/utils" | |
7 | ) | |
8 | ||
9 | //go:generate stringer -type=Status -output const_string.go | |
10 | type Status uint32 | |
11 | ||
12 | const EXTERNAL_SERVICE_TIMEOUT_SECONDS = 20 | |
13 | ||
14 | const ( | |
15 | OK Status = iota | |
16 | NOK | |
17 | ) | |
18 | ||
19 | var ( | |
20 | errorFlagCounter utils.Counter = 0 | |
21 | BadRequest utils.Flag = utils.InitFlag(&errorFlagCounter, "BadRequest") | |
22 | EmailExists utils.Flag = utils.InitFlag(&errorFlagCounter, "EmailExists") | |
23 | ExternalServiceTimeout utils.Flag = utils.InitFlag(&errorFlagCounter, "ExternalServiceTimeout") | |
24 | InternalError utils.Flag = utils.InitFlag(&errorFlagCounter, "InternalError") | |
25 | InvalidCredentials utils.Flag = utils.InitFlag(&errorFlagCounter, "InvalidCredentials") | |
26 | InvalidEmail utils.Flag = utils.InitFlag(&errorFlagCounter, "InvalidEmail") | |
27 | InvalidMarketCredentials utils.Flag = utils.InitFlag(&errorFlagCounter, "InvalidMarketCredentials") | |
28 | MarketCredentialsNotConfigured utils.Flag = utils.InitFlag(&errorFlagCounter, "MarketCredentialsNotConfigured") | |
29 | IPRestrictedApiKey utils.Flag = utils.InitFlag(&errorFlagCounter, "IPRestrictedApiKey") | |
30 | InvalidOtp utils.Flag = utils.InitFlag(&errorFlagCounter, "InvalidOtp") | |
31 | InvalidPassword utils.Flag = utils.InitFlag(&errorFlagCounter, "InvalidPassword") | |
32 | NeedOtpValidation utils.Flag = utils.InitFlag(&errorFlagCounter, "NeedOtpValidation") | |
33 | NotAuthorized utils.Flag = utils.InitFlag(&errorFlagCounter, "NotAuthorized") | |
34 | NotFound utils.Flag = utils.InitFlag(&errorFlagCounter, "NotFound") | |
35 | OtpAlreadySetup utils.Flag = utils.InitFlag(&errorFlagCounter, "OtpAlreadySetup") | |
36 | OtpNotSetup utils.Flag = utils.InitFlag(&errorFlagCounter, "OtpNotSetup") | |
37 | UserNotConfirmed utils.Flag = utils.InitFlag(&errorFlagCounter, "UserNotConfirmed") | |
38 | ||
39 | StatusBadRequest utils.Flag = utils.Join("BadRequest", BadRequest, InvalidPassword, InvalidEmail, InvalidMarketCredentials, IPRestrictedApiKey, MarketCredentialsNotConfigured) | |
40 | StatusUnauthorized utils.Flag = utils.Join("Unauthorized", InvalidCredentials, InvalidOtp) | |
41 | StatusForbidden utils.Flag = utils.Join("Forbidden", UserNotConfirmed, NotAuthorized, OtpAlreadySetup, OtpNotSetup, NeedOtpValidation) | |
42 | StatusConflicts utils.Flag = utils.Join("Conflicts", EmailExists) | |
43 | StatusNotFound utils.Flag = utils.Join("NotFound", NotFound) | |
44 | StatusGatewayTimeout utils.Flag = utils.Join("GatewayTimeout", ExternalServiceTimeout) | |
45 | ) | |
46 | ||
47 | func StatusToHttpCode(status Status, code utils.Flag) int { | |
48 | if status == OK { | |
49 | return http.StatusOK | |
50 | } | |
51 | ||
52 | switch { | |
53 | case utils.Intersect(code, StatusBadRequest): | |
54 | return http.StatusBadRequest | |
55 | case utils.Intersect(code, StatusUnauthorized): | |
56 | return http.StatusUnauthorized | |
57 | case utils.Intersect(code, StatusForbidden): | |
58 | return http.StatusForbidden | |
59 | case utils.Intersect(code, StatusConflicts): | |
60 | return http.StatusConflict | |
61 | case utils.Intersect(code, StatusNotFound): | |
62 | return http.StatusNotFound | |
63 | case utils.Intersect(code, StatusGatewayTimeout): | |
64 | return http.StatusGatewayTimeout | |
65 | } | |
66 | ||
67 | return http.StatusInternalServerError | |
68 | } |