diff options
author | Alexey Shchepin <alexey@process-one.net> | 2016-08-01 16:53:25 +0300 |
---|---|---|
committer | Alexey Shchepin <alexey@process-one.net> | 2016-08-01 16:55:43 +0300 |
commit | 4add262090653e3b2e026f9181247c31acdf6090 (patch) | |
tree | 0145c68126a4aebf291217190a2c57241b6bbba6 /src/ejabberd_oauth_sql.erl | |
parent | Implement gen_mod callback in ModPresenceDemo module (diff) |
Add OAUTH SQL backend
Diffstat (limited to 'src/ejabberd_oauth_sql.erl')
-rw-r--r-- | src/ejabberd_oauth_sql.erl | 78 |
1 files changed, 78 insertions, 0 deletions
diff --git a/src/ejabberd_oauth_sql.erl b/src/ejabberd_oauth_sql.erl new file mode 100644 index 00000000..9253335f --- /dev/null +++ b/src/ejabberd_oauth_sql.erl @@ -0,0 +1,78 @@ +%%%------------------------------------------------------------------- +%%% File : ejabberd_oauth_sql.erl +%%% Author : Alexey Shchepin <alexey@process-one.net> +%%% Purpose : OAUTH2 SQL backend +%%% Created : 27 Jul 2016 by Alexey Shchepin <alexey@process-one.net> +%%% +%%% +%%% ejabberd, Copyright (C) 2002-2016 ProcessOne +%%% +%%% This program is free software; you can redistribute it and/or +%%% modify it under the terms of the GNU General Public License as +%%% published by the Free Software Foundation; either version 2 of the +%%% License, or (at your option) any later version. +%%% +%%% This program is distributed in the hope that it will be useful, +%%% but WITHOUT ANY WARRANTY; without even the implied warranty of +%%% MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +%%% General Public License for more details. +%%% +%%% You should have received a copy of the GNU General Public License +%%% along with this program; if not, write to the Free Software +%%% Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA +%%% 02111-1307 USA +%%% +%%%------------------------------------------------------------------- + +-module(ejabberd_oauth_sql). + +-compile([{parse_transform, ejabberd_sql_pt}]). + +-export([init/0, + store/1, + lookup/1, + clean/1]). + +-include("ejabberd_oauth.hrl"). +-include("ejabberd.hrl"). +-include("ejabberd_sql_pt.hrl"). +-include("jlib.hrl"). + +init() -> + ok. + +store(R) -> + Token = R#oauth_token.token, + {User, Server} = R#oauth_token.us, + SJID = jid:to_string({User, Server, <<"">>}), + Scope = str:join(R#oauth_token.scope, <<" ">>), + Expire = R#oauth_token.expire, + ?SQL_UPSERT( + ?MYNAME, + "oauth_token", + ["!token=%(Token)s", + "jid=%(SJID)s", + "scope=%(Scope)s", + "expire=%(Expire)d"]). + +lookup(Token) -> + case ejabberd_sql:sql_query( + ?MYNAME, + ?SQL("select @(jid)s, @(scope)s, @(expire)d" + " from oauth_token where token=%(Token)s")) of + {selected, [{SJID, Scope, Expire}]} -> + JID = jid:from_string(SJID), + US = {JID#jid.luser, JID#jid.lserver}, + #oauth_token{token = Token, + us = US, + scope = str:tokens(Scope, <<" ">>), + expire = Expire}; + _ -> + false + end. + +clean(TS) -> + ejabberd_sql:sql_query( + ?MYNAME, + ?SQL("delete from oauth_token where expire < %(TS)d")). + |