Example #1
0
        private JObject GetModuleConfigFile(ModuleInstallRequest request)
        {
            //var moduleConfig = _dbService.Get(CommonConst.Collection.MODULE_FILE_UPLOAD_CACHE, new RawQuery(new JObject()
            //{
            //    [CommonConst.CommonField.MODULE_NAME] = request.Name,
            //    [CommonConst.CommonField.VERSION] = request.Version,
            //    [CommonConst.CommonField.NAME] = "Content/module.json"
            //}.ToString())).FirstOrDefault();

            //if (moduleConfig == null)
            //{
            //    throw new Exception("Module config not found");
            //}
            var data = _keyValueStorage.Get <string>(CommonConst.Collection.MODULE_FILE_UPLOAD_CACHE, request.Name);

            return(JObject.Parse(Encoding.UTF8.GetString(Convert.FromBase64String(data))));
        }
Example #2
0
        private void InstallCollections(ModuleInstallRequest request)
        {
            const string collection       = "collections";
            var          collectionFilter = @"{name: /^content\/" + collection + "/, " + CommonConst.CommonField.MODULE_NAME + ": '" + request.Name + "', " + CommonConst.CommonField.VERSION + ": '" + request.Version + "'}";

            foreach (var item in _dbService.Get(CommonConst.Collection.MODULE_FILE_UPLOAD_CACHE, new RawQuery(collectionFilter)))
            {
                var fileSourceId   = item[CommonConst.CommonField.DISPLAY_ID].ToString();
                var fileName       = item[CommonConst.CommonField.NAME].ToString();
                var fileSize       = int.Parse(item[CommonConst.CommonField.FILE_SIZE].ToString());
                var contentType    = Mime.GetMimeType(fileName);
                var fileData       = JObjectHelper.GetJObjectDbDataFromFile(fileName, contentType, "content/wwwroot", request.Name, fileSize);
                var id             = fileData[CommonConst.CommonField.DISPLAY_ID].ToString();
                var collectionName = new FileInfo(fileName).Name.Replace(CommonConst.CONFIG_FILE_EXTENSION, "");
                var parent         = new FileInfo(fileName).Directory.Name;
                _logger.Debug($"InstallCollection File : {fileName}, Collection {collectionName}, Parent: { parent}");

                foreach (JObject joData in JObjectHelper.GetJArrayFromString(CommonUtility.GetStringFromBase64(_keyValueStorage.Get <string>(CommonConst.Collection.MODULE_FILE_UPLOAD_CACHE, fileSourceId))))
                {
                    try
                    {
                        joData[CommonConst.CommonField.DISPLAY_ID]             = CommonUtility.GetNewID();
                        joData[CommonConst.CommonField.CREATED_DATA_DATE_TIME] = DateTime.Now;
                        joData[CommonConst.CommonField.MODULE_NAME]            = request.Name;
                        joData[CommonConst.CommonField.VERSION]     = request.Version;
                        joData[CommonConst.CommonField.ÌS_OVERRIDE] = false;
                        joData[CommonConst.CommonField.OVERRIDE_BY] = CommonConst.CommonValue.NONE;
                        var url = GetUIAppUrl(parent);
                        if (string.IsNullOrEmpty(url))
                        {
                            WriteToDB(joData, request.Name, collectionName, CommonConst.CommonField.DATA_KEY);
                        }
                        else
                        {
                            _logger.Debug($"Callling remote /ui/installcollection Flile : {fileName}, Collection {collectionName}, Parent: { parent}, url {url}");
                            joData[CommonConst.CommonValue.COLLECTION] = collectionName;
                            _apiGateway.CallAsync(CommonConst.ActionMethods.POST, "/ui/installcollection", "", joData, null, url).GetAwaiter().GetResult();
                        }
                    }
                    catch (Exception ex)
                    {
                        _logger.Error($"Error InstallCollections collection:{joData}", ex);
                    }
                }
            }
        }
Example #3
0
        private void InstallWWWRoot(ModuleInstallRequest request)
        {
            var wwwrootFilter = @"{name: /^content\/wwwroot/, " + CommonConst.CommonField.MODULE_NAME + ": '" + request.Name + "', " + CommonConst.CommonField.VERSION + ": '" + request.Version + "'}";

            _dbService.OverrideData(new JObject()
            {
                [CommonConst.CommonField.MODULE_NAME] = request.Name
            }, request.Name, CommonConst.CommonField.MODULE_NAME, CommonConst.Collection.STATIC_CONTECT);

            foreach (var item in _dbService.Get(CommonConst.Collection.MODULE_FILE_UPLOAD_CACHE, new RawQuery(wwwrootFilter)))
            {
                var fileName = string.Empty;
                try
                {
                    var fileSourceId = item[CommonConst.CommonField.DISPLAY_ID].ToString();
                    fileName = item[CommonConst.CommonField.NAME].ToString();
                    var fileSize    = int.Parse(item[CommonConst.CommonField.FILE_SIZE].ToString());
                    var contentType = Mime.GetMimeType(fileName);
                    var fileData    = JObjectHelper.GetJObjectDbDataFromFile(fileName, contentType, "content/wwwroot", request.Name, fileSize);
                    fileData[CommonConst.CommonField.VERSION] = request.Version;
                    var id = fileData[CommonConst.CommonField.DISPLAY_ID].ToString();

                    var appUIFolder = GetAppFromUIFolder(fileData[CommonConst.CommonField.FILE_PATH].ToString());
                    if (!string.IsNullOrEmpty(appUIFolder))
                    {
                        fileData[CommonConst.CommonField.FILE_PATH] = fileData[CommonConst.CommonField.FILE_PATH].ToString().Replace($"/{appUIFolder}", "");
                    }
                    var appUIFolderUrl = GetUIAppUrl(appUIFolder);
                    if (string.IsNullOrEmpty(appUIFolderUrl))
                    {
                        WriteToDB(fileData, request.Name, CommonConst.Collection.STATIC_CONTECT, CommonConst.CommonField.FILE_PATH);
                        _keyValueStorage.Put <string>(CommonConst.Collection.STATIC_CONTECT, id, _keyValueStorage.Get <string>(CommonConst.Collection.MODULE_FILE_UPLOAD_CACHE, fileSourceId), null, request.Name);
                    }
                    else
                    {
                        fileData[CommonConst.CommonField.DATA] = _keyValueStorage.Get <string>(CommonConst.Collection.MODULE_FILE_UPLOAD_CACHE, fileSourceId);
                        _apiGateway.CallAsync(CommonConst.ActionMethods.POST, "/ui/installpage", "", fileData, null, appUIFolderUrl).GetAwaiter().GetResult();
                    }
                }
                catch (Exception ex)
                {
                    _logger.Error($"Error InstallWWWRoot file:{fileName}", ex);
                }
            }
        }
