Select Git revision
stack.yaml.lock
-
Ari Nugraha authoredAri Nugraha authored
Code owners
Assign users and groups as approvers for specific file changes. Learn more.
google_auth.ex 1.61 KiB
defmodule DiskuyWeb.Auth.GoogleAuth do
alias DiskuyWeb.Auth.Guardian
alias Diskuy.Account
alias Diskuy.Utility.Utility
def get_access_token(code, conn) do
case ElixirAuthGoogle.get_token(code, conn) do
{:ok, profile} ->
{:ok, profile}
_ ->
{:error, :bad_request}
end
end
def create_local_token(token) do
{:ok, profile} = ElixirAuthGoogle.get_user_profile(token)
{email, username, picture} = {profile[:email], profile[:name], profile[:picture]}
case Account.get_by_email(email) do
{:ok, user} ->
Guardian.create_token(user)
{:error, :not_found} ->
create_user(username, email, picture)
end
end
defp create_user(username, email, picture) do
case Account.get_by_username(username) do
{:ok, _user} ->
new_username = create_username(username)
{:ok, user} = Account.create_user(%{username: new_username,
email: email,
picture: picture, role: "reguler"})
Guardian.create_token(user)
{:error, :not_found} ->
{:ok, user} = Account.create_user(%{username: username,
email: email,
picture: picture, role: "reguler"})
Guardian.create_token(user)
end
end
defp create_username(username) do
new_username = "#{username}-#{Utility.random_string(6)}"
case Account.get_by_username(new_username) do
{:ok, _user} ->
create_username(username)
{:error, :not_found} ->
new_username
end
end
end