public async Task<ModuleInfo> GetActiveModules (string module, string method, string version, string source) { RestHelper rs = new RestHelper(); Helper helper = new Helper(); var api_key = helper.GetApiKey(Request); await rs.Log("Incoming getActiveModule call from: " + source + " at " + helper.GetClientIp(Request)); if(string.IsNullOrEmpty(module)) { await rs.Log("GetActiveModule failed: Missing module name from " + source + " at " + helper.GetClientIp(Request) ); HttpResponseMessage no_name_response = this.Request.CreateErrorResponse(HttpStatusCode.BadRequest, string.Format("module name cannot be empty")); throw new HttpResponseException(no_name_response); } if (string.IsNullOrEmpty(method)) { await rs.Log("GetActiveModule failed: Missing module method from " + source + " at " + helper.GetClientIp(Request)); HttpResponseMessage no_method_response = this.Request.CreateErrorResponse(HttpStatusCode.BadRequest, string.Format("module method cannot be empty")); throw new HttpResponseException(no_method_response); } if (string.IsNullOrEmpty(version)) { await rs.Log("GetActiveModule failed: Missing module version from " + source + " at " + helper.GetClientIp(Request)); HttpResponseMessage no_version_response = this.Request.CreateErrorResponse(HttpStatusCode.BadRequest, string.Format("module version cannot be empty")); throw new HttpResponseException(no_version_response); } if (string.IsNullOrEmpty(source)) { await rs.Log("GetActiveModule failed: Missing module source at " + helper.GetClientIp(Request)); HttpResponseMessage no_source_response = this.Request.CreateErrorResponse(HttpStatusCode.BadRequest, string.Format("module source cannot be empty")); throw new HttpResponseException(no_source_response); } if (!string.IsNullOrEmpty(api_key)) { var exists = ctx.clients.Where(x => x.api_key == api_key && !x.isdeleted).FirstOrDefault(); if (exists != null) { var activeModules = ctx.modules.Where(x => !x.isdeleted && x.active && !x.isProcess && x.name == module).ToList(); if(activeModules == null) { var module_not_found_message = string.Format("Module {0} not found from: " + source + " at " + helper.GetClientIp(Request), module); await rs.Log(module_not_found_message); HttpResponseMessage response = this.Request.CreateErrorResponse(HttpStatusCode.BadRequest, string.Format("Module {0} not found",module)); throw new HttpResponseException(response); } var VersionFound = false; var MethodFound = false; foreach(var m in activeModules) { if(m.version == version) { VersionFound = true; foreach (var moduleMethod in m.methods) { if(moduleMethod.name == method) { MethodFound = true; ModuleInfo info = new ModuleInfo() { api_url = m.api_url, name = m.name, version = m.version }; return info; } } } } if(!VersionFound) { var version_not_found_message = string.Format("Version {0} is not available for module {1} from: " + source + " at " + helper.GetClientIp(Request),version, module); await rs.Log(version_not_found_message); HttpResponseMessage version_response = this.Request.CreateErrorResponse(HttpStatusCode.BadRequest, string.Format("Version {0} is not available for module {1}.",version,module)); throw new HttpResponseException(version_response); } if(!MethodFound) { var method_not_found_message = string.Format("method {0} is not available for module {1} version {2} from: " + source + " at " + helper.GetClientIp(Request), method, module,version); await rs.Log(method_not_found_message); HttpResponseMessage method_response = this.Request.CreateErrorResponse(HttpStatusCode.BadRequest, string.Format("method {0} is not available for module {1} version {2}.", method, module, version)); throw new HttpResponseException(method_response); } var message = string.Format("Version {0} is not available for module {1} from: " + source + " at " + helper.GetClientIp(Request), version, module); await rs.Log(message); HttpResponseMessage error_response = this.Request.CreateErrorResponse(HttpStatusCode.BadRequest, "Error while fetching module information"); throw new HttpResponseException(error_response); } else { var message = string.Format("Invalid API key from: " + source + " at " + helper.GetClientIp(Request)); await rs.Log(message); HttpResponseMessage response = this.Request.CreateErrorResponse(HttpStatusCode.BadRequest, "Invalid API key."); throw new HttpResponseException(response); } } else { var message = string.Format("API key missing from: " + source + " at " + helper.GetClientIp(Request)); await rs.Log(message); HttpResponseMessage response = this.Request.CreateErrorResponse(HttpStatusCode.BadRequest, "API key missing."); throw new HttpResponseException(response); } }