@@ -11,22 +11,26 @@ defmodule Meadow.Accounts.Ldap do
11
11
@ connect_timeout 1500
12
12
@ retries 3
13
13
@ ldap_matching_rule_in_chain "1.2.840.113556.1.4.1941"
14
+ @ sslopts [ cacertfile: :certifi . cacertfile ( ) , verify: :verify_peer ]
14
15
15
16
def connection ( force_new \\ false ) do
16
17
if force_new , do: Meadow.Cache |> Cachex . del ( :ldap_address )
17
18
18
- settings =
19
- with config <- Application . get_env ( :exldap , :settings ) do
20
- Keyword . put ( config , :server , connection_address ( config ) )
21
- end
22
-
23
- case { Exldap . connect ( settings , @ connect_timeout ) , force_new } do
19
+ case { connection_settings ( ) |> Exldap . connect ( @ connect_timeout ) , force_new } do
24
20
{ { :ok , result } , _ } -> result
25
21
{ _ , false } -> connection ( true )
26
22
{ other , true } -> other
27
23
end
28
24
end
29
25
26
+ def connection_settings do
27
+ with config <- Application . get_env ( :exldap , :settings ) |> address_to_ip ( ) do
28
+ if Keyword . get ( config , :ssl , false ) ,
29
+ do: Keyword . put ( config , :sslopts , @ sslopts ) ,
30
+ else: config
31
+ end
32
+ end
33
+
30
34
@ doc "Find a user entry by its common name (NetID)"
31
35
def find_user ( cn ) do
32
36
find_user_func = fn ->
@@ -172,7 +176,7 @@ defmodule Meadow.Accounts.Ldap do
172
176
173
177
@ doc "Add a member to a group"
174
178
def add_member ( group_dn , member_dn ) do
175
- with operation <- :eldap . mod_add ( ' member' , [ to_charlist ( member_dn ) ] ) do
179
+ with operation <- :eldap . mod_add ( ~c " member" , [ to_charlist ( member_dn ) ] ) do
176
180
case modify_entry ( group_dn , operation ) do
177
181
{ :ok , _ } -> :ok
178
182
{ :exists , _ } -> :exists
@@ -183,7 +187,7 @@ defmodule Meadow.Accounts.Ldap do
183
187
184
188
@ doc "Remove a member from a group"
185
189
def remove_member ( group_dn , member_dn ) do
186
- with operation <- :eldap . mod_delete ( ' member' , [ to_charlist ( member_dn ) ] ) do
190
+ with operation <- :eldap . mod_delete ( ~c " member" , [ to_charlist ( member_dn ) ] ) do
187
191
case modify_entry ( group_dn , operation ) do
188
192
{ :ok , _ } -> :ok
189
193
other -> other
@@ -207,6 +211,8 @@ defmodule Meadow.Accounts.Ldap do
207
211
end
208
212
end
209
213
214
+ defp address_to_ip ( config ) , do: Keyword . put ( config , :server , connection_address ( config ) )
215
+
210
216
defp connection_address ( config ) do
211
217
find_connection = fn tuple ->
212
218
case tuple |> :gen_tcp . connect ( config [ :port ] , [ :inet ] ) do
0 commit comments