public override CoreServiceResponse <ApplicationRegistration.Application> LimitNotReachedAction() { string ApplicationName = ProcessDescriptor.Application.Name; Organization org = User.Organizations.Where(o => o.Name.Equals(OrganizationName)).FirstOrDefault(); ApplicationRegistration.Application app = CoreRegistryRepository.OneApplicationWhere(c => c.Name == ApplicationName && c.OrganizationId == org.Id); if (app == null) { app = new ApplicationRegistration.Application { Name = ApplicationName, OrganizationId = org.Id }; app = CoreRegistryRepository.Save(app); ProcessDescriptor instance = new ProcessDescriptor { InstanceIdentifier = $"{ClientIpAddress}-{app.Name}-{app.Cuid}" }; app.Instances.Add(instance); app.Machines.Add(new Machine { Name = HostName }); app = CoreApplicationRegistryService.AddApiKey(CoreRegistryRepository, app); return(new CoreServiceResponse <ApplicationRegistration.Application>(app) { Success = true, Message = $"Application {ApplicationName} created" }); } else { return(new CoreServiceResponse <ApplicationRegistration.Application>(app) { Success = true, Message = $"Application {ApplicationName} already registered for the organization {OrganizationName}" }); } }
public virtual CoreServiceResponse RegisterApplication(ProcessDescriptor descriptor) { try { Args.ThrowIfNull(descriptor?.Application?.Name, "descriptor.Application.Name"); Args.ThrowIfNull(descriptor?.Application?.Organization?.Name, "descriptor.Application.Organization.Name"); string organizationName = descriptor.Application.Organization.Name; if (CurrentUser.Equals(UserAccounts.Data.User.Anonymous)) { return(new CoreServiceResponse <ApplicationRegistrationResult> { Success = false, Message = "You must be logged in to do that", Data = new ApplicationRegistrationResult { Status = ApplicationRegistrationStatus.Unauthorized } }); } User user = CoreRegistryRepository.OneUserWhere(c => c.UserName == CurrentUser.UserName); if (user == null) { user = new User() { UserName = CurrentUser.UserName, Email = CurrentUser.Email }; user = CoreRegistryRepository.Save(user); } OrganizationFactory orgEnforcer = new OrganizationFactory(CoreRegistryRepository, user, organizationName); CoreServiceResponse <Organization> response = orgEnforcer.Execute(); if (!response.Success) { return(response); } Organization org = response.TypedData(); ClientApplicationFactory appEnforcer = new ClientApplicationFactory(this, user, organizationName, descriptor); CoreServiceResponse <ApplicationRegistration.Application> appResponse = appEnforcer.Execute(); if (appResponse.Success) { ApplicationRegistration.Application app = appResponse.TypedData(); return(new CoreServiceResponse <ApplicationRegistrationResult>( new ApplicationRegistrationResult { Status = ApplicationRegistrationStatus.Success, ClientId = app.Cuid, ApiKey = app.ApiKeys.First().SharedSecret }) { Success = true }); } return(appResponse); } catch (Exception ex) { Logger.AddEntry("Exception occurred in {0}", ex, nameof(CoreApplicationRegistrationService.RegisterApplication)); return(new CoreServiceResponse { Success = false, Message = ex.Message }); } }
public virtual string GetApplicationApiKey(string applicationClientId, int index) { ApplicationRegistration.Application app = CoreRegistryRepository.OneApplicationWhere(c => c.Cuid == applicationClientId); if (app != null) { return(app.ApiKeys[index]?.SharedSecret); } return(string.Empty); }
public virtual void SetCommonConfiguration(Dictionary <string, string> settings) { lock (_commonLock) { Configuration config = CoreRegistryRepository.GetOneConfigurationWhere(c => c.Name == CommonConfigName && c.ApplicationId == Application.Unknown.Id); config.Settings.Each(s => CoreRegistryRepository.Delete(s)); config.Settings = DictionaryToSettings(settings, config).ToList(); CoreRegistryRepository.Save(config); } }
public virtual int GetActiveApiKeyIndex(IApplicationNameProvider nameProvider) { string clientId = GetApplicationClientId(nameProvider); ActiveApiKeyIndex apiKeyIndex = CoreRegistryRepository.OneActiveApiKeyIndexWhere(c => c.ApplicationCuid == clientId); if (apiKeyIndex != null) { return(apiKeyIndex.Value); } return(0); }
public virtual Dictionary <string, string> GetMachineConfiguration(string machineName, string configurationName = null) { configurationName = configurationName ?? CommonConfigName; Machine machine = CoreRegistryRepository.GetOneMachineWhere(c => c.Name == machineName); Configuration config = machine.Configurations.FirstOrDefault(c => c.Name.Equals(configurationName)); if (config != null) { return(SettingsToDictionary(config.Settings)); } return(new Dictionary <string, string>()); }
public virtual Dictionary <string, string> GetApplicationConfiguration(string applicationName = null, string configurationName = null) { applicationName = applicationName ?? ApplicationName; ValidAppOrDie(applicationName); configurationName = configurationName ?? CommonConfigName; Application application = CoreRegistryRepository.GetOneApplicationWhere(c => c.Name == applicationName); Configuration config = application.Configurations.FirstOrDefault(c => c.Name.Equals(configurationName)); if (config != null) { return(SettingsToDictionary(config.Settings)); } return(new Dictionary <string, string>()); }
public virtual void SetMachineConfiguration(string machineName, Dictionary <string, string> settings, string configurationName = null) { configurationName = configurationName ?? CommonConfigName; Machine machine = CoreRegistryRepository.GetOneMachineWhere(c => c.Name == machineName); lock (Machine.ConfigurationLock) { Configuration config = machine.Configurations.FirstOrDefault(c => c.Name.Equals(configurationName)); if (config == null) { config = new Configuration { Name = configurationName }; config.MachineId = machine.Id; config = CoreRegistryRepository.Save(config); } config.Settings = DictionaryToSettings(settings, config).ToList(); CoreRegistryRepository.Save(config); } }
public virtual void SetApplicationConfiguration(Dictionary <string, string> settings, string applicationName = null, string configurationName = null) { applicationName = applicationName ?? ApplicationName; ValidAppOrDie(applicationName); configurationName = configurationName ?? CommonConfigName; Application application = CoreRegistryRepository.GetOneApplicationWhere(c => c.Name == applicationName); lock (Application.ConfigurationLock) { Configuration config = application.Configurations.FirstOrDefault(c => c.Name.Equals(configurationName)); if (config == null) { config = new Configuration { Name = configurationName }; config.ApplicationId = application.Id; config = CoreRegistryRepository.Save(config); } config.Settings = DictionaryToSettings(settings, config).ToList(); CoreRegistryRepository.Save(config); } }
public virtual CoreServiceResponse RegisterClient(Client client) { try { Args.ThrowIfNullOrEmpty(client?.Secret, nameof(client.Secret)); Args.ThrowIfNullOrEmpty(client?.ServerHost, nameof(client.ServerHost)); Args.ThrowIfNull(client?.Machine, nameof(client.Machine)); Args.ThrowIf(client.Port <= 0, "Server Port not specified"); IUserManager mgr = (IUserManager)UserManager.Clone(); mgr.HttpContext = HttpContext; string clientName = client.ToString(); CoreServiceResponse response = new CoreServiceResponse(); CheckUserNameResponse checkUserName = mgr.IsUserNameAvailable(clientName); if (!(bool)checkUserName.Data) // already exists { response.Success = true; response.Message = "Already registered"; } else { SignUpResponse signupResponse = mgr.SignUp(client.GetPseudoEmail(), clientName, client.Secret.Sha1(), false); if (!signupResponse.Success) { throw new Exception(response.Message); } Machine machine = CoreRegistryRepository.GetOneMachineWhere(m => m.Name == client.MachineName); client = CoreRegistryRepository.GetOneClientWhere(c => c.MachineId == machine.Id && c.MachineName == client.MachineName && c.ApplicationName == client.ApplicationName && c.ServerHost == client.ServerHost && c.Port == client.Port); response = new CoreServiceResponse { Success = true, Data = client.ToDynamicData().ToJson() }; } return(response); } catch (Exception ex) { return(HandleException(ex, nameof(CoreApplicationRegistrationService.RegisterClient))); } }
public virtual Dictionary <string, string> GetCommonConfiguration() { lock (_commonLock) { Configuration config = CoreRegistryRepository.GetOneConfigurationWhere(c => c.Name == CommonConfigName && c.ApplicationId == Application.Unknown.Id); if (config != null) { Dictionary <string, string> result = new Dictionary <string, string>(); foreach (ConfigurationSetting setting in config.Settings) { if (!result.ContainsKey(setting.Key)) { result.Add(setting.Key, setting.Value); } else { Logger.Warning("Configuration ({0}) has duplicate keys specified: {1} with values {2} and {3} using {3}", CommonConfigName, setting.Key, setting.Value, result[setting.Key]); } } return(result); } return(new Dictionary <string, string>()); } }
public virtual ApiKeyInfo SetActiveApiKeyIndex(IApplicationNameProvider nameProvider, int index) { string clientId = GetApplicationClientId(nameProvider); ActiveApiKeyIndex apiKeyIndex = CoreRegistryRepository.OneActiveApiKeyIndexWhere(c => c.ApplicationCuid == clientId); if (apiKeyIndex == null) { apiKeyIndex = new ActiveApiKeyIndex { ApplicationCuid = clientId }; } if (Application?.ApiKeys.Count - 1 > index || index < 0) { throw new IndexOutOfRangeException($"Specified ApiKeyIndex index is invalid: {index}"); } apiKeyIndex.Value = index; CoreRegistryRepository.Save(apiKeyIndex); return(new ApiKeyInfo() { ApiKey = GetApplicationApiKey(clientId, index), ApplicationClientId = clientId }); }
public string GetApplicationClientId(IApplicationNameProvider nameProvider) { ApplicationRegistration.Application app = CoreRegistryRepository.OneApplicationWhere(c => c.Name == nameProvider.GetApplicationName()); return(app?.Cuid); }