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}"
                });
            }
        }
Exemple #2
0
        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
                });
            }
        }
Exemple #3
0
 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);
     }
 }
Exemple #5
0
        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);
            }
        }
Exemple #10
0
 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>());
     }
 }
Exemple #12
0
        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
            });
        }
Exemple #13
0
 public string GetApplicationClientId(IApplicationNameProvider nameProvider)
 {
     ApplicationRegistration.Application app = CoreRegistryRepository.OneApplicationWhere(c => c.Name == nameProvider.GetApplicationName());
     return(app?.Cuid);
 }