Ejemplo n.º 1
0
        public async Task <IActionResult> Exchange(OpenIdConnectRequest request)
        {
            Debug.Assert(request.IsTokenRequest(),
                         "The OpenIddict binder for ASP.NET Core MVC is not registered. " +
                         "Make sure services.AddOpenIddict().AddMvcBinders() is correctly called.");

            if (request.IsPasswordGrantType())
            {
                var user = await _userManager.FindByNameAsync(request.Username);

                await _activityLogService.AddActivityAsync(request.Username, "User request for login token", LogLevelType.INFO.Id, null);

                if (user == null)
                {
                    return(BadRequest(new OpenIdConnectResponse
                    {
                        Error = OpenIdConnectConstants.Errors.InvalidGrant,
                        ErrorDescription = "The username/password couple is invalid."
                    }));
                }

                // Validate the username/password parameters and ensure the account is not locked out.
                var result = await _signInManager.CheckPasswordSignInAsync(user, request.Password, lockoutOnFailure : true);

                if (!result.Succeeded)
                {
                    await _activityLogService.AddActivityAsync(user.UserName, "Invalid password entered", LogLevelType.ERROR.Id, null);

                    return(BadRequest(new OpenIdConnectResponse
                    {
                        Error = OpenIdConnectConstants.Errors.InvalidGrant,
                        ErrorDescription = "The username/password couple is invalid."
                    }));
                }

                // Create a new authentication ticket.
                var ticket = await CreateTicketAsync(request, user);

                await _activityLogService.AddActivityAsync(user.UserName, "User new authentication ticket has been provided", LogLevelType.SUCCESS.Id, null);

                return(SignIn(ticket.Principal, ticket.Properties, ticket.AuthenticationScheme));
            }

            else if (request.IsAuthorizationCodeGrantType() || request.IsRefreshTokenGrantType())
            {
                // Retrieve the claims principal stored in the authorization code/refresh token.
                var info = await HttpContext.AuthenticateAsync(OpenIdConnectServerDefaults.AuthenticationScheme);

                // Retrieve the user profile corresponding to the authorization code/refresh token.
                // Note: if you want to automatically invalidate the authorization code/refresh token
                // when the user password/roles change, use the following line instead:
                // var user = _signInManager.ValidateSecurityStampAsync(info.Principal);
                var user = await _userManager.GetUserAsync(info.Principal);

                if (user == null)
                {
                    return(BadRequest(new OpenIdConnectResponse
                    {
                        Error = OpenIdConnectConstants.Errors.InvalidGrant,
                        ErrorDescription = "The token is no longer valid."
                    }));
                }

                // Ensure the user is still allowed to sign in.
                if (!await _signInManager.CanSignInAsync(user))
                {
                    await _activityLogService.AddActivityAsync(user.UserName, "The user is no longer allowed to sign in.", LogLevelType.ERROR.Id, null);

                    return(BadRequest(new OpenIdConnectResponse
                    {
                        Error = OpenIdConnectConstants.Errors.InvalidGrant,
                        ErrorDescription = "The user is no longer allowed to sign in."
                    }));
                }

                // Create a new authentication ticket, but reuse the properties stored in the
                // authorization code/refresh token, including the scopes originally granted.
                var ticket = await CreateTicketAsync(request, user, info.Properties);

                await _activityLogService.AddActivityAsync(user.UserName, "User new authentication ticket has been provided (resused)", LogLevelType.SUCCESS.Id, null);

                return(SignIn(ticket.Principal, ticket.Properties, ticket.AuthenticationScheme));
            }

            return(BadRequest(new OpenIdConnectResponse
            {
                Error = OpenIdConnectConstants.Errors.UnsupportedGrantType,
                ErrorDescription = "The specified grant type is not supported."
            }));
        }
Ejemplo n.º 2
0
        public async Task <IActionResult> Upload()
        {
            // admin and managers can upload files
            bool hasPermission = await userHasRole("Admin") || await userHasRole("Manager");

            if (!hasPermission)
            {
                return(BadRequest());
            }

            ApplicationUser user = await _userManager.GetUserAsync(User);

            IFormCollection   requestForm       = Request.Form;
            FileUploadRequest fileUploadRequest = new FileUploadRequest();
            long fileSize = 0;

            fileUploadRequest.File = requestForm.Files.FirstOrDefault();
            var dict = requestForm.ToDictionary(x => x.Key, x => x.Value.ToString());

            var dir              = dict["dir"];
            var uploadForGroup   = dict["uploadForGroup"];
            var uploadAsCategory = dict["uploadAsCategory"];
            var description      = dict["description"];

            fileUploadRequest.TargertTargetDirectory = dir;
            fileUploadRequest.Category    = Int32.Parse(uploadAsCategory);
            fileUploadRequest.Group       = Int32.Parse(uploadForGroup);
            fileUploadRequest.Description = description;

            var fileId = Guid.NewGuid().ToString();

            string filePath = GetTargetFilePath(fileUploadRequest.Group, user.Id, fileId + Path.GetExtension(fileUploadRequest.File.FileName));

            using (FileStream fileStream = new FileStream(filePath, FileMode.Create))
            {
                await fileUploadRequest.File.CopyToAsync(fileStream);

                fileSize = fileStream.Length;
            }

            int?groupId = null;

            if (fileUploadRequest.Group > 0)
            {
                groupId = fileUploadRequest.Group;
            }

            int?categoryId = null;

            if (fileUploadRequest.Category > 0)
            {
                categoryId = fileUploadRequest.Category;
            }

            StoredFile storedFile = new StoredFile
            {
                FileSize          = fileSize,
                ApplicationUserId = user.Id,
                Name           = fileUploadRequest.File.FileName,
                FilePath       = filePath,
                FileCategoryId = categoryId,
                GroupId        = groupId,
                ParentDirPath  = dir,
                Description    = description
            };

            _context.StoredFiles.Add(storedFile);
            _context.SaveChanges();

            await _activityLogService.AddActivityAsync(user.UserName, "Uploaded : " + fileUploadRequest.File.FileName, LogLevelType.INFO.Id, storedFile.Id);

            JObject o = new JObject
            {
                { "fileId", storedFile.Id },
                { "name", fileUploadRequest.File.FileName },
                { "uploadDate", DateTime.Now },
                { "size", fileSize },
                { "parent", dir },
                { "locked", false }
            };

            return(Json(o));
        }