2019-03-08 22:15:38 +08:00 
										
									 
								 
							 
							
								
							 
							
								 
							
							
								package  api  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								import  (  
						 
					
						
							
								
									
										
										
										
											2019-04-30 20:42:01 +08:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
									"context" 
							 
						 
					
						
							
								
									
										
										
										
											2020-11-19 20:34:28 +08:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
									"errors" 
							 
						 
					
						
							
								
									
										
										
										
											2021-11-29 17:18:01 +08:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
									"net/http" 
							 
						 
					
						
							
								
									
										
										
										
											2019-03-08 22:15:38 +08:00 
										
									 
								 
							 
							
								
							 
							
								 
							
							
									"time" 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2023-01-30 16:18:26 +08:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
									"github.com/ua-parser/uap-go/uaparser" 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2019-03-08 22:15:38 +08:00 
										
									 
								 
							 
							
								
							 
							
								 
							
							
									"github.com/grafana/grafana/pkg/api/dtos" 
							 
						 
					
						
							
								
									
										
										
										
											2021-01-15 21:43:20 +08:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
									"github.com/grafana/grafana/pkg/api/response" 
							 
						 
					
						
							
								
									
										
										
										
											2022-11-18 16:56:06 +08:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
									"github.com/grafana/grafana/pkg/services/auth" 
							 
						 
					
						
							
								
									
										
										
										
											2023-01-27 15:50:36 +08:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
									contextmodel  "github.com/grafana/grafana/pkg/services/contexthandler/model" 
							 
						 
					
						
							
								
									
										
										
										
											2022-07-20 20:50:06 +08:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
									"github.com/grafana/grafana/pkg/services/user" 
							 
						 
					
						
							
								
									
										
										
										
											2019-03-08 22:15:38 +08:00 
										
									 
								 
							 
							
								
							 
							
								 
							
							
									"github.com/grafana/grafana/pkg/util" 
							 
						 
					
						
							
								
									
										
										
										
											2021-11-29 17:18:01 +08:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
									"github.com/grafana/grafana/pkg/web" 
							 
						 
					
						
							
								
									
										
										
										
											2019-03-08 22:15:38 +08:00 
										
									 
								 
							 
							
								
							 
							
								 
							
							
								)  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2022-07-27 21:54:37 +08:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								// swagger:route GET /user/auth-tokens signed_in_user getUserAuthTokens
  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								//
  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								// Auth tokens of the actual User.
  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								//
  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								// Return a list of all auth tokens (devices) that the actual user currently have logged in from.
  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								//
  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								// Responses:
  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								// 200: getUserAuthTokensResponse
  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								// 401: unauthorisedError
  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								// 403: forbiddenError
  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								// 500: internalServerError
  
						 
					
						
							
								
									
										
										
										
											2023-01-27 15:50:36 +08:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								func  ( hs  * HTTPServer )  GetUserAuthTokens ( c  * contextmodel . ReqContext )  response . Response  {  
						 
					
						
							
								
									
										
										
										
											2022-08-11 19:28:55 +08:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
									return  hs . getUserAuthTokensInternal ( c ,  c . UserID ) 
							 
						 
					
						
							
								
									
										
										
										
											2019-03-08 22:15:38 +08:00 
										
									 
								 
							 
							
								
							 
							
								 
							
							
								}  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2022-07-27 21:54:37 +08:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								// swagger:route POST /user/revoke-auth-token signed_in_user revokeUserAuthToken
  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								//
  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								// Revoke an auth token of the actual User.
  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								//
  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								// Revokes the given auth token (device) for the actual user. User of issued auth token (device) will no longer be logged in and will be required to authenticate again upon next activity.
  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								//
  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								// Responses:
  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								// 200: okResponse
  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								// 400: badRequestError
  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								// 401: unauthorisedError
  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								// 403: forbiddenError
  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								// 500: internalServerError
  
						 
					
						
							
								
									
										
										
										
											2023-01-27 15:50:36 +08:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								func  ( hs  * HTTPServer )  RevokeUserAuthToken ( c  * contextmodel . ReqContext )  response . Response  {  
						 
					
						
							
								
									
										
										
										
											2022-11-18 16:56:06 +08:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
									cmd  :=  auth . RevokeAuthTokenCmd { } 
							 
						 
					
						
							
								
									
										
										
										
											2021-11-29 17:18:01 +08:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
									if  err  :=  web . Bind ( c . Req ,  & cmd ) ;  err  !=  nil  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
										return  response . Error ( http . StatusBadRequest ,  "bad request data" ,  err ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									} 
							 
						 
					
						
							
								
									
										
										
										
											2022-08-11 19:28:55 +08:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
									return  hs . revokeUserAuthTokenInternal ( c ,  c . UserID ,  cmd ) 
							 
						 
					
						
							
								
									
										
										
										
											2019-03-08 22:15:38 +08:00 
										
									 
								 
							 
							
								
							 
							
								 
							
							
								}  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2021-01-15 21:43:20 +08:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								func  ( hs  * HTTPServer )  logoutUserFromAllDevicesInternal ( ctx  context . Context ,  userID  int64 )  response . Response  {  
						 
					
						
							
								
									
										
										
										
											2022-08-02 22:58:05 +08:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
									userQuery  :=  user . GetUserByIDQuery { ID :  userID } 
							 
						 
					
						
							
								
									
										
										
										
											2019-03-08 22:15:38 +08:00 
										
									 
								 
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2022-08-02 22:58:05 +08:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
									_ ,  err  :=  hs . userService . GetByID ( ctx ,  & userQuery ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									if  err  !=  nil  { 
							 
						 
					
						
							
								
									
										
										
										
											2022-07-20 20:50:06 +08:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
										if  errors . Is ( err ,  user . ErrUserNotFound )  { 
							 
						 
					
						
							
								
									
										
										
										
											2021-01-15 21:43:20 +08:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
											return  response . Error ( 404 ,  "User not found" ,  err ) 
							 
						 
					
						
							
								
									
										
										
										
											2019-03-08 22:15:38 +08:00 
										
									 
								 
							 
							
								
							 
							
								 
							
							
										} 
							 
						 
					
						
							
								
									
										
										
										
											2021-01-15 21:43:20 +08:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
										return  response . Error ( 500 ,  "Could not read user from database" ,  err ) 
							 
						 
					
						
							
								
									
										
										
										
											2019-03-08 22:15:38 +08:00 
										
									 
								 
							 
							
								
							 
							
								 
							
							
									} 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2022-08-02 22:58:05 +08:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
									err  =  hs . AuthTokenService . RevokeAllUserTokens ( ctx ,  userID ) 
							 
						 
					
						
							
								
									
										
										
										
											2019-03-08 22:15:38 +08:00 
										
									 
								 
							 
							
								
							 
							
								 
							
							
									if  err  !=  nil  { 
							 
						 
					
						
							
								
									
										
										
										
											2021-01-15 21:43:20 +08:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
										return  response . Error ( 500 ,  "Failed to logout user" ,  err ) 
							 
						 
					
						
							
								
									
										
										
										
											2019-03-08 22:15:38 +08:00 
										
									 
								 
							 
							
								
							 
							
								 
							
							
									} 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2022-04-15 20:01:58 +08:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
									return  response . JSON ( http . StatusOK ,  util . DynMap { 
							 
						 
					
						
							
								
									
										
										
										
											2019-03-08 22:15:38 +08:00 
										
									 
								 
							 
							
								
							 
							
								 
							
							
										"message" :  "User logged out" , 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									} ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								}  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2023-01-27 15:50:36 +08:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								func  ( hs  * HTTPServer )  getUserAuthTokensInternal ( c  * contextmodel . ReqContext ,  userID  int64 )  response . Response  {  
						 
					
						
							
								
									
										
										
										
											2022-08-02 22:58:05 +08:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
									userQuery  :=  user . GetUserByIDQuery { ID :  userID } 
							 
						 
					
						
							
								
									
										
										
										
											2019-03-08 22:15:38 +08:00 
										
									 
								 
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2022-08-02 22:58:05 +08:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
									_ ,  err  :=  hs . userService . GetByID ( c . Req . Context ( ) ,  & userQuery ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									if  err  !=  nil  { 
							 
						 
					
						
							
								
									
										
										
										
											2022-07-20 20:50:06 +08:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
										if  errors . Is ( err ,  user . ErrUserNotFound )  { 
							 
						 
					
						
							
								
									
										
										
										
											2022-06-24 22:59:45 +08:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
											return  response . Error ( http . StatusNotFound ,  "User not found" ,  err ) 
							 
						 
					
						
							
								
									
										
										
										
											2022-07-20 20:50:06 +08:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
										}  else  if  errors . Is ( err ,  user . ErrCaseInsensitive )  { 
							 
						 
					
						
							
								
									
										
										
										
											2022-06-24 22:59:45 +08:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
											return  response . Error ( http . StatusConflict , 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
												"User has conflicting login or email with another user. Please contact server admin" ,  err ) 
							 
						 
					
						
							
								
									
										
										
										
											2019-03-08 22:15:38 +08:00 
										
									 
								 
							 
							
								
							 
							
								 
							
							
										} 
							 
						 
					
						
							
								
									
										
										
										
											2022-06-24 22:59:45 +08:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
										return  response . Error ( http . StatusInternalServerError ,  "Failed to get user" ,  err ) 
							 
						 
					
						
							
								
									
										
										
										
											2019-03-08 22:15:38 +08:00 
										
									 
								 
							 
							
								
							 
							
								 
							
							
									} 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2020-11-05 22:37:11 +08:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
									tokens ,  err  :=  hs . AuthTokenService . GetUserTokens ( c . Req . Context ( ) ,  userID ) 
							 
						 
					
						
							
								
									
										
										
										
											2019-03-08 22:15:38 +08:00 
										
									 
								 
							 
							
								
							 
							
								 
							
							
									if  err  !=  nil  { 
							 
						 
					
						
							
								
									
										
										
										
											2021-01-15 21:43:20 +08:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
										return  response . Error ( 500 ,  "Failed to get user auth tokens" ,  err ) 
							 
						 
					
						
							
								
									
										
										
										
											2019-03-08 22:15:38 +08:00 
										
									 
								 
							 
							
								
							 
							
								 
							
							
									} 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									result  :=  [ ] * dtos . UserToken { } 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									for  _ ,  token  :=  range  tokens  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
										isActive  :=  false 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
										if  c . UserToken  !=  nil  &&  c . UserToken . Id  ==  token . Id  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
											isActive  =  true 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
										} 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2019-06-11 20:12:52 +08:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
										parser  :=  uaparser . NewFromSaved ( ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
										client  :=  parser . Parse ( token . UserAgent ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
										osVersion  :=  "" 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
										if  client . Os . Major  !=  ""  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
											osVersion  =  client . Os . Major 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
											if  client . Os . Minor  !=  ""  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
												osVersion  =  osVersion  +  "."  +  client . Os . Minor 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
											} 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
										} 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
										browserVersion  :=  "" 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
										if  client . UserAgent . Major  !=  ""  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
											browserVersion  =  client . UserAgent . Major 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
											if  client . UserAgent . Minor  !=  ""  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
												browserVersion  =  browserVersion  +  "."  +  client . UserAgent . Minor 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
											} 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
										} 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2019-07-08 20:30:02 +08:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
										createdAt  :=  time . Unix ( token . CreatedAt ,  0 ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
										seenAt  :=  time . Unix ( token . SeenAt ,  0 ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
										if  token . SeenAt  ==  0  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
											seenAt  =  createdAt 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
										} 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2019-03-08 22:15:38 +08:00 
										
									 
								 
							 
							
								
							 
							
								 
							
							
										result  =  append ( result ,  & dtos . UserToken { 
							 
						 
					
						
							
								
									
										
										
										
											2019-06-11 20:12:52 +08:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
											Id :                      token . Id , 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
											IsActive :                isActive , 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
											ClientIp :                token . ClientIp , 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
											Device :                  client . Device . ToString ( ) , 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
											OperatingSystem :         client . Os . Family , 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
											OperatingSystemVersion :  osVersion , 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
											Browser :                 client . UserAgent . Family , 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
											BrowserVersion :          browserVersion , 
							 
						 
					
						
							
								
									
										
										
										
											2019-07-08 20:30:02 +08:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
											CreatedAt :               createdAt , 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
											SeenAt :                  seenAt , 
							 
						 
					
						
							
								
									
										
										
										
											2019-03-08 22:15:38 +08:00 
										
									 
								 
							 
							
								
							 
							
								 
							
							
										} ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									} 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2022-04-15 20:01:58 +08:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
									return  response . JSON ( http . StatusOK ,  result ) 
							 
						 
					
						
							
								
									
										
										
										
											2019-03-08 22:15:38 +08:00 
										
									 
								 
							 
							
								
							 
							
								 
							
							
								}  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2023-01-27 15:50:36 +08:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								func  ( hs  * HTTPServer )  revokeUserAuthTokenInternal ( c  * contextmodel . ReqContext ,  userID  int64 ,  cmd  auth . RevokeAuthTokenCmd )  response . Response  {  
						 
					
						
							
								
									
										
										
										
											2022-08-02 22:58:05 +08:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
									userQuery  :=  user . GetUserByIDQuery { ID :  userID } 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									_ ,  err  :=  hs . userService . GetByID ( c . Req . Context ( ) ,  & userQuery ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									if  err  !=  nil  { 
							 
						 
					
						
							
								
									
										
										
										
											2022-07-20 20:50:06 +08:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
										if  errors . Is ( err ,  user . ErrUserNotFound )  { 
							 
						 
					
						
							
								
									
										
										
										
											2021-01-15 21:43:20 +08:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
											return  response . Error ( 404 ,  "User not found" ,  err ) 
							 
						 
					
						
							
								
									
										
										
										
											2019-03-08 22:15:38 +08:00 
										
									 
								 
							 
							
								
							 
							
								 
							
							
										} 
							 
						 
					
						
							
								
									
										
										
										
											2021-01-15 21:43:20 +08:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
										return  response . Error ( 500 ,  "Failed to get user" ,  err ) 
							 
						 
					
						
							
								
									
										
										
										
											2019-03-08 22:15:38 +08:00 
										
									 
								 
							 
							
								
							 
							
								 
							
							
									} 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2020-11-05 22:37:11 +08:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
									token ,  err  :=  hs . AuthTokenService . GetUserToken ( c . Req . Context ( ) ,  userID ,  cmd . AuthTokenId ) 
							 
						 
					
						
							
								
									
										
										
										
											2019-03-08 22:15:38 +08:00 
										
									 
								 
							 
							
								
							 
							
								 
							
							
									if  err  !=  nil  { 
							 
						 
					
						
							
								
									
										
										
										
											2022-11-18 16:56:06 +08:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
										if  errors . Is ( err ,  auth . ErrUserTokenNotFound )  { 
							 
						 
					
						
							
								
									
										
										
										
											2021-01-15 21:43:20 +08:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
											return  response . Error ( 404 ,  "User auth token not found" ,  err ) 
							 
						 
					
						
							
								
									
										
										
										
											2019-03-08 22:15:38 +08:00 
										
									 
								 
							 
							
								
							 
							
								 
							
							
										} 
							 
						 
					
						
							
								
									
										
										
										
											2021-01-15 21:43:20 +08:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
										return  response . Error ( 500 ,  "Failed to get user auth token" ,  err ) 
							 
						 
					
						
							
								
									
										
										
										
											2019-03-08 22:15:38 +08:00 
										
									 
								 
							 
							
								
							 
							
								 
							
							
									} 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									if  c . UserToken  !=  nil  &&  c . UserToken . Id  ==  token . Id  { 
							 
						 
					
						
							
								
									
										
										
										
											2021-01-15 21:43:20 +08:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
										return  response . Error ( 400 ,  "Cannot revoke active user auth token" ,  nil ) 
							 
						 
					
						
							
								
									
										
										
										
											2019-03-08 22:15:38 +08:00 
										
									 
								 
							 
							
								
							 
							
								 
							
							
									} 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2021-03-17 00:44:02 +08:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
									err  =  hs . AuthTokenService . RevokeToken ( c . Req . Context ( ) ,  token ,  false ) 
							 
						 
					
						
							
								
									
										
										
										
											2019-03-08 22:15:38 +08:00 
										
									 
								 
							 
							
								
							 
							
								 
							
							
									if  err  !=  nil  { 
							 
						 
					
						
							
								
									
										
										
										
											2022-11-18 16:56:06 +08:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
										if  errors . Is ( err ,  auth . ErrUserTokenNotFound )  { 
							 
						 
					
						
							
								
									
										
										
										
											2021-01-15 21:43:20 +08:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
											return  response . Error ( 404 ,  "User auth token not found" ,  err ) 
							 
						 
					
						
							
								
									
										
										
										
											2019-03-08 22:15:38 +08:00 
										
									 
								 
							 
							
								
							 
							
								 
							
							
										} 
							 
						 
					
						
							
								
									
										
										
										
											2021-01-15 21:43:20 +08:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
										return  response . Error ( 500 ,  "Failed to revoke user auth token" ,  err ) 
							 
						 
					
						
							
								
									
										
										
										
											2019-03-08 22:15:38 +08:00 
										
									 
								 
							 
							
								
							 
							
								 
							
							
									} 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2022-04-15 20:01:58 +08:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
									return  response . JSON ( http . StatusOK ,  util . DynMap { 
							 
						 
					
						
							
								
									
										
										
										
											2019-03-08 22:15:38 +08:00 
										
									 
								 
							 
							
								
							 
							
								 
							
							
										"message" :  "User auth token revoked" , 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									} ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								}  
						 
					
						
							
								
									
										
										
										
											2022-07-27 21:54:37 +08:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								// swagger:parameters revokeUserAuthToken
  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								type  RevokeUserAuthTokenParams  struct  {  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									// in:body
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									// required:true
 
							 
						 
					
						
							
								
									
										
										
										
											2022-11-18 16:56:06 +08:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
									Body  auth . RevokeAuthTokenCmd  ` json:"body" ` 
							 
						 
					
						
							
								
									
										
										
										
											2022-07-27 21:54:37 +08:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								}  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								// swagger:response getUserAuthTokensResponse
  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								type  GetUserAuthTokensResponse  struct  {  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									// in:body
 
							 
						 
					
						
							
								
									
										
										
										
											2022-11-18 16:56:06 +08:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
									Body  [ ] * auth . UserToken  ` json:"body" ` 
							 
						 
					
						
							
								
									
										
										
										
											2022-07-27 21:54:37 +08:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								}