@@ -23,12 +23,9 @@ struct TokenLoginParams {
2323}
2424
2525async fn developer_from_token (
26- client : & github:: GithubClient ,
2726 pool : & mut PgConnection ,
28- token : String
27+ user : serde_json :: Value
2928) -> Result < Uuid , Option < ApiError > > {
30- let user = client. get_user ( token) . await ?;
31-
3229 let id = user. get ( "id" ) . ok_or ( None ) ?. as_i64 ( ) . unwrap ( ) ;
3330 let username = user. get ( "login" ) . ok_or ( None ) ?;
3431
@@ -169,9 +166,10 @@ pub async fn poll_github_login(
169166 . await
170167 . or ( Err ( ApiError :: TransactionError ) ) ?;
171168
169+ let user = client. get_user ( & token) . await . map_err ( |_| ApiError :: InternalError ) ?;
172170 let mut transaction = pool. begin ( ) . await . or ( Err ( ApiError :: TransactionError ) ) ?;
173171
174- let token = match developer_from_token ( & client , & mut transaction, token ) . await {
172+ let token = match developer_from_token ( & mut transaction, user ) . await {
175173 Ok ( t) => t,
176174 Err ( e) => {
177175 if let Some ( e) = e {
@@ -196,15 +194,18 @@ pub async fn github_token_login(
196194 json : web:: Json < TokenLoginParams > ,
197195 data : web:: Data < AppData > ,
198196) -> Result < impl Responder , ApiError > {
199- let mut pool = data. db . acquire ( ) . await . or ( Err ( ApiError :: DbAcquireError ) ) ?;
200- let mut transaction = pool. begin ( ) . await . or ( Err ( ApiError :: TransactionError ) ) ?;
201-
202197 let client = github:: GithubClient :: new (
203198 data. github_client_id . to_string ( ) ,
204199 data. github_client_secret . to_string ( ) ,
205200 ) ;
206201
207- let token = match developer_from_token ( & client, & mut transaction, json. token . to_string ( ) ) . await {
202+ let user = client. get_user ( & json. token ) . await
203+ . map_err ( |_| ApiError :: BadRequest ( format ! ( "Invalid access token: {}" , json. token) ) ) ?;
204+
205+ let mut pool = data. db . acquire ( ) . await . or ( Err ( ApiError :: DbAcquireError ) ) ?;
206+ let mut transaction = pool. begin ( ) . await . or ( Err ( ApiError :: TransactionError ) ) ?;
207+
208+ let token = match developer_from_token ( & mut transaction, user) . await {
208209 Ok ( t) => t,
209210
210211 Err ( e) => {
0 commit comments