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()); }
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)); } }
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)); }
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); }