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)))); }
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); } } } }
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); } } }
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); } }
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()); }