private void App_OnStartup(object sender, StartupEventArgs e) { if (ApplicationDeployment.IsNetworkDeployed && AppDomain.CurrentDomain.SetupInformation.ActivationArguments.ActivationData != null && AppDomain.CurrentDomain.SetupInformation.ActivationArguments.ActivationData.Length > 0) { Arguments = AppDomain.CurrentDomain.SetupInformation.ActivationArguments.ActivationData[0].Split(',').ToList(); } else if (e.Args.Length > 0) { Arguments = e.Args[0].Split(',').ToList(); } else { Arguments = new List <string>(); } if (!AppInitHelper.Initialize()) { return; } TrayIcon = (TaskbarIcon)Resources["TrayIcon"]; AppInitHelper.InitializeExtra(); SystemEvents.SessionSwitch += SystemEventsOnSessionSwitch; SystemEvents.DisplaySettingsChanged += (s, args) => WidgetHelper.RefreshWidgets(); Settings.Default.PropertyChanged += Settings_OnPropertyChanged; UpdateHelper.HandleUpdate(); }
public IActionResult Create(string email, IFormFile file) { // List of messages to return to the client var messages = new List <Message>(); #region application descriptor validations // File with JSON application descriptor is required if (file == null) { messages.Add(new Message(MessageTypeEnum.Error, 0001, new List <string>())); return(BadRequest(messages)); } // Get JObject from input file JObject applicationDescriptorJObject; using (var reader = new StreamReader(file.OpenReadStream())) { // Try to parse file to JObject - only valid JSON files are parsed try { applicationDescriptorJObject = JObject.Parse(reader.ReadToEnd()); } // If parsing was unsuccessfull, return error message containing location of error catch (JsonReaderException e) { messages.Add(new Message(MessageTypeEnum.Error, 0002, new List <string>() { e.Message })); return(BadRequest(messages)); } } var sharedAppInitHelper = new SharedAppInitHelper(); // With successfully parsed JSON file, validate it against schema var schemaValidationMessages = sharedAppInitHelper.ValidateJSONAgainstSchema(applicationDescriptorJObject); // If validation JSON is not valid return errors if (schemaValidationMessages.Count != 0) { return(BadRequest(schemaValidationMessages)); } // Get ApplicationDescriptor class instance from JObject var applicationDescriptor = applicationDescriptorJObject.ToObject <ApplicationDescriptor>(); // LoginApplicationName must be unique var applicationRepository = new ApplicationRepository(context); var applicationModel = applicationRepository.GetByLoginApplicationName(applicationDescriptor.LoginApplicationName); if (applicationModel != null) { messages.Add(new Message(MessageTypeEnum.Error, 0003, new List <string>() { applicationDescriptor.LoginApplicationName })); } // Validate datasets and attributes messages.AddRange(sharedAppInitHelper.ValidateDescriptor(applicationDescriptor)); if (messages.Count != 0) { return(BadRequest(messages)); } #endregion // Set default values to the application descriptor sharedAppInitHelper.SetDefaultDescriptorValues(applicationDescriptor); #region create new application using (var transaction = context.Database.BeginTransaction()) { // Create new application and add it to the database var serializedApplicationDescriptor = JsonConvert.SerializeObject(applicationDescriptor); var newApplication = new ApplicationModel { LoginApplicationName = applicationDescriptor.LoginApplicationName, ApplicationDescriptorJSON = serializedApplicationDescriptor }; applicationRepository.Add(newApplication); // Create new admin account for the application // Random password string newPassword; var minPasswordLength = applicationDescriptor.SystemDatasets.UsersDatasetDescriptor.PasswordAttribute.Min; if (minPasswordLength != null) { newPassword = PasswordHelper.GenerateRandomPassword((int)minPasswordLength); } else { newPassword = PasswordHelper.GenerateRandomPassword(Constants.MinSaferPasswordLength); } // Admin rights var appInitHelper = new AppInitHelper(); var newRights = appInitHelper.GetAdminRights(newApplication, applicationDescriptor); var rightsRepository = new RightsRepository(context); rightsRepository.Add(newRights); var salt = PasswordHelper.GetSalt(); var newUser = new UserModel { Application = newApplication, PasswordHash = PasswordHelper.ComputeHash(salt + newPassword), PasswordSalt = salt, Data = appInitHelper.GetDefaultAdminDataDictionary(applicationDescriptor.SystemDatasets.UsersDatasetDescriptor), Rights = newRights, Language = applicationDescriptor.DefaultLanguage }; var userRepository = new UserRepository(context); userRepository.Add(newUser); // Try to send login details to admin account to email from parametres try { appInitHelper.SendEmailWithCredentials(email, applicationDescriptor.ApplicationName, newApplication.LoginApplicationName, newPassword); } catch { messages.Add(new Message(MessageTypeEnum.Error, 0025, new List <string>() { email })); return(BadRequest(messages)); } // Commit all transaction.Commit(); } // If everythong was ok, save changes to the database context.SaveChangesAsync(); #endregion messages.Add(new Message(MessageTypeEnum.Info, 0026, new List <string>() { applicationDescriptor.ApplicationName, email })); return(Ok(messages)); }