package api import ( "net/http" "github.com/jloup/utils" ) //go:generate stringer -type=Status -output const_string.go type Status uint32 const EXTERNAL_SERVICE_TIMEOUT_SECONDS = 20 const ( OK Status = iota NOK ) var ( errorFlagCounter utils.Counter = 0 BadRequest utils.Flag = utils.InitFlag(&errorFlagCounter, "BadRequest") EmailExists utils.Flag = utils.InitFlag(&errorFlagCounter, "EmailExists") ExternalServiceTimeout utils.Flag = utils.InitFlag(&errorFlagCounter, "ExternalServiceTimeout") InternalError utils.Flag = utils.InitFlag(&errorFlagCounter, "InternalError") InvalidCredentials utils.Flag = utils.InitFlag(&errorFlagCounter, "InvalidCredentials") InvalidEmail utils.Flag = utils.InitFlag(&errorFlagCounter, "InvalidEmail") InvalidMarketCredentials utils.Flag = utils.InitFlag(&errorFlagCounter, "InvalidMarketCredentials") MarketCredentialsNotConfigured utils.Flag = utils.InitFlag(&errorFlagCounter, "MarketCredentialsNotConfigured") IPRestrictedApiKey utils.Flag = utils.InitFlag(&errorFlagCounter, "IPRestrictedApiKey") InvalidOtp utils.Flag = utils.InitFlag(&errorFlagCounter, "InvalidOtp") InvalidPassword utils.Flag = utils.InitFlag(&errorFlagCounter, "InvalidPassword") NeedOtpValidation utils.Flag = utils.InitFlag(&errorFlagCounter, "NeedOtpValidation") NotAuthorized utils.Flag = utils.InitFlag(&errorFlagCounter, "NotAuthorized") NotFound utils.Flag = utils.InitFlag(&errorFlagCounter, "NotFound") OtpAlreadySetup utils.Flag = utils.InitFlag(&errorFlagCounter, "OtpAlreadySetup") OtpNotSetup utils.Flag = utils.InitFlag(&errorFlagCounter, "OtpNotSetup") UserNotConfirmed utils.Flag = utils.InitFlag(&errorFlagCounter, "UserNotConfirmed") StatusBadRequest utils.Flag = utils.Join("BadRequest", BadRequest, InvalidPassword, InvalidEmail, InvalidMarketCredentials, IPRestrictedApiKey, MarketCredentialsNotConfigured) StatusUnauthorized utils.Flag = utils.Join("Unauthorized", InvalidCredentials, InvalidOtp) StatusForbidden utils.Flag = utils.Join("Forbidden", UserNotConfirmed, NotAuthorized, OtpAlreadySetup, OtpNotSetup, NeedOtpValidation) StatusConflicts utils.Flag = utils.Join("Conflicts", EmailExists) StatusNotFound utils.Flag = utils.Join("NotFound", NotFound) StatusGatewayTimeout utils.Flag = utils.Join("GatewayTimeout", ExternalServiceTimeout) ) func StatusToHttpCode(status Status, code utils.Flag) int { if status == OK { return http.StatusOK } switch { case utils.Intersect(code, StatusBadRequest): return http.StatusBadRequest case utils.Intersect(code, StatusUnauthorized): return http.StatusUnauthorized case utils.Intersect(code, StatusForbidden): return http.StatusForbidden case utils.Intersect(code, StatusConflicts): return http.StatusConflict case utils.Intersect(code, StatusNotFound): return http.StatusNotFound case utils.Intersect(code, StatusGatewayTimeout): return http.StatusGatewayTimeout } return http.StatusInternalServerError }