@@ -3,6 +3,10 @@ package controller
33import (
44 "context"
55 "net/http"
6+ "time"
7+
8+ "github.com/go-openapi/swag"
9+ "golang.org/x/crypto/bcrypt"
610
711 openapitypes "github.com/oapi-codegen/runtime/types"
812
@@ -33,27 +37,45 @@ type UserController struct {
3337}
3438
3539func (userCtl UserController ) Login (ctx context.Context , w * api.JiaozifsResponse , r * http.Request , body api.LoginJSONRequestBody ) {
36- login := auth.Login {
37- Username : body .Username ,
38- Password : body .Password ,
40+
41+ // get user encryptedPassword by username
42+ ep , err := userCtl .Repo .UserRepo ().GetEPByName (ctx , body .Username )
43+ if err != nil {
44+ w .Code (http .StatusUnauthorized )
45+ return
3946 }
4047
41- // perform login
42- authToken , err := login .Login (ctx , userCtl .Repo .UserRepo (), userCtl .Config )
48+ // Compare ep and password
49+ err = bcrypt .CompareHashAndPassword ([]byte (ep ), []byte (body .Password ))
50+ if err != nil {
51+ w .Code (http .StatusUnauthorized )
52+ return
53+ }
54+ // Generate user token
55+ loginTime := time .Now ()
56+ expires := loginTime .Add (auth .ExpirationDuration )
57+ secretKey := userCtl .Config .SecretKey
58+
59+ tokenString , err := auth .GenerateJWTLogin (secretKey , body .Username , loginTime , expires )
4360 if err != nil {
4461 w .Error (err )
4562 return
4663 }
4764
65+ userCtlLog .Infof ("usert %s login successful" , body .Username )
66+
4867 internalAuthSession , _ := userCtl .SessionStore .Get (r , auth .InternalAuthSessionName )
49- internalAuthSession .Values [auth .TokenSessionKeyName ] = authToken . Token
68+ internalAuthSession .Values [auth .TokenSessionKeyName ] = tokenString
5069 err = userCtl .SessionStore .Save (r , w , internalAuthSession )
5170 if err != nil {
5271 userCtlLog .Errorf ("Failed to save internal auth session %v" , err )
5372 w .Code (http .StatusInternalServerError )
5473 return
5574 }
56- w .JSON (authToken )
75+ w .JSON (api.AuthenticationToken {
76+ Token : tokenString ,
77+ TokenExpiration : swag .Int64 (expires .Unix ()),
78+ })
5779}
5880
5981func (userCtl UserController ) Register (ctx context.Context , w * api.JiaozifsResponse , _ * http.Request , body api.RegisterJSONRequestBody ) {
0 commit comments