Skip to content

Commit

Permalink
Fix Github user OAuth connection
Browse files Browse the repository at this point in the history
  • Loading branch information
joshsmith committed Nov 9, 2017
1 parent 8f829ff commit ef0395d
Show file tree
Hide file tree
Showing 6 changed files with 45 additions and 3 deletions.
15 changes: 15 additions & 0 deletions lib/code_corps/accounts/accounts.ex
Original file line number Diff line number Diff line change
Expand Up @@ -94,6 +94,7 @@ defmodule CodeCorps.Accounts do

multi =
Multi.new
|> Multi.run(:existing_user, fn _ -> params |> update_existing_user_if_any() end)
|> Multi.update(:user, changeset)
|> Multi.run(:installations, fn %{user: %User{} = user} -> user |> associate_installations() end)
|> Multi.run(:tasks, fn %{user: %User{} = user} -> user |> associate_tasks() end)
Expand All @@ -108,6 +109,20 @@ defmodule CodeCorps.Accounts do
end
end

defp update_existing_user_if_any(%{github_id: github_id}) do
case Repo.get_by(User, github_id: github_id, sign_up_context: "github") do
%User{} = existing_user -> existing_user |> do_update_existing_user()
_ -> {:ok, nil}
end
end

defp do_update_existing_user(%User{github_id: github_id} = user) do
params = %{github_id: nil, github_id_was: github_id}
user
|> Changesets.dissociate_github_user_changeset(params)
|> Repo.update()
end

defp upload_github_photo_async(%User{cloudinary_public_id: nil} = user) do
TaskSupervisor.start_child(:background_processor, fn -> upload_github_photo(user) end)
end
Expand Down
6 changes: 6 additions & 0 deletions lib/code_corps/accounts/changesets.ex
Original file line number Diff line number Diff line change
Expand Up @@ -50,6 +50,12 @@ defmodule CodeCorps.Accounts.Changesets do
|> unique_github_constraint()
end

def dissociate_github_user_changeset(struct, %{} = params) do
struct
|> Changeset.cast(params, [:github_id, :github_id_was])
|> unique_github_constraint()
end

@spec ensure_email_without_overwriting(Changeset.t, map) :: Changeset.t
defp ensure_email_without_overwriting(%Changeset{} = changeset, %{"email" => new_email} = _params) do
case changeset |> Changeset.get_field(:email) do
Expand Down
1 change: 1 addition & 0 deletions lib/code_corps/model/user.ex
Original file line number Diff line number Diff line change
Expand Up @@ -27,6 +27,7 @@ defmodule CodeCorps.User do
field :github_avatar_url, :string
field :github_email, :string
field :github_id, :integer
field :github_id_was, :integer
field :github_username, :string
field :last_name, :string
field :password, :string, virtual: true
Expand Down
9 changes: 9 additions & 0 deletions priv/repo/migrations/20171109231538_add_github_id_was.exs
Original file line number Diff line number Diff line change
@@ -0,0 +1,9 @@
defmodule CodeCorps.Repo.Migrations.AddGithubIdWas do
use Ecto.Migration

def change do
alter table(:users) do
add :github_id_was, :integer
end
end
end
5 changes: 3 additions & 2 deletions priv/repo/structure.sql
Original file line number Diff line number Diff line change
Expand Up @@ -1745,7 +1745,8 @@ CREATE TABLE users (
github_username character varying(255),
github_id integer,
type character varying(255) DEFAULT 'user'::character varying,
github_user_id bigint
github_user_id bigint,
github_id_was integer
);


Expand Down Expand Up @@ -3867,5 +3868,5 @@ ALTER TABLE ONLY users
-- PostgreSQL database dump complete
--

