]> git.immae.eu Git - perso/Immae/Projets/Cryptomonnaies/Cryptoportfolio/Front.git/blob - api/routes.go
22af0e728c9e0c6fe3c365592466512ad42886c1
[perso/Immae/Projets/Cryptomonnaies/Cryptoportfolio/Front.git] / api / routes.go
1 package api
2
3 import (
4 "encoding/base64"
5
6 "github.com/gin-gonic/gin"
7 )
8
9 type Route struct {
10 Method string
11 Handlers []gin.HandlerFunc
12 Path string
13 }
14
15 type Group struct {
16 Root string
17 Middlewares []Middleware
18 Routes []Route
19 }
20
21 var Groups = []Group{
22 {
23 "",
24 nil,
25 []Route{
26 {"POST", []gin.HandlerFunc{Signup}, "/signup"},
27 {"POST", []gin.HandlerFunc{Signin}, "/signin"},
28 {"POST", []gin.HandlerFunc{PasswordReset}, "/passwordreset"},
29 {"POST", []gin.HandlerFunc{ChangePassword}, "/changepassword"},
30 },
31 },
32 {
33 "/otp",
34 []Middleware{JwtAuth, UserConfirmed},
35 []Route{
36 {"GET", []gin.HandlerFunc{OtpEnrollment}, "/enroll"},
37 {"POST", []gin.HandlerFunc{OtpValidate}, "/validate"},
38 },
39 },
40 {
41 "/market",
42 []Middleware{JwtAuth, UserConfirmed, OtpAuth},
43 []Route{
44 {"GET", []gin.HandlerFunc{GetMarketConfig}, "/:name"},
45 {"POST", []gin.HandlerFunc{UpdateMarketConfig}, "/:name/update"},
46 {"GET", []gin.HandlerFunc{GetMarketBalance}, "/:name/balance"},
47 },
48 },
49 }
50
51 func Signup(c *gin.Context) {
52 query := &SignupQuery{}
53
54 query.In.Email = c.PostForm("email")
55 query.In.Password = c.PostForm("password")
56
57 RunQuery(query, c)
58 }
59
60 func Signin(c *gin.Context) {
61 query := &SigninQuery{}
62
63 query.In.Email = c.PostForm("email")
64 query.In.Password = c.PostForm("password")
65
66 RunQuery(query, c)
67 }
68
69 func OtpValidate(c *gin.Context) {
70 query := &OtpValidateQuery{}
71
72 query.In.Pass = c.PostForm("pass")
73 query.In.User = GetUser(c)
74 query.In.Claims = GetClaims(c)
75
76 RunQuery(query, c)
77 }
78
79 func OtpEnrollment(c *gin.Context) {
80 query := &OtpEnrollmentQuery{}
81
82 query.In.User = GetUser(c)
83
84 qrPng, secret, err := query.Run()
85 if err != nil {
86 WriteJsonResponse(ErrorResponse(err.Code, err.UserMessage), c)
87 c.Error(err)
88 return
89 }
90
91 if c.Query("format") == "png" {
92 c.Header("X-OTP-Secret", secret)
93 WriteBinary("image/png", qrPng.Bytes(), c)
94 } else {
95 response := struct {
96 Base64img string `json:"base64img"`
97 OtpSecret string `json:"secret"`
98 }{
99 base64.StdEncoding.EncodeToString(qrPng.Bytes()),
100 secret,
101 }
102
103 WriteJsonResponse(SuccessResponse(response), c)
104 }
105
106 }
107
108 func GetMarketConfig(c *gin.Context) {
109 query := &MarketConfigQuery{}
110
111 query.In.User = GetUser(c)
112 query.In.Market = c.Param("name")
113
114 RunQuery(query, c)
115 }
116
117 func GetMarketBalance(c *gin.Context) {
118 query := &MarketBalanceQuery{}
119
120 query.In.User = GetUser(c)
121 query.In.Market = c.Param("name")
122 query.In.Currency = c.Query("currency")
123
124 RunQuery(query, c)
125 }
126
127 func UpdateMarketConfig(c *gin.Context) {
128 query := &UpdateMarketConfigQuery{}
129
130 query.In.User = GetUser(c)
131 query.In.Market = c.Param("name")
132 query.In.Key = c.PostForm("key")
133 query.In.Secret = c.PostForm("secret")
134
135 RunQuery(query, c)
136 }
137
138 func PasswordReset(c *gin.Context) {
139 query := &PasswordResetQuery{}
140
141 query.In.Email = c.PostForm("email")
142
143 RunQuery(query, c)
144 }
145
146 func ChangePassword(c *gin.Context) {
147 query := &ChangePasswordQuery{}
148
149 query.In.Token = c.PostForm("token")
150 query.In.Password = c.PostForm("password")
151
152 RunQuery(query, c)
153 }