Example #1
0
        public static bool IsRequestValid(RegisterProgramRequest request, out List <string> errorMessages)
        {
            errorMessages = new List <string>();
            if (request == null)
            {
                errorMessages.Add("Request is null!");
            }
            else
            {
                if (string.IsNullOrWhiteSpace(request.Name))
                {
                    errorMessages.Add("Program name is missing!");
                }
                if (request.TelemetryKey == Guid.Empty)
                {
                    errorMessages.Add("Invalid telemetry key!");
                }
                if (string.IsNullOrWhiteSpace(request.PrimaryAssemblyFileName))
                {
                    errorMessages.Add("Primary assembly name is empty!");
                }
                else
                {
                    if (string.IsNullOrWhiteSpace(Path.GetExtension(request.PrimaryAssemblyFileName)))
                    {
                        errorMessages.Add("Primary assembly name is missing extension!");
                    }
                }
            }

            return(!errorMessages.Any());
        }
Example #2
0
        public async Task <RegisterProgramResponse> Register(RegisterProgramRequest request)
        {
            try
            {
                if (!ApiRequestsValidator.IsRequestValid(request, out List <string> errors))
                {
                    return(new RegisterProgramResponse(new BadRequestException(string.Join(", ", errors))));
                }

                if (await this.Work.Programs.GetByTelemetryKey(request.TelemetryKey).ConfigureAwait(false) != null)
                {
                    return(new RegisterProgramResponse(new BadRequestException($"Use different telemetry key")));
                }

                TelimenaUser user = await this.Work.Users.FirstOrDefaultAsync(x => x.UserName == this.User.Identity.Name).ConfigureAwait(false);

                if (user == null)
                {
                    return(new RegisterProgramResponse(new BadRequestException($"Cannot find user [{this.User.Identity.Name}]")));
                }
                DeveloperTeam developerTeam = user.GetDeveloperAccountsLedByUser().FirstOrDefault();
                if (developerTeam == null)
                {
                    return(new RegisterProgramResponse(new BadRequestException($"Cannot find developer account associated with user [{user.UserName}]")));
                }

                Program program = new Program(request.Name, request.TelemetryKey)
                {
                    Description = request.Description
                };

                ProgramAssembly primaryAss = new ProgramAssembly()
                {
                    Name      = Path.GetFileNameWithoutExtension(request.PrimaryAssemblyFileName),
                    Extension = Path.GetExtension(request.PrimaryAssemblyFileName)
                };

                await this.Work.RegisterProgram(developerTeam, program, primaryAss).ConfigureAwait(false);

                program = await this.Work.Programs.GetByTelemetryKey(request.TelemetryKey).ConfigureAwait(false);

                var url = this.Url?.Link("Default", new { Controller = "ProgramManagement", Action = "Index", telemetryKey = program.TelemetryKey });
                return(new RegisterProgramResponse(program.TelemetryKey, program.DeveloperTeam.PublicId, url));
            }
            catch (Exception ex)
            {
                return(new RegisterProgramResponse(ex));
            }
        }
Example #3
0
        public static async Task <KeyValuePair <string, Guid> > SeedProgramAsync(RegisterProgramController controller, string programName)
        {
            RegisterProgramRequest register = new RegisterProgramRequest
            {
                Name                    = programName,
                TelemetryKey            = Guid.NewGuid(),
                PrimaryAssemblyFileName = programName + ".dll"
            };
            RegisterProgramResponse response = await controller.Register(register).ConfigureAwait(false);

            if (response.Exception != null)
            {
                throw response.Exception;
            }

            return(new KeyValuePair <string, Guid>(programName, response.TelemetryKey));
        }
Example #4
0
        public static bool IsRequestValid(RegisterProgramRequest request, out List <string> errorMessages)
        {
            errorMessages = new List <string>();
            if (request == null)
            {
                errorMessages.Add("Request is null!");
            }
            else
            {
                if (string.IsNullOrWhiteSpace(request.Name))
                {
                    errorMessages.Add("Program name is missing!");
                }

                if (!request.Name.IsUrlFriendly())
                {
                    var properName     = request.Name.MakeUrlFriendly();
                    var properNameHint = "";
                    if (properName != null)
                    {
                        properNameHint = $" Proposed name: {properName}";
                    }
                    errorMessages.Add(
                        $"Program name should only contain letters and numbers or hyphens. Also it needs to begin and end with a letter or digit.{properNameHint}");
                }
                if (request.TelemetryKey == Guid.Empty)
                {
                    errorMessages.Add("Invalid telemetry key!");
                }
                if (string.IsNullOrWhiteSpace(request.PrimaryAssemblyFileName))
                {
                    errorMessages.Add("Primary assembly name is empty!");
                }
                else
                {
                    if (string.IsNullOrWhiteSpace(Path.GetExtension(request.PrimaryAssemblyFileName)))
                    {
                        errorMessages.Add("Primary assembly name is missing extension!");
                    }
                }
            }

            return(!errorMessages.Any());
        }
        public async Task TestRegisterApp()
        {
            Mock <HttpRequestContext> requestContext = await Helpers.SetupUserIntoRequestContext(this.PortalContext, "testDevTeam", "testDev@Email",
                                                                                                 nameof(TestRegisterApp)).ConfigureAwait(false);

            RegisterProgramUnitOfWork unit = new RegisterProgramUnitOfWork(this.TelemetryContext, this.PortalContext);

            RegisterProgramController programsController = new RegisterProgramController(unit)
            {
                RequestContext = requestContext.Object
            };

            RegisterProgramRequest register = new RegisterProgramRequest
            {
                Name                    = Helpers.GetName("MyTestApp"),
                TelemetryKey            = Guid.NewGuid(),
                PrimaryAssemblyFileName = "MyTestApp.dll"
            };
            RegisterProgramResponse response = await programsController.Register(register).ConfigureAwait(false);

            if (response.Exception != null)
            {
                throw response.Exception;
            }

            var prg  = this.PortalContext.Programs.Single(x => x.TelemetryKey == response.TelemetryKey);
            var root = this.TelemetryContext.TelemetryRootObjects.Single(x => x.TelemetryKey == prg.TelemetryKey);

            Assert.AreEqual(prg.Id, root.ProgramId);
            Assert.AreEqual(prg.TelemetryKey, root.TelemetryKey);

            Assert.AreEqual(Helpers.GetName("MyTestApp"), prg.Name);
            Assert.AreEqual(Helpers.GetName("testDevTeam"), prg.DeveloperTeam.Name);
            Assert.AreEqual(Helpers.GetName("testDev@Email"), prg.DeveloperTeam.MainEmail);
            Assert.AreEqual("MyTestApp.dll", prg.PrimaryAssembly.Name + prg.PrimaryAssembly.Extension);
        }