aboutsummaryrefslogtreecommitdiff
path: root/src/cyrsasl_anonymous.erl
blob: 6f05be9d149318e53a243868c40c104ab140fbf4 (plain) (blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
%%%----------------------------------------------------------------------
%%% File    : cyrsasl_anonymous.erl
%%% Author  : Magnus Henoch <henoch@dtek.chalmers.se>
%%% Purpose : ANONYMOUS SASL mechanism
%%% Created : 23 Aug 2005 by Magnus Henoch <henoch@dtek.chalmers.se>
%%% Id      : $Id$
%%%----------------------------------------------------------------------

%% See http://www.ietf.org/internet-drafts/draft-ietf-sasl-anon-05.txt

-module(cyrsasl_anonymous).
-vsn('$Revision$').

-export([start/1, stop/0, mech_new/3, mech_step/2]).

-behaviour(cyrsasl).

-record(state, {server}).

start(_Opts) ->
    cyrsasl:register_mechanism("ANONYMOUS", ?MODULE, false),
    ok.

stop() ->
    ok.

mech_new(Host, _GetPassword, _CheckPassword) ->
    {ok, #state{server = Host}}.

mech_step(State, _ClientIn) ->
    %% We generate a random username:
    User = lists:concat([randoms:get_string() | tuple_to_list(now())]),
    Server = State#state.server,
    
    %% Checks that the username is available
    case ejabberd_auth:is_user_exists(User, Server) of
	true  -> {error, "not-authorized"};
	false -> {ok, [{username, User}]}
    end.