Beispiel #1
0
        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);
        }
Beispiel #4
0
        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);
        }