INSERT INTO "schema_migrations" (version) VALUES (20160723215749), (20160804000000), (20160804001111), (20160805132301), (20160805203929), (20160808143454), (20160809214736), (20160810124357), (20160815125009), (20160815143002), (20160816020347), (20160816034021), (20160817220118), (20160818000944), (20160818132546), (20160820113856), (20160820164905), (20160822002438), (20160822004056), (20160822011624), (20160822020401), (20160822044612), (20160830081224), (20160830224802), (20160911233738), (20160912002705), (20160912145957), (20160918003206), (20160928232404), (20161003185918), (20161019090945), (20161019110737), (20161020144622), (20161021131026), (20161031001615), (20161121005339), (20161121014050), (20161121043941), (20161121045709), (20161122015942), (20161123081114), (20161123150943), (20161124085742), (20161125200620), (20161126045705), (20161127054559), (20161205024856), (20161207112519), (20161209192504), (20161212005641), (20161214005935), (20161215052051), (20161216051447), (20161218005913), (20161219160401), (20161219163909), (20161220141753), (20161221085759), (20161226213600), (20161231063614), (20170102130055), (20170102181053), (20170104113708), (20170104212623), (20170104235423), (20170106013143), (20170115035159), (20170115230549), (20170121014100), (20170131234029), (20170201014901), (20170201025454), (20170201035458), (20170201183258), (20170220032224), (20170224233516), (20170226050552), (20170228085250), (20170308214128), (20170308220713), (20170308222552), (20170313130611), (20170318032449), (20170318082740), (20170324194827), (20170424215355), (20170501225441), (20170505224222), (20170526095401), (20170602000208), (20170622205732), (20170626231059), (20170628092119), (20170628213609), (20170629183404), (20170630140136), (20170706132431), (20170707213648), (20170711122252), (20170717092127), (20170725060612), (20170727052644), (20170731130121), (20170814131722), (20170913114958), (20170921014405), (20170925214512), (20170925230419), (20170926134646), (20170927100300), (20170928234412), (20171003134956), (20171003225853), (20171006063358), (20171006161407), (20171012215106), (20171012221231), (20171016125229), (20171016125516), (20171016223356), (20171016235656), (20171017235433), (20171019191035), (20171025184225), (20171026010933), (20171027061833), (20171028011642), (20171028173508), (20171030182857), (20171031232023), (20171031234356), (20171101023309), (20171104013543), (20171106045740), (20171106050209), (20171106103153), (20171106200036);
INSERT INTO "schema_migrations" (version) VALUES (20160723215749), (20160804000000), (20160804001111), (20160805132301), (20160805203929), (20160808143454), (20160809214736), (20160810124357), (20160815125009), (20160815143002), (20160816020347), (20160816034021), (20160817220118), (20160818000944), (20160818132546), (20160820113856), (20160820164905), (20160822002438), (20160822004056), (20160822011624), (20160822020401), (20160822044612), (20160830081224), (20160830224802), (20160911233738), (20160912002705), (20160912145957), (20160918003206), (20160928232404), (20161003185918), (20161019090945), (20161019110737), (20161020144622), (20161021131026), (20161031001615), (20161121005339), (20161121014050), (20161121043941), (20161121045709), (20161122015942), (20161123081114), (20161123150943), (20161124085742), (20161125200620), (20161126045705), (20161127054559), (20161205024856), (20161207112519), (20161209192504), (20161212005641), (20161214005935), (20161215052051), (20161216051447), (20161218005913), (20161219160401), (20161219163909), (20161220141753), (20161221085759), (20161226213600), (20161231063614), (20170102130055), (20170102181053), (20170104113708), (20170104212623), (20170104235423), (20170106013143), (20170115035159), (20170115230549), (20170121014100), (20170131234029), (20170201014901), (20170201025454), (20170201035458), (20170201183258), (20170220032224), (20170224233516), (20170226050552), (20170228085250), (20170308214128), (20170308220713), (20170308222552), (20170313130611), (20170318032449), (20170318082740), (20170324194827), (20170424215355), (20170501225441), (20170505224222), (20170526095401), (20170602000208), (20170622205732), (20170626231059), (20170628092119), (20170628213609), (20170629183404), (20170630140136), (20170706132431), (20170707213648), (20170711122252), (20170717092127), (20170725060612), (20170727052644), (20170731130121), (20170814131722), (20170913114958), (20170921014405), (20170925214512), (20170925230419), (20170926134646), (20170927100300), (20170928234412), (20171003134956), (20171003225853), (20171006063358), (20171006161407), (20171012215106), (20171012221231), (20171016125229), (20171016125516), (20171016223356), (20171016235656), (20171017235433), (20171019191035), (20171025184225), (20171026010933), (20171027061833), (20171028011642), (20171028173508), (20171030182857), (20171031232023), (20171031234356), (20171101023309), (20171104013543), (20171106045740), (20171106050209), (20171106103153), (20171106200036), (20171109231538);

12 changes: 11 additions & 1 deletion test/lib/code_corps/accounts/accounts_test.exs
Original file line number Diff line number Diff line change
Expand Up @@ -68,17 +68,27 @@ defmodule CodeCorps.AccountsTest do
describe "update_from_github_oauth/3" do
test "updates proper user from provided payload" do
user = insert(:user)
params = TestHelpers.load_endpoint_fixture("user")
%{"id" => github_id} = params = TestHelpers.load_endpoint_fixture("user")
token = "random_token"

{:ok, %User{} = user_for_github_user} =
params
|> Accounts.create_from_github()

{:ok, %User{} = user} =
user
|> Accounts.update_from_github_oauth(params, token)

wait_for_supervisor()

user_for_github_user = Repo.get(User, user_for_github_user.id)

assert user_for_github_user.sign_up_context == "github"
assert user_for_github_user.github_id_was == github_id
refute user_for_github_user.github_id
assert user.id
assert user.github_auth_token == token
assert user.github_id == github_id
assert user.sign_up_context == "default"
assert user.type == "user"
end
Expand Down

0 comments on commit ef0395d

Please sign in to comment.