public async Task <ActionResult <CurrentUserDto> > UsosPinAuth(UsosAuthDto usosAuth) { if (usosAuth.RequestToken == null || usosAuth.TokenSecret == null || usosAuth.OAuthVerifier == null) { return(BadRequest("Missing parameters")); } var accessToken = _usosApi.GetAccessTokenData(usosAuth); var usosUser = _usosApi.GetUsosUserData(accessToken.Item1, accessToken.Item2); if (usosUser == null) { return(Unauthorized("Wrong PIN")); } var currentUser = usosUser.Adapt <CurrentUserDto>(); var dbUser = await _context.Users.FirstOrDefaultAsync(x => x.Id == currentUser.Id.Value); if (dbUser != null) { currentUser.Id = dbUser.Id; currentUser.UserRole = dbUser.UserRole; } else { var newUser = currentUser.Adapt <User>(); newUser.UserRole = usosUser.StaffStatus == StaffStatus.Lecturer ? UserRole.Lecturer : usosUser.StudentStatus == StudentStatus.ActiveStudent ? UserRole.Student : throw new ArgumentOutOfRangeException("Incorrent user status"); if (_relational) { await using (var transaction = await _context.Database.BeginTransactionAsync()) { await _context.Database.ExecuteSqlRawAsync("SET IDENTITY_INSERT [dbo].[Users] ON"); await _context.Users.AddAsync(newUser); await _context.SaveChangesAsync(); await _context.Database.ExecuteSqlRawAsync("SET IDENTITY_INSERT [dbo].[Users] OFF"); await transaction.CommitAsync(); } } else { await _context.Users.AddAsync(newUser); await _context.SaveChangesAsync(); } currentUser.Id = newUser.Id; var usosSemesters = _usosApi.GetUserCourses(accessToken.Item1, accessToken.Item2, newUser); await UpdateSemAndCourseData(usosSemesters, newUser); } SetupToken(currentUser, accessToken.Item1, accessToken.Item2); return(Ok(currentUser)); }
private async void Button_UsosAuth(object sender, EventArgs e) { using (UserDialogs.Instance.Loading("Loading")) { usosAuth = await SystemApi.GetUsosAuthData(); await Launcher.OpenAsync(new Uri(usosAuth.UsosAuthUrl)); } UsosPin.IsVisible = true; ConfirmPinButton.IsVisible = true; }
public static async Task <CurrentUserDto> UsosAuth(UsosAuthDto usosAuthDto) { var result = await UsersClient.UsersUsosPinAuthPostAsync(usosAuthDto); ApiConfiguration.AddDefaultHeader("Authorization", "Bearer " + result.Token); UserHelper.User = result; await UserHelper.SaveUser(result); await UserHelper.UpdateCourseNotificationSubscribtions(); return(result); }
public (string, string) GetAccessTokenData(UsosAuthDto usosAuth) { Client.Authenticator = OAuth1Authenticator .ForAccessToken(ConsumerKey, ConsumerSecret, usosAuth.RequestToken, usosAuth.TokenSecret, usosAuth.OAuthVerifier); var request = new RestRequest("oauth/access_token"); var result = Client.Execute(request); var requestActionTokenResponseParameters = HttpUtility.ParseQueryString(result.Content); var accessToken = requestActionTokenResponseParameters["oauth_token"]; var accessSecret = requestActionTokenResponseParameters["oauth_token_secret"]; return(accessToken, accessSecret); }