implement github oauth and display user's name and avatar from it
This commit is contained in:
@@ -6,12 +6,6 @@ defmodule Entendu.Application do
|
||||
use Application
|
||||
|
||||
def start(_type, _args) do
|
||||
# topologies = [
|
||||
# chat: [
|
||||
# strategy: Cluster.Strategy.Gossip
|
||||
# ]
|
||||
# ]
|
||||
|
||||
topologies = [
|
||||
k8s_entendu: [
|
||||
strategy: Elixir.Cluster.Strategy.Kubernetes.DNS,
|
||||
|
@@ -0,0 +1,47 @@
|
||||
defmodule Entendu.UserFromAuth do
|
||||
@moduledoc """
|
||||
Retrieve the user information from an auth request
|
||||
"""
|
||||
require Logger
|
||||
require Jason
|
||||
|
||||
alias Ueberauth.Auth
|
||||
|
||||
def find_or_create(%Auth{} = auth) do
|
||||
{:ok, basic_info(auth)}
|
||||
end
|
||||
|
||||
# github does it this way
|
||||
defp avatar_from_auth(%{info: %{urls: %{avatar_url: image}}}), do: image
|
||||
|
||||
# facebook does it this way
|
||||
defp avatar_from_auth(%{info: %{image: image}}), do: image
|
||||
|
||||
# default case if nothing matches
|
||||
defp avatar_from_auth(auth) do
|
||||
Logger.warn("#{auth.provider} needs to find an avatar URL!")
|
||||
Logger.debug(Jason.encode!(auth))
|
||||
nil
|
||||
end
|
||||
|
||||
defp basic_info(auth) do
|
||||
IO.inspect(auth)
|
||||
%{id: auth.uid, name: name_from_auth(auth), avatar: avatar_from_auth(auth)}
|
||||
end
|
||||
|
||||
defp name_from_auth(auth) do
|
||||
if auth.info.name do
|
||||
auth.info.name
|
||||
else
|
||||
name =
|
||||
[auth.info.first_name, auth.info.last_name]
|
||||
|> Enum.filter(&(&1 != nil and &1 != ""))
|
||||
|
||||
if Enum.empty?(name) do
|
||||
auth.info.nickname
|
||||
else
|
||||
Enum.join(name, " ")
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
|
Reference in New Issue
Block a user