Skip to content

Commit c7d6783

Browse files
Commit of all files
1 parent 1471085 commit c7d6783

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

77 files changed

+9596
-0
lines changed

users_auth_umbrella/.formatter.exs

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,4 @@
1+
[
2+
inputs: ["mix.exs", "config/*.exs"],
3+
subdirectories: ["apps/*"]
4+
]

users_auth_umbrella/.gitignore

Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,20 @@
1+
# The directory Mix will write compiled artifacts to.
2+
/_build/
3+
4+
# If you run "mix test --cover", coverage assets end up here.
5+
/cover/
6+
7+
# The directory Mix downloads your dependencies sources to.
8+
/deps/
9+
10+
# Where 3rd-party dependencies like ExDoc output generated docs.
11+
/doc/
12+
13+
# Ignore .fetch files in case you like to edit your project deps locally.
14+
/.fetch
15+
16+
# If the VM crashes, it generates a dump, let's ignore it too.
17+
erl_crash.dump
18+
19+
# Also ignore archive artifacts (built via "mix archive.build").
20+
*.ez

users_auth_umbrella/README.md

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
# UsersAuth.Umbrella
Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
[
2+
import_deps: [:ecto],
3+
inputs: ["*.{ex,exs}", "priv/*/seeds.exs", "{config,lib,test}/**/*.{ex,exs}"],
4+
subdirectories: ["priv/*/migrations"]
5+
]
Lines changed: 23 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,23 @@
1+
# The directory Mix will write compiled artifacts to.
2+
/_build/
3+
4+
# If you run "mix test --cover", coverage assets end up here.
5+
/cover/
6+
7+
# The directory Mix downloads your dependencies sources to.
8+
/deps/
9+
10+
# Where 3rd-party dependencies like ExDoc output generated docs.
11+
/doc/
12+
13+
# Ignore .fetch files in case you like to edit your project deps locally.
14+
/.fetch
15+
16+
# If the VM crashes, it generates a dump, let's ignore it too.
17+
erl_crash.dump
18+
19+
# Also ignore archive artifacts (built via "mix archive.build").
20+
*.ez
21+
22+
# Ignore package tarball (built via "mix hex.build").
23+
users_auth-*.tar
Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,3 @@
1+
# UsersAuth
2+
3+
**TODO: Add description**
Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,9 @@
1+
defmodule UsersAuth do
2+
@moduledoc """
3+
UsersAuth keeps the contexts that define your domain
4+
and business logic.
5+
6+
Contexts are also responsible for managing your data, regardless
7+
if it comes from the database, an external API or others.
8+
"""
9+
end
Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,15 @@
1+
defmodule UsersAuth.Application do
2+
# See https://hexdocs.pm/elixir/Application.html
3+
# for more information on OTP Applications
4+
@moduledoc false
5+
6+
use Application
7+
8+
def start(_type, _args) do
9+
children = [
10+
UsersAuth.Repo
11+
]
12+
13+
Supervisor.start_link(children, strategy: :one_for_one, name: UsersAuth.Supervisor)
14+
end
15+
end
Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
defmodule UsersAuth.Repo do
2+
use Ecto.Repo,
3+
otp_app: :users_auth,
4+
adapter: Ecto.Adapters.MyXQL
5+
end
Lines changed: 125 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,125 @@
1+
defmodule UsersAuth.UserContext do
2+
@moduledoc """
3+
The UserContext context.
4+
"""
5+
6+
import Ecto.Query, warn: false
7+
alias UsersAuth.Repo
8+
9+
alias UsersAuth.UserContext.User
10+
11+
@doc """
12+
Returns the list of users.
13+
14+
## Examples
15+
16+
iex> list_users()
17+
[%User{}, ...]
18+
19+
"""
20+
def list_users do
21+
Repo.all(User)
22+
end
23+
24+
@doc """
25+
Gets a single user.
26+
27+
Raises `Ecto.NoResultsError` if the User does not exist.
28+
29+
## Examples
30+
31+
iex> get_user!(123)
32+
%User{}
33+
34+
iex> get_user!(456)
35+
** (Ecto.NoResultsError)
36+
37+
"""
38+
39+
def get_user(id), do: Repo.get(User, id)
40+
41+
def get_user!(id), do: Repo.get!(User, id)
42+
43+
@doc """
44+
Creates a user.
45+
46+
## Examples
47+
48+
iex> create_user(%{field: value})
49+
{:ok, %User{}}
50+
51+
iex> create_user(%{field: bad_value})
52+
{:error, %Ecto.Changeset{}}
53+
54+
"""
55+
def create_user(attrs \\ %{}) do
56+
%User{}
57+
|> User.changeset(attrs)
58+
|> Repo.insert()
59+
end
60+
61+
@doc """
62+
Updates a user.
63+
64+
## Examples
65+
66+
iex> update_user(user, %{field: new_value})
67+
{:ok, %User{}}
68+
69+
iex> update_user(user, %{field: bad_value})
70+
{:error, %Ecto.Changeset{}}
71+
72+
"""
73+
def update_user(%User{} = user, attrs) do
74+
user
75+
|> User.changeset(attrs)
76+
|> Repo.update()
77+
end
78+
79+
@doc """
80+
Deletes a user.
81+
82+
## Examples
83+
84+
iex> delete_user(user)
85+
{:ok, %User{}}
86+
87+
iex> delete_user(user)
88+
{:error, %Ecto.Changeset{}}
89+
90+
"""
91+
def delete_user(%User{} = user) do
92+
Repo.delete(user)
93+
end
94+
95+
@doc """
96+
Returns an `%Ecto.Changeset{}` for tracking user changes.
97+
98+
## Examples
99+
100+
iex> change_user(user)
101+
%Ecto.Changeset{source: %User{}}
102+
103+
"""
104+
def change_user(%User{} = user) do
105+
User.changeset(user, %{})
106+
end
107+
108+
defdelegate get_acceptable_roles(), to: User
109+
110+
def authenticate_user(username, plain_text_password) do
111+
case Repo.get_by(User, username: username) do
112+
nil ->
113+
Pbkdf2.no_user_verify()
114+
{:error, :invalid_credentials}
115+
116+
user ->
117+
if Pbkdf2.verify_pass(plain_text_password, user.hashed_password) do
118+
{:ok, user}
119+
else
120+
{:error, :invalid_credentials}
121+
end
122+
end
123+
end
124+
125+
end

0 commit comments

Comments
 (0)