@@ -4,52 +4,46 @@ defmodule Mongo.Auth do
4
4
alias Mongo.PasswordSafe
5
5
6
6
def run ( opts , state ) do
7
- db = opts [ :database ]
8
- auth = setup ( opts )
9
- auther = mechanism ( state )
10
7
auth_source = opts [ :auth_source ]
11
- wire_version = state [ :wire_version ]
8
+ mechanism = mechanism ( state )
12
9
13
10
# change database for auth
14
- state =
15
- case auth_source != nil && wire_version > 0 do
16
- true -> Map . put ( state , :database , auth_source )
17
- false -> state
18
- end
11
+ auth_state =
12
+ case auth_source != nil && state . wire_version > 0 do
13
+ true ->
14
+ Map . put ( state , :database , auth_source )
19
15
20
- # do auth
21
- # restore old database
22
- Enum . find_value ( auth , fn credentials ->
23
- case auther . auth ( credentials , db , state ) do
24
- # everything is okay, then return nil
25
- :ok ->
26
- nil
27
-
28
- error ->
29
- { mod , socket } = state . connection
30
- mod . close ( socket )
31
- error
16
+ false ->
17
+ state
32
18
end
33
- end ) || { :ok , Map . put ( state , :database , opts [ :database ] ) }
19
+
20
+ case opts |> credentials ( ) |> mechanism . auth ( state . database , auth_state ) do
21
+ :ok ->
22
+ { :ok , state }
23
+
24
+ error ->
25
+ { mod , socket } = state . connection
26
+ mod . close ( socket )
27
+ error
28
+ end
34
29
end
35
30
36
- defp setup ( opts ) do
31
+ defp credentials ( opts ) do
37
32
username = opts [ :username ]
38
33
pw_safe = opts [ :pw_safe ]
39
- password = PasswordSafe . get_pasword ( pw_safe )
40
- auth = opts [ :auth ] || [ ]
34
+ password = PasswordSafe . get_password ( pw_safe )
35
+ { username , password }
36
+ end
41
37
42
- auth =
43
- Enum . map ( auth , fn opts ->
44
- username = opts [ :username ]
45
- password = PasswordSafe . get_pasword ( pw_safe )
46
- { username , password }
47
- end )
38
+ defp mechanism ( % { wire_version: version , auth_mechanism: :x509 } ) when version >= 3 do
39
+ Mongo.Auth.X509
40
+ end
48
41
49
- if username && password , do: auth ++ [ { username , password } ] , else: auth
42
+ defp mechanism ( % { wire_version: version } ) when version >= 3 do
43
+ Mongo.Auth.SCRAM
50
44
end
51
45
52
- defp mechanism ( % { wire_version: version , auth_mechanism: :x509 } ) when version >= 3 , do: Mongo.Auth.X509
53
- defp mechanism ( % { wire_version: version } ) when version >= 3 , do: Mongo.Auth.SCRAM
54
- defp mechanism ( _ ) , do: Mongo.Auth.CR
46
+ defp mechanism ( _ ) do
47
+ Mongo.Auth.CR
48
+ end
55
49
end
0 commit comments