// POST: api/applicationclients
        public async Task <ActionResult <ApplicationClientDto> > Post(
            [FromBody] ApplicationClientForCreationDto clientForCreationDto,
            [FromHeader(Name = "Accept")] string mediaType)
        {
            var response = await this.businessLogic.CreateApplicationClient(clientForCreationDto, mediaType);

            if (!response.IsSuccessful)
            {
                return(BadRequest(new { message = response.ErrorMessage }));
            }
            return(CreatedAtRoute("GetApplicationClient",
                                  new { id = response.Result["Id"] },
                                  response.Result));
        }
Example #2
0
        public async Task <GenericResponse <IDictionary <string, object> > > CreateApplicationClient(ApplicationClientForCreationDto applicationClient, string mediaType)
        {
            try
            {
                if (!MediaTypeHeaderValue.TryParse(mediaType,
                                                   out MediaTypeHeaderValue parsedMediaType))
                {
                    return(GenericResponseBuilder.NoSuccess <IDictionary <string, object> >(null, "Wrong media type"));
                }

                var regex = new Regex("^[a-zA-Z0-9 ]*$");
                if (!regex.IsMatch(applicationClient.Name))
                {
                    return(GenericResponseBuilder.NoSuccess <IDictionary <string, object> >(null, "Special characters are not allowed in the client name."));
                }

                var client = await this.dataService.ApplicationClients.FindByNameAsync(applicationClient.Name);

                if (client != null)
                {
                    return(GenericResponseBuilder.NoSuccess <IDictionary <string, object> >(null, string.Format("Client already exits with name: {0}", applicationClient.Name)));
                }

                var applicationClientEntity = this.mapper.Map <ApplicationClient>(applicationClient);
                CreateClientSecret(applicationClientEntity);

                this.dataService.ApplicationClients.Create(applicationClientEntity);
                await this.dataService.CompleteAsync();

                var clientToReturn = this.mapper.Map <ApplicationClientDto>(applicationClientEntity)
                                     .ShapeData()
                                     as IDictionary <string, object>;

                var includeLinks = parsedMediaType.SubTypeWithoutSuffix
                                   .EndsWith("hateoas", StringComparison.InvariantCultureIgnoreCase);
                if (includeLinks)
                {
                    var links = CreateLinksForApplicationClient(applicationClientEntity.Id);
                    clientToReturn.Add("links", links);
                }

                return(GenericResponseBuilder.Success <IDictionary <string, object> >(clientToReturn));
            }
            catch (Exception ex)
            {
                logger.LogError(string.Format("Error in BLL - CreateApplicationClient. {0}", ex.Message));
                return(GenericResponseBuilder.NoSuccess <IDictionary <string, object> >(null, ex.Message.ToString()));
            }
        }