/// <summary>
        /// Locals the account for server.
        /// </summary>
        /// <param name="server">
        /// The server.
        /// </param>
        /// <param name="username">
        /// The username.
        /// </param>
        /// <param name="rasApplicationId">
        /// The ras application identifier.
        /// </param>
        /// <returns>
        /// The <see cref="Task"/>.
        /// </returns>
        public static async Task <ServerAccount> LocalAccountForServer(
            RemoteServer server,
            string username,
            string rasApplicationId)
        {
            if (server == null)
            {
                return(null);
            }

            // set the username
            var checkedUserName = username;

            if (server.AuthenticationType == ServerAuthenticationType.Revolution && string.IsNullOrWhiteSpace(rasApplicationId))
            {
                // Get the RAS application Id from the mappings
                rasApplicationId =
                    RasLoginAppMapping.CurrentMapping()
                    .AppIdForServerIdRasLoginName(server.ServerIdentification, username.ToLower());
                if (!string.IsNullOrWhiteSpace(rasApplicationId))
                {
                    var usernameTokens = username.Split('\\');
                    if (usernameTokens.Length > 1 && !rasApplicationId.Equals(server.ServerIdentification))
                    {
                        checkedUserName = usernameTokens[1];
                    }
                }
                else
                {
                    return(null);
                }
            }

            var accountFolder = AccountPathForServer(server, checkedUserName, rasApplicationId);

            Logger?.LogMessage(new LogMessage($"ServerAccount - Try account folder {accountFolder}", LogLevel.Info));

            if (PlatformService?.StorageProvider == null || !PlatformService.StorageProvider.DirectoryExists(accountFolder))
            {
                return(null);
            }

            Logger?.LogMessage(new LogMessage($"ServerAccount - Use account Folder {accountFolder}", LogLevel.Info));

            var accountConfigurationFile = Path.Combine(accountFolder, "account.crmpad");

            if (!PlatformService.StorageProvider.FileExists(accountConfigurationFile))
            {
                return(null);
            }

            var platform = SimpleIoc.Default.GetInstance <IPlatformService>();

            if (platform == null)
            {
                return(null);
            }

            return(await platform.StorageProvider.LoadObject <ServerAccount>(accountConfigurationFile));
        }
Exemplo n.º 2
0
        /// <summary>
        /// Currents the mapping.
        /// </summary>
        /// <returns>
        /// The <see cref="RasLoginAppMapping"/>.
        /// </returns>
        public static RasLoginAppMapping CurrentMapping()
        {
            if (instance != null)
            {
                return(instance);
            }

            lock (SingletonLock)
            {
                if (instance != null)
                {
                    return(instance);
                }

                instance = new RasLoginAppMapping();
                var readObject = PListService.LoadPropertiesAsArray(
                    PListService.LoginAppMapping,
                    PListService.DocumentPath);
                if (readObject != null && readObject.Count > 1)
                {
                    instance.SetInstanceMapping(readObject[0].Value);
                    instance.SetAppIdMapping(readObject[1].Value);
                }
            }

            return(instance);
        }