summaryrefslogtreecommitdiff
path: root/src/ejabberd_oauth_sql.erl
diff options
context:
space:
mode:
authorAlexey Shchepin <alexey@process-one.net>2016-08-01 16:53:25 +0300
committerAlexey Shchepin <alexey@process-one.net>2016-08-01 16:55:43 +0300
commit4add262090653e3b2e026f9181247c31acdf6090 (patch)
tree0145c68126a4aebf291217190a2c57241b6bbba6 /src/ejabberd_oauth_sql.erl
parentImplement 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.erl78
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")).
+