Example #4
0
        private void InstallDlls(ModuleInstallRequest request)
        {
            var dllFilter = @"{name: /^lib\/netstandard2.0/, " + CommonConst.CommonField.MODULE_NAME + ": '" + request.Name + "', " + CommonConst.CommonField.VERSION + ": '" + request.Version + "'}";

            foreach (var item in _dbService.Get(CommonConst.Collection.MODULE_FILE_UPLOAD_CACHE, new RawQuery(dllFilter)))
            {
                var fileSourceId = item[CommonConst.CommonField.DISPLAY_ID].ToString();
                var fileName     = item[CommonConst.CommonField.NAME].ToString();
                var fileSize     = int.Parse(item[CommonConst.CommonField.FILE_SIZE].ToString());
                var contentType  = Mime.GetMimeType(fileName);
                var fileData     = JObjectHelper.GetJObjectDbDataFromFile(fileName, contentType, "lib/netstandard2.0/", request.Name, fileSize);
                fileData[CommonConst.CommonField.VERSION] = request.Version;
                var id       = fileData[CommonConst.CommonField.DISPLAY_ID].ToString();
                var data     = _keyValueStorage.Get <string>(CommonConst.Collection.MODULE_FILE_UPLOAD_CACHE, fileSourceId);
                var assembly = Assembly.Load(Convert.FromBase64String(data));
                fileData[CommonConst.CommonField.NAME] = assembly.FullName;
                WriteToDB(fileData, request.Name, CommonConst.Collection.DLLS, CommonConst.CommonField.FILE_PATH);
                InstallRoutes(request, assembly);
                _keyValueStorage.Put <string>(CommonConst.Collection.DLLS, id, data);
            }
        }
Example #5
0
        private List <string> InstallRoutes(ModuleInstallRequest request, Assembly assembly)
        {
            var userRoles = new List <string>();

            var         routes       = new List <RoutingModel>();
            List <Type> routeclasses = new List <Type>();

            routeclasses.AddRange(
                assembly.GetTypes()
                .Where(t => !t.IsAbstract)
                .Distinct()
                .ToList());

            foreach (Type routeClass in routeclasses)
            {
                System.Reflection.MemberInfo[] info = routeClass.GetMethods();
                foreach (var mi in info)
                {
                    object[] objroutes = mi.GetCustomAttributes(typeof(Route), true);
                    if (objroutes.Length != 0)
                    {
                        var r = (Route)objroutes.First();
                        routes.Add(new RoutingModel()
                        {
                            Method          = r.Method,
                            Route           = r.RoutePath.ToLower(),
                            ExecultAssembly = assembly.FullName,
                            ExecuteMethod   = mi.Name,
                            ExecuteType     = routeClass.FullName,
                            ContentType     = r.ContentType,
                            auth_users      = r.AuthUsers
                        });
                        userRoles.AddRange(r.AuthUsers);
                    }
                }
            }

            _dbService.OverrideData(new JObject()
            {
                [CommonConst.CommonField.MODULE_NAME] = request.Name
            }, request.Name, CommonConst.CommonField.MODULE_NAME, CommonConst.Collection.SERVER_ROUTES);

            foreach (var route in routes)
            {
                try
                {
                    var data = JObject.Parse(Newtonsoft.Json.JsonConvert.SerializeObject(route));
                    data[CommonConst.CommonField.DISPLAY_ID]  = CommonUtility.GetNewID();
                    data[CommonConst.CommonField.MODULE_NAME] = request.Name;
                    data[CommonConst.CommonField.VERSION]     = request.Version;
                    data[CommonConst.CommonField.ÌS_OVERRIDE] = false;
                    data[CommonConst.CommonField.OVERRIDE_BY] = CommonConst.CommonValue.NONE;
                    data[CommonConst.CommonField.KEY]         = $"{route.Method}:{route.Route}";
                    WriteToDB(data, request.Name, CommonConst.Collection.SERVER_ROUTES, CommonConst.CommonField.KEY);
                    data[CommonConst.CommonField.MODULE_ENDPOINT] = ApplicationConfig.AppEndpoint;
                    if (request.Name != "ZNxt.Net.Core.Module.Gateway")
                    {
                        _apiGateway.CallAsync(CommonConst.ActionMethods.POST, "/gateway/installroute", "", data, null, ApplicationConfig.ApiGatewayEndpoint).GetAwaiter().GetResult();
                    }
                }
                catch (Exception ex)
                {
                    _logger.Error($"Error InstallRoutes route:{route}", ex);
                }
            }

            return(userRoles.Distinct().ToList());
        }