Fakultas Ilmu Komputer UI

Skip to content
Snippets Groups Projects
Select Git revision
  • d1a6605ab676139d46e683b82c16710ba060c7b1
  • master default protected
  • v2.0.0
  • v1.1.1
  • v1.1.0
  • v1.0.0
6 results

stack.yaml.lock

Blame
  • 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