@@ -22,8 +22,8 @@ defmodule Guard.Invitees do
2222 end
2323 end
2424
25- def inject_github_uid ( invitee , inviter_id ) do
26- case extract_github_uid ( invitee . provider . login , inviter_id ) do
25+ defp inject_github_uid ( invitee , inviter_id ) do
26+ case extract_provider_uid ( invitee . provider . login , inviter_id , "github" ) do
2727 { :ok , uid } ->
2828 provider = Map . merge ( invitee . provider , % { uid: uid } )
2929 { :ok , Map . merge ( invitee , % { provider: provider } ) }
@@ -33,8 +33,8 @@ defmodule Guard.Invitees do
3333 end
3434 end
3535
36- def inject_gitlab_uid ( invitee , inviter_id ) do
37- case extract_gitlab_uid ( invitee . provider . login , inviter_id ) do
36+ defp inject_gitlab_uid ( invitee , inviter_id ) do
37+ case extract_provider_uid ( invitee . provider . login , inviter_id , "gitlab" ) do
3838 { :ok , uid } ->
3939 provider = Map . merge ( invitee . provider , % { uid: uid } )
4040 { :ok , Map . merge ( invitee , % { provider: provider } ) }
@@ -44,51 +44,31 @@ defmodule Guard.Invitees do
4444 end
4545 end
4646
47- defp extract_github_uid ( login , inviter ) do
48- case get_github_uid ( login ) do
47+ defp extract_provider_uid ( login , inviter , provider ) do
48+ case get_provider_uid ( login , provider ) do
4949 { :ok , uid } when not is_nil ( uid ) ->
5050 { :ok , uid }
5151
5252 _ ->
53- extract_uid_from_github ( login , inviter )
53+ extract_uid_from_provider ( login , inviter , provider )
5454 end
5555 end
5656
57- defp extract_gitlab_uid ( login , inviter ) do
58- case get_gitlab_uid ( login ) do
59- { :ok , uid } when not is_nil ( uid ) ->
60- { :ok , uid }
61-
62- _ ->
63- extract_uid_from_gitlab ( login , inviter )
64- end
65- end
66-
67- defp extract_uid_from_github ( "" , _inviter_id ) , do: { :error , "empty login not allowed" }
57+ defp extract_uid_from_provider ( "" , _inviter_id , _ ) , do: { :error , "empty login not allowed" }
6858
69- defp extract_uid_from_github ( login , inviter_id ) do
70- with { :ok , resource } <- resource ( login , "github" ) ,
71- { :ok , api_token } <- get_api_token ( inviter_id , "github" ) ,
72- { :ok , http_response } <- http_call ( resource , api_token , "github" ) do
73- extract_uid ( login , http_response )
59+ defp extract_uid_from_provider ( login , inviter_id , provider ) do
60+ with { :ok , resource } <- resource ( login , provider ) ,
61+ { :ok , rha } <- maybe_get_rha ( inviter_id , provider ) ,
62+ { :ok , api_token } <- maybe_get_api_token ( rha , provider ) ,
63+ { :ok , http_response } <- http_call ( resource , api_token , provider ) do
64+ extract_uid ( login , http_response , provider )
7465 else
7566 e ->
76- Logger . error ( "Error extracting github uid for #{ inspect ( login ) } : #{ inspect ( e ) } " )
77- { :error , "error finding Github ID for #{ login } " }
78- end
79- end
80-
81- defp extract_uid_from_gitlab ( "" , _inviter_id ) , do: { :error , "empty login not allowed" }
67+ Logger . error (
68+ "[Invitees] Error extracting #{ provider } uid for #{ inspect ( login ) } : #{ inspect ( e ) } "
69+ )
8270
83- defp extract_uid_from_gitlab ( login , inviter_id ) do
84- with { :ok , resource } <- resource ( login , "gitlab" ) ,
85- { :ok , api_token } <- get_api_token ( inviter_id , "gitlab" ) ,
86- { :ok , http_response } <- http_call ( resource , api_token , "gitlab" ) do
87- extract_uid ( login , http_response )
88- else
89- e ->
90- Logger . error ( "Error extracting gitlab uid for #{ inspect ( login ) } : #{ inspect ( e ) } " )
91- { :error , "error finding Gitlab ID for #{ login } " }
71+ { :error , "error finding #{ provider } ID for #{ login } " }
9272 end
9373 end
9474
@@ -100,45 +80,66 @@ defmodule Guard.Invitees do
10080 |> return_ok_tuple ( )
10181 end
10282
103- defp get_api_token ( inviter_id , "github" ) do
104- Guard.FrontRepo.RepoHostAccount . get_github_token ( inviter_id )
105- end
83+ defp maybe_get_rha ( inviter_id , provider ) do
84+ case Guard.FrontRepo.RepoHostAccount . get_for_user_by_repo_host ( inviter_id , provider ) do
85+ { :ok , rha } ->
86+ { :ok , rha }
10687
107- defp get_api_token ( inviter_id , "gitlab" ) do
108- case Guard.FrontRepo.RepoHostAccount . get_gitlab_token ( inviter_id ) do
109- { :ok , { token , _expires_at } } -> { :ok , token }
110- _ -> { :error , "error finding Gitlab token for #{ inviter_id } " }
88+ e ->
89+ Logger . warning (
90+ "[Invitees] Missing RHA for inviter #{ inviter_id } and #{ provider } , #{ inspect ( e ) } "
91+ )
92+
93+ { :ok , nil }
11194 end
11295 end
11396
114- defp get_api_token ( _ , provider ) do
115- { :error , "Provider #{ provider } not supported for token extraction" }
116- end
97+ defp maybe_get_api_token ( nil , _ ) , do: { :ok , nil }
98+
99+ defp maybe_get_api_token ( rha , provider ) do
100+ case get_api_token ( rha , provider ) do
101+ { :ok , { token , _expires_at } } ->
102+ { :ok , token }
103+
104+ e ->
105+ Logger . warning (
106+ "[Invitees] Missing token for rha #{ inspect ( rha ) } and #{ provider } , #{ inspect ( e ) } "
107+ )
117108
118- defp get_github_uid ( login ) do
119- Guard.FrontRepo.RepoHostAccount . get_uid_by_login ( login , "github" )
109+ { :ok , nil }
110+ end
120111 end
121112
122- defp get_gitlab_uid ( login ) do
123- Guard.FrontRepo.RepoHostAccount . get_uid_by_login ( login , "gitlab" )
113+ defp get_api_token ( rha , "github" ) do
114+ Guard.FrontRepo.RepoHostAccount . get_github_token ( rha )
124115 end
125116
126- defp http_call ( resource , api_token , "github" ) do
127- resource |> HTTPoison . get ( [ { "Authorization" , "Token #{ api_token } " } ] )
117+ defp get_api_token ( _ , _ ) , do: { :ok , { "" , nil } }
118+
119+ defp get_provider_uid ( login , provider ) do
120+ Guard.FrontRepo.RepoHostAccount . get_uid_by_login ( login , provider )
128121 end
129122
130- defp http_call ( resource , api_token , "gitlab" ) do
131- resource |> HTTPoison . get ( [ { "PRIVATE-TOKEN " , api_token } ] )
123+ defp http_call ( resource , token , "github" ) when is_binary ( token ) and token != "" do
124+ HTTPoison . get ( resource , [ { "Authorization " , "Token #{ token } " } ] )
132125 end
133126
134- defp extract_uid ( _ , % { status_code: 200 , body: body } ) do
127+ defp http_call ( resource , _ , _ ) , do: HTTPoison . get ( resource , [ ] )
128+
129+ defp extract_uid ( _ , % { status_code: 200 , body: body } , _ ) do
135130 with { :ok , body } <- body |> Jason . decode ( ) ,
136- { :ok , id } <- body |> Map . fetch ( "id" ) ,
131+ { :ok , id } <- fetch_id ( body ) ,
137132 do: id |> Integer . to_string ( ) |> return_ok_tuple ( )
138133 end
139134
140- defp extract_uid ( login , % { status_code: status_code } ) ,
135+ defp extract_uid ( login , % { status_code: status_code } , _ ) ,
141136 do: { :error , "error finding #{ login } : #{ status_code } " }
142137
138+ defp fetch_id ( % { "id" => id } ) , do: { :ok , id }
139+
140+ defp fetch_id ( [ % { "id" => id } | _rest ] ) , do: { :ok , id }
141+
142+ defp fetch_id ( body ) , do: { :error , "error finding id in the body #{ inspect ( body ) } " }
143+
143144 defp return_ok_tuple ( value ) , do: { :ok , value }
144145end
0 commit comments