Packages
mongodb_driver
1.6.4
1.6.4
1.6.3
1.6.2
1.6.1
1.6.0
1.5.6
1.5.5
1.5.4
1.5.2
1.5.1
1.5.0
1.4.1
1.4.0
1.2.1
1.2.0
1.1.0
1.0.3
1.0.2
1.0.1
1.0.0
0.9.2
0.9.1
0.9.0
0.9.0-rc.1
0.9.0-rc.0
0.8.4
0.8.3
0.8.2
0.8.1
0.8.0
0.7.4
0.7.3
0.7.2
0.7.1
0.7.0
0.6.5
0.6.4
0.6.3
0.6.2
0.6.1
0.6.0
0.5.7
0.5.6
0.5.5
0.5.4
0.5.3
0.5.2
0.5.1
0.5.0
The MongoDB driver for Elixir
Current section
Files
Jump to
Current section
Files
lib/mongo/auth.ex
defmodule Mongo.Auth do
@moduledoc false
alias Mongo.PasswordSafe
def run(opts, state) do
auth_source = opts[:auth_source]
mechanism = mechanism(state)
# change database for auth
auth_state =
case auth_source != nil && state.wire_version > 0 do
true ->
Map.put(state, :database, auth_source)
false ->
state
end
case opts |> credentials() |> mechanism.auth(auth_state) do
:ok ->
{:ok, state}
error ->
{mod, socket} = state.connection
mod.close(socket)
error
end
end
defp credentials(opts) do
username = opts[:username]
pw_safe = opts[:pw_safe]
password = PasswordSafe.get_password(pw_safe)
{username, password}
end
defp mechanism(%{wire_version: version, auth_mechanism: :x509}) when version >= 3 do
Mongo.Auth.X509
end
defp mechanism(%{wire_version: version, auth_mechanism: :plain}) when version >= 3 do
Mongo.Auth.PLAIN
end
defp mechanism(%{wire_version: version}) when version >= 3 do
Mongo.Auth.SCRAM
end
defp mechanism(_) do
Mongo.Auth.CR
end
end