54 lines
1.9 KiB
Elixir
54 lines
1.9 KiB
Elixir
defmodule LpWeb.GitController do
|
|
@client_id Application.fetch_env!(:lp, :client_id)
|
|
@client_secret Application.fetch_env!(:lp, :client_secret)
|
|
use LpWeb, :controller
|
|
# @data "/priv/secret/github_credentials" |> File.stream! |> Enum.to_list
|
|
|
|
def index(conn, _params) do
|
|
render(conn, "git.html")
|
|
end
|
|
def show(conn, _params) do
|
|
html(conn,"")
|
|
end
|
|
def oauth(conn, %{"code" => code}) do
|
|
#some persistance side effect
|
|
# persist(code) access_token = Github.Oauth2.Client.access_token!(
|
|
config: [client_id: @client_id, client_secret: @client_secret],
|
|
params: [code: code]
|
|
)
|
|
|
|
github_client = %Github.Client{access_token: access_token}
|
|
|
|
%{"login" => login} = github_client |> Github.Users.find!() |> Map.fetch!(:body)
|
|
[%{"email" => email} | _] = github_client |> Github.Users.Emails.list!() |> Map.fetch!(:body)
|
|
render(conn, "oauth2.html", [login: login, email: email])
|
|
# redirect(conn, "git.html")
|
|
# html(conn,"")
|
|
|
|
end
|
|
|
|
# ___ example from github
|
|
# def github_callback(conn, %{"code" => code}) do
|
|
# access_token = Github.Oauth2.Client.access_token!(
|
|
# config: [client_id: @client_id, client_secret: @client_secret],
|
|
# params: [code: code]
|
|
# )
|
|
|
|
# github_client = %Github.Client{access_token: access_token}
|
|
|
|
# %{"login" => login} = github_client |> Github.Users.find!() |> Map.fetch!(:body)
|
|
# [%{"email" => email} | _] = github_client |> Github.Users.Emails.list!() |> Map.fetch!(:body)
|
|
# ...
|
|
# end
|
|
|
|
# ___
|
|
|
|
def github(conn, _params) do
|
|
authorize_url = Github.Oauth2.Client.authorize_url!(
|
|
# config: [client_id: Application.fetch_env!(:lp, :client_id), client_secret: Application.fetch_env!(:lp, :client_secret)],
|
|
config: [client_id: @client_id, client_secret: @client_secret],
|
|
scope: "user:email"
|
|
)
|
|
conn |> redirect(external: authorize_url)
|
|
end
|
|
end
|