]> granicus.if.org Git - ejabberd/commitdiff
Merge pull request #1223 from processone/expand_api
authorMickaël Rémond <mremond@process-one.net>
Mon, 1 Aug 2016 13:36:47 +0000 (15:36 +0200)
committerGitHub <noreply@github.com>
Mon, 1 Aug 2016 13:36:47 +0000 (15:36 +0200)
More API fixes and improvements

1  2 
src/ejabberd_oauth.erl

index c45a69d17c2b1a2caa2e5993ad77394a99f278ff,531f277498869372395bef0f8831dcde738551f9..e4396260e39ff38d7e01bb920771ff6fd0560824
@@@ -295,38 -315,46 +295,48 @@@ associate_refresh_token(_RefreshToken, 
  check_token(User, Server, ScopeList, Token) ->
      LUser = jid:nodeprep(User),
      LServer = jid:nameprep(Server),
 -    case catch mnesia:dirty_read(oauth_token, Token) of
 -        [#oauth_token{us = {LUser, LServer},
 -                      scope = TokenScope,
 -                      expire = Expire}] ->
 +    DBMod = get_db_backend(),
 +    case DBMod:lookup(Token) of
 +        #oauth_token{us = {LUser, LServer},
 +                     scope = TokenScope,
 +                     expire = Expire} ->
              {MegaSecs, Secs, _} = os:timestamp(),
              TS = 1000000 * MegaSecs + Secs,
-             TokenScopeSet = oauth2_priv_set:new(TokenScope),
-             lists:any(fun(Scope) ->
-                 oauth2_priv_set:is_member(Scope, TokenScopeSet) end,
-                 ScopeList) andalso Expire > TS;
+             if
+                 Expire > TS ->
+                     TokenScopeSet = oauth2_priv_set:new(TokenScope),
+                     lists:any(fun(Scope) ->
+                                       oauth2_priv_set:is_member(Scope, TokenScopeSet) end,
+                               ScopeList);
+                 true ->
+                     {false, expired}
+             end;
          _ ->
-             false
+             {false, not_found}
      end.
  
  check_token(ScopeList, Token) ->
 -    case catch mnesia:dirty_read(oauth_token, Token) of
 -        [#oauth_token{us = US,
 -                      scope = TokenScope,
 -                      expire = Expire}] ->
 +    DBMod = get_db_backend(),
 +    case DBMod:lookup(Token) of
 +        #oauth_token{us = US,
 +                     scope = TokenScope,
 +                     expire = Expire} ->
              {MegaSecs, Secs, _} = os:timestamp(),
              TS = 1000000 * MegaSecs + Secs,
-             TokenScopeSet = oauth2_priv_set:new(TokenScope),
-             case lists:any(fun(Scope) ->
-                 oauth2_priv_set:is_member(Scope, TokenScopeSet) end,
-                 ScopeList) andalso Expire > TS of
-                 true -> {ok, user, US};
-                 false -> false
+             if
+                 Expire > TS ->
+                     TokenScopeSet = oauth2_priv_set:new(TokenScope),
+                     case lists:any(fun(Scope) ->
+                                            oauth2_priv_set:is_member(Scope, TokenScopeSet) end,
+                                    ScopeList) of
+                         true -> {ok, user, US};
+                         false -> {false, no_matching_scope}
+                     end;
+                 true ->
+                     {false, expired}
              end;
          _ ->
-             false
+             {false, not_found}
      end.