@@ -49,25 +49,26 @@ type AccountDatabase interface {
4949}
5050
5151// VerifyUserFromRequest authenticates the HTTP request,
52- // on success returns UserID of the requester.
52+ // on success returns UserID, Device of the requester.
5353// Finds local user or an application service user.
54+ // Note: For an AS user, Device is not present.
5455// On failure returns an JSON error response which can be sent to the client.
5556func VerifyUserFromRequest (
5657 req * http.Request , accountDB AccountDatabase , deviceDB DeviceDatabase ,
5758 applicationServices []config.ApplicationService ,
58- ) (string , * util.JSONResponse ) {
59+ ) (string , * authtypes. Device , * util.JSONResponse ) {
5960 // Try to find local user from device database
60- dev , devErr := VerifyAccessToken (req , deviceDB )
61+ dev , devErr := verifyAccessToken (req , deviceDB )
6162
6263 if devErr == nil {
63- return dev .UserID , nil
64+ return dev .UserID , dev , nil
6465 }
6566
6667 // Try to find the Application Service user
6768 token , err := extractAccessToken (req )
6869
6970 if err != nil {
70- return "" , & util.JSONResponse {
71+ return "" , nil , & util.JSONResponse {
7172 Code : http .StatusUnauthorized ,
7273 JSON : jsonerror .MissingToken (err .Error ()),
7374 }
@@ -87,7 +88,7 @@ func VerifyUserFromRequest(
8788 localpart , err := userutil .ParseUsernameParam (userID , nil )
8889
8990 if err != nil {
90- return "" , & util.JSONResponse {
91+ return "" , nil , & util.JSONResponse {
9192 Code : http .StatusBadRequest ,
9293 JSON : jsonerror .InvalidUsername (err .Error ()),
9394 }
@@ -98,25 +99,25 @@ func VerifyUserFromRequest(
9899
99100 // Verify that account exists & appServiceID matches
100101 if accountErr == nil && account .AppServiceID == appService .ID {
101- return userID , nil
102+ return userID , nil , nil
102103 }
103104
104- return "" , & util.JSONResponse {
105+ return "" , nil , & util.JSONResponse {
105106 Code : http .StatusForbidden ,
106107 JSON : jsonerror .Forbidden ("Application service has not registered this user" ),
107108 }
108109 }
109110
110- return "" , & util.JSONResponse {
111+ return "" , nil , & util.JSONResponse {
111112 Code : http .StatusUnauthorized ,
112113 JSON : jsonerror .UnknownToken ("Unrecognized access token" ),
113114 }
114115}
115116
116- // VerifyAccessToken verifies that an access token was supplied in the given HTTP request
117+ // verifyAccessToken verifies that an access token was supplied in the given HTTP request
117118// and returns the device it corresponds to. Returns resErr (an error response which can be
118119// sent to the client) if the token is invalid or there was a problem querying the database.
119- func VerifyAccessToken (req * http.Request , deviceDB DeviceDatabase ) (device * authtypes.Device , resErr * util.JSONResponse ) {
120+ func verifyAccessToken (req * http.Request , deviceDB DeviceDatabase ) (device * authtypes.Device , resErr * util.JSONResponse ) {
120121 token , err := extractAccessToken (req )
121122 if err != nil {
122123 resErr = & util.JSONResponse {
0 commit comments