Exemplo n.º 1
0
        public async Task <string> Execute(IEnumerable <string> audiences, IEnumerable <AddPermissionParameter> addPermissionParameters)
        {
            if (audiences == null)
            {
                throw new ArgumentNullException(nameof(audiences));
            }

            if (addPermissionParameters == null)
            {
                throw new ArgumentNullException(nameof(addPermissionParameters));
            }

            var json = addPermissionParameters == null ? string.Empty : JsonConvert.SerializeObject(addPermissionParameters);

            _umaServerEventSource.StartAddPermission(json);
            await CheckAddPermissionParameter(addPermissionParameters);

            var ticketLifetimeInSeconds = await _configurationService.GetTicketLifeTime();

            var ticket = new Ticket
            {
                Id                 = Guid.NewGuid().ToString(),
                Audiences          = audiences,
                CreateDateTime     = DateTime.UtcNow,
                ExpiresIn          = ticketLifetimeInSeconds,
                ExpirationDateTime = DateTime.UtcNow.AddSeconds(ticketLifetimeInSeconds)
            };
            var ticketLines = new List <TicketLine>();

            foreach (var addPermissionParameter in addPermissionParameters)
            {
                ticketLines.Add(new TicketLine
                {
                    Id            = Guid.NewGuid().ToString(),
                    Scopes        = addPermissionParameter.Scopes,
                    ResourceSetId = addPermissionParameter.ResourceSetId
                });
            }

            ticket.Lines = ticketLines;
            if (!await _ticketStore.AddAsync(ticket))
            {
                throw new BaseUmaException(ErrorCodes.InternalError, ErrorDescriptions.TheTicketCannotBeInserted);
            }

            _umaServerEventSource.FinishAddPermission(json);
            return(ticket.Id);
        }