public string GetUserScope(string query, string body, IAppServerServices services)
        {
            var logger = services.Logger;
            try
            {
                var values = JsonConvert.DeserializeObject<Dictionary<string, string>>(body);
                var product = new List<string> { "est" };
                var loginUser = values != null && values.ContainsKey("loginUser") ? values["loginUser"] : null;
                var lookedUpUser = values != null && values.ContainsKey("lookedUpUser") ? values["lookedUpUser"] : null;
                var searchString = values != null && values.ContainsKey("searchString") && !string.IsNullOrEmpty(values["searchString"]) ? values["searchString"] : "*";

                var loginAaaUser = new AaaUser();
                loginAaaUser.SetUser(!String.IsNullOrEmpty(loginUser) ? loginUser : services.UserContext.UUID);
            
                var fromCache = false;

                var cacheKey = string.Format("{0}_{1}_PEMISSION", services.UserContext.UUID, lookedUpUser ?? "INITIAL");
                UserPermission userPermission;
                if (_Cache.Contains(cacheKey))
                {
                    userPermission = _Cache.Get(cacheKey) as UserPermission;
                    fromCache = true;
                }
                else
                {
                    userPermission = new UserPermission
                    {
                        IsAllowToUploadMetadata = Permission.IsAllowToUploadMetadata(loginAaaUser, product) ? "true" : "false",
                        IsAllowToGetStats = Permission.IsAllowToGetStats(loginAaaUser, product) ? "true" : "false",
                        IsInternal = Permission.IsUserInternal(loginAaaUser) ? "true" : "false",
                        IsUserInScope = string.IsNullOrEmpty(lookedUpUser) ? "n/a" : Permission.IsUserInScope(loginAaaUser, lookedUpUser) ? "true" : "false"
                    };
                    _Cache.Set(cacheKey, userPermission, DateTimeOffset.UtcNow.AddMinutes(1));
                }

                #region loginUser

                var userSettingString = "{}";
                var userPermissionSetting = Permission.GetUserPermission(loginAaaUser);
                if (userPermissionSetting != null)
                {
                    userSettingString = JsonConvert.SerializeObject(userPermissionSetting);
                }

                var permissionString = "{}";
                if (userPermission != null)
                {
                    permissionString = JsonConvert.SerializeObject(userPermission);
                }

                var loginUserPermission = String.Format("{{\"userPermission\":{0},\"setting\":{1},\"cache\":\"{2}\"}}",
                    permissionString,
                    userSettingString,
                    fromCache.ToString().ToLower()
                    );

                var loginUserLocation = String.Format("{{\"locationScope\":{0},\"topLocationScope\":\"{1}\"}}",
                    Permission.GetUserInScopeAaaDetails(loginUser, loginUser),
                    Permission.GetTopLocationScope(loginAaaUser)
                    );

                var loginUserResult = String.Format("{{\"Info\":{0},\"Permissions\":{1},\"Locations\":{2}}}",
                    loginAaaUser.GetJsonString(),
                    loginUserPermission,
                    loginUserLocation
                    );
                #endregion

                #region searchUser
                var req = new FindMachineInstallRequest()
                {
                    SearchString = searchString,
                    Product = "est",
                    Filter = true
                };
                var searchResult = FindMachineInstall(req,loginAaaUser,logger);
                #endregion

                #region lookupUser
                var lookupUserResult = String.Format("{{\"locationScope\":\"empty argument\"}}");
                var lookupAaaUser = new AaaUser();
                if (!String.IsNullOrEmpty(lookedUpUser))
                {
                    var lookupUserLocation = String.Format("{{\"locationScope\":{0}}}",
                    Permission.GetUserInScopeAaaDetails(loginUser, lookedUpUser)
                    );

                    lookupAaaUser.SetUser(lookedUpUser);
                    lookupUserResult = String.Format("{{\"Info\":{0},\"Locations\":{1}}}",
                        lookupAaaUser.GetJsonString(),
                        lookupUserLocation
                        );
                }
                #endregion

                var result = String.Format("{{\"LogInUser\":{0},\"LookUpUser\":{1},\"SearchResult\":{2},\"status\":\"{3}\"}}",
                    loginUserResult,
                    lookupUserResult,
                    searchResult,
                    "Done"
                    );

                return result;
            }
            catch (Exception ex)
            {
                logger.LogError("GetUserScope - error {0}", ex.Message);
                return String.Format("{{\"status\":\"{0}\"}}",
                "Error: " + ex.Message
                );
            }
        }
        public string GetUserPermissions(string query, string body, IAppServerServices services)
        {
            var values = JsonConvert.DeserializeObject<Dictionary<string, string>>(body);
            var product = new List<string> { "est" };
            var enterUuid = values != null && values.ContainsKey("uuid") ? values["uuid"] : null;
            var fromCache = false;

            var cacheKey = string.Format("{0}_{1}_PEMISSION", services.UserContext.UUID, enterUuid ?? "INITIAL");
            UserPermission userPermission;
            if (_Cache.Contains(cacheKey))
            {
                userPermission = _Cache.Get(cacheKey) as UserPermission;
                fromCache = true;
            }
            else
            {
                userPermission = new UserPermission
                {
                    IsAllowToUploadMetadata = Permission.IsAllowToUploadMetadata(services.UserContext, product) ? "true" : "false",
                    IsAllowToGetStats = Permission.IsAllowToGetStats(services.UserContext, product) ? "true" : "false",
                    IsInternal = Permission.IsUserInternal(services.UserContext) ? "true" : "false",
                    IsUserInScope = string.IsNullOrEmpty(enterUuid) ? "true" : Permission.IsUserInScope(services.UserContext, enterUuid) ? "true" : "false"
                };
                _Cache.Set(cacheKey, userPermission, DateTimeOffset.UtcNow.AddMinutes(1));
            }

            return String.Format("{{\"isAllowToUploadMetadata\":{0},\"isAllowToGetStats\":{1},\"isInternal\":{2},\"isUserInScope\":{3},\"cache\":{4},\"scope\":{5}}}", 
                userPermission.IsAllowToUploadMetadata, 
                userPermission.IsAllowToGetStats,
                userPermission.IsInternal,
                userPermission.IsUserInScope,
                fromCache?"true":"false",
                Permission.GetUserInScopeAaaDetails(services.UserContext.UUID, enterUuid)
                );
        }