Skip to content

Commit 53fe81f

Browse files
committed
Refactor scheduled task handling and update version references in various files
1 parent f7b25fa commit 53fe81f

19 files changed

+694
-704
lines changed

Makefile

Lines changed: 4 additions & 24 deletions
Original file line numberDiff line numberDiff line change
@@ -69,30 +69,10 @@ rr-manager_extra_install:
6969
install -m 755 -d $(STAGING_DIR)/app/images/
7070
install -m 755 -d $(STAGING_DIR)/app/images/1x
7171

72-
install -m 755 src/scripts/checkUpdateStatus.cgi $(STAGING_DIR)/app/scripts/checkUpdateStatus.cgi
73-
install -m 755 src/scripts/getAddons.cgi $(STAGING_DIR)/app/scripts/getAddons.cgi
74-
install -m 755 src/scripts/getAvailableUpdates.cgi $(STAGING_DIR)/app/scripts/getAvailableUpdates.cgi
75-
install -m 755 src/scripts/getConfig.cgi $(STAGING_DIR)/app/scripts/getConfig.cgi
76-
install -m 755 src/scripts/getModules.cgi $(STAGING_DIR)/app/scripts/getModules.cgi
77-
install -m 755 src/scripts/getNetworkInfo.cgi $(STAGING_DIR)/app/scripts/getNetworkInfo.cgi
78-
install -m 755 src/scripts/getRrReleaseInfo.cgi $(STAGING_DIR)/app/scripts/getRrReleaseInfo.cgi
79-
install -m 755 src/scripts/readUpdateFile.cgi $(STAGING_DIR)/app/scripts/readUpdateFile.cgi
80-
install -m 755 src/scripts/uploadConfigFile.cgi $(STAGING_DIR)/app/scripts/uploadConfigFile.cgi
81-
install -m 755 src/scripts/uploadUpdateFileInfo.cgi $(STAGING_DIR)/app/scripts/uploadUpdateFileInfo.cgi
82-
83-
install -m 644 src/app/alias.syno-app-portal.RRM.conf $(STAGING_DIR)/app/alias.syno-app-portal.RRM.conf
84-
install -m 644 src/app/config $(STAGING_DIR)/app/config
85-
install -m 755 src/app/config.txt $(STAGING_DIR)/app/config.txt
86-
install -m 644 src/app/helptoc.conf $(STAGING_DIR)/app/helptoc.conf
87-
install -m 644 src/app/index.conf $(STAGING_DIR)/app/index.conf
88-
install -m 755 src/app/install.sh $(STAGING_DIR)/app/install.sh
89-
install -m 644 src/app/rr-manager.js $(STAGING_DIR)/app/rr-manager.js
90-
install -m 644 src/app/rr-manager.widget.js $(STAGING_DIR)/app/rr-manager.widget.js
91-
install -m 755 src/app/style.css $(STAGING_DIR)/app/style.css
92-
93-
install -m 755 src/images/1x/cate_icn_addons.png $(STAGING_DIR)/app/images/1x/cate_icn_addons.png
94-
install -m 755 src/images/1x/cate_icn_overview.png $(STAGING_DIR)/app/images/1x/cate_icn_overview.png
95-
install -m 755 src/images/1x/cate_icn_setting.png $(STAGING_DIR)/app/images/1x/cate_icn_setting.png
72+
install -m 755 src/scripts/* $(STAGING_DIR)/app/scripts/
73+
install -m 644 src/app/config $(STAGING_DIR)/app/
74+
install -m 644 src/app/*.* $(STAGING_DIR)/app/
75+
install -m 755 src/images/1x/* $(STAGING_DIR)/app/images/1x/
9676

9777
install -m 755 src/app/tasks.sql $(STAGING_DIR)/app/tasks.sql
9878

src/app/install.sh

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,6 @@ echo "DELETE FROM task WHERE task_name='SetRootPrivsToRrManager'" | sqlite3 /usr
1212
echo "DELETE FROM task WHERE task_name='RunRrUpdate'" | sqlite3 /usr/syno/etc/esynoscheduler/esynoscheduler.db
1313
echo "DELETE FROM task WHERE task_name='ApplyRRConfig'" | sqlite3 /usr/syno/etc/esynoscheduler/esynoscheduler.db
1414
# add new tasks
15-
cat /var/packages/rr-manager/target/app/tasks.sql | sqlite3 /usr/syno/etc/esynoscheduler/esynoscheduler.db
1615
echo "DELETE FROM task WHERE task_name='SetRootPrivsToRrManager'" | sqlite3 /usr/syno/etc/esynoscheduler/esynoscheduler.db
1716
#Add sudoers for loader disk
1817
echo -e "sc-rr-manager ALL=(ALL) NOPASSWD: /usr/bin/rr-loaderdisk.sh mountLoaderDisk\nsc-rr-manager ALL=(ALL) NOPASSWD: /usr/bin/rr-loaderdisk.sh unmountLoaderDisk" | tee /etc/sudoers.d/99-rr-loaderdisk /etc.defaults/sudoers.d/99-rr-loaderdisk > /dev/null

src/app/rr-manager.widget.js

Lines changed: 3 additions & 24 deletions
Original file line numberDiff line numberDiff line change
@@ -35,29 +35,8 @@ Ext.define("SYNOCOMMUNITY.RRManager.Widget", {
3535
await this.startPolling();
3636
}
3737
},
38-
runScheduledTask: function (taskName) {
39-
that = this;
40-
return new Promise((resolve, reject) => {
41-
let params = {
42-
task_name: taskName
43-
};
44-
let args = {
45-
api: 'SYNO.Core.EventScheduler',
46-
method: 'run',
47-
version: 1,
48-
params: params,
49-
stop_when_error: false,
50-
mode: 'sequential',
51-
callback: function (success, message) {
52-
success ? resolve(message) : reject('Unable to get packages!');
53-
}
54-
};
55-
that.sendWebAPI(args);
56-
});
57-
},
5838
startPolling: async function () {
5939
const self = this;
60-
self.runScheduledTask('MountLoaderDisk');
6140
const rrRR = await this.checkRRVersion();
6241
const rrConf = await this.getRRConf();
6342
let rr_health_status = rrConf.rr_health == 'healthy' ? this.TYPE_NORMAL : this.TYPE_ATTENTION;
@@ -69,7 +48,7 @@ Ext.define("SYNOCOMMUNITY.RRManager.Widget", {
6948
self.packages = await self.getPackagesList();
7049
const rrManagerPackage = self?.packages?.packages?.find(package => package.id == 'rr-manager');
7150
self.versionInfo = {
72-
rr_version: rrConf?.rr_version,
51+
rr_loader_version: rrConf?.rr_version.LOADERVERSION,
7352
rr_manager_version: rrManagerPackage?.version,
7453
rr_update_version: rrRR.tag
7554
};
@@ -327,7 +306,7 @@ Ext.define("SYNOCOMMUNITY.RRManager.Widget", {
327306
name: "rrVerison",
328307
id: "rrVerison",
329308
xtype: "box",
330-
html: String.format('<p ext:qtip="{1}" class="syno-sysinfo-system-health-south-data">{0}</p>', versionInfo.rr_version, Ext.util.Format.htmlEncode(versionInfo.rr_version))
309+
html: String.format('<p ext:qtip="{1}" class="syno-sysinfo-system-health-south-data">{0}</p>', versionInfo.rr_loader_version, Ext.util.Format.htmlEncode(versionInfo.rr_loader_version))
331310
},
332311
{
333312
xtype: "box",
@@ -339,7 +318,7 @@ Ext.define("SYNOCOMMUNITY.RRManager.Widget", {
339318
html: String.format('<p ext:qtip="{1}" class="syno-sysinfo-system-health-south-data">{0}</p>', versionInfo.rr_manager_version, Ext.util.Format.htmlEncode(versionInfo.rr_manager_version))
340319
}
341320
];
342-
if (versionInfo.rr_version !== versionInfo.rr_update_version) {
321+
if (versionInfo.rr_loader_version !== versionInfo.rr_update_version) {
343322
labels.push({
344323
xtype: "box",
345324
html: String.format('<p ext:qtip="{1}" class="syno-sysinfo-system-health-south-title">{0}</p>', "RR update available!", Ext.util.Format.htmlEncode("RR update available!"))

src/conf/privilege_

Lines changed: 0 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -26,15 +26,5 @@
2626
"action": "postinst",
2727
"run-as": "package"
2828
}
29-
],
30-
"executable": [
31-
{
32-
"relpath": "app/scripts/getConfig.cgi",
33-
"run-as": "package"
34-
},
35-
{
36-
"relpath": "app/scripts/getAddons.cgi",
37-
"run-as": "package"
38-
}
3929
]
4030
}

src/scripts/checkUpdateStatus.cgi

Lines changed: 53 additions & 42 deletions
Original file line numberDiff line numberDiff line change
@@ -1,62 +1,73 @@
1-
#!/usr/bin/env python3
2-
import cgi
1+
#!/usr/bin/env python
2+
33
import os
44
import json
5-
import cgitb; cgitb.enable() # Enable CGI error reporting
5+
import cgi
6+
import cgitb
67

7-
print("Content-Type: application/json\n") # JSON is following, with an extra newline for headers end
8+
cgitb.enable() # Enable CGI error reporting
89

9-
# Authenticate the user
10-
f = os.popen('/usr/syno/synoman/webman/modules/authenticate.cgi', 'r')
11-
user = f.read().strip()
1210

1311
def read_rrmanager_config(file_path):
1412
try:
1513
config = {}
16-
with open(file_path, 'r') as file:
14+
with open(file_path, "r") as file:
1715
for line in file:
1816
line = line.strip()
19-
if line and not line.startswith('#'):
20-
key, value = line.split('=')
17+
if line and not line.startswith("#"):
18+
key, value = line.split("=")
2119
config[key.strip()] = value.strip()
2220
return config
2321
except IOError as e:
2422
return f"Error reading user-config.yml: {e}"
2523
except e:
2624
return "{}"
2725

28-
response = {}
29-
response['success'] = False
30-
31-
if len(user) > 0:
32-
# Parse query string
33-
arguments = cgi.FieldStorage()
34-
rr_manager_config = read_rrmanager_config('/var/packages/rr-manager/target/app/config.txt')
35-
filename = rr_manager_config.get('RR_UPDATE_PROGRESS_FILE')
36-
37-
if filename:
38-
# Construct file path
39-
file_path = os.path.join('/tmp', filename)
40-
41-
if os.path.abspath(file_path).startswith('/tmp/'):
42-
try:
43-
with open(file_path, 'r') as file:
44-
content = file.read()
45-
# Attempt to parse the content as JSON
46-
parsed_content = json.loads(content)
47-
# Success, set the result
48-
response["result"] = parsed_content
49-
response['success'] = True
50-
except json.JSONDecodeError:
51-
response["status"] = "File content is not valid JSON."
52-
except Exception as e:
53-
response["status"] = f"Could not read file: {str(e)}"
26+
27+
if __name__ == "__main__":
28+
user = os.popen("/usr/syno/synoman/webman/modules/authenticate.cgi", "r").read().strip()
29+
30+
# Debug
31+
if not user:
32+
import getpass
33+
34+
user = getpass.getuser()
35+
if user != "root":
36+
user = ""
37+
38+
response = {}
39+
response["success"] = False
40+
if user:
41+
# Parse query string
42+
arguments = cgi.FieldStorage()
43+
rr_manager_config = read_rrmanager_config(
44+
"/var/packages/rr-manager/target/app/config.txt"
45+
)
46+
filename = rr_manager_config.get("RR_UPDATE_PROGRESS_FILE")
47+
48+
if filename:
49+
# Construct file path
50+
file_path = os.path.join("/tmp", filename)
51+
52+
if os.path.abspath(file_path).startswith("/tmp/"):
53+
try:
54+
with open(file_path, "r") as file:
55+
content = file.read()
56+
# Attempt to parse the content as JSON
57+
parsed_content = json.loads(content)
58+
# Success, set the result
59+
response["result"] = parsed_content
60+
response["success"] = True
61+
except json.JSONDecodeError:
62+
response["status"] = "File content is not valid JSON."
63+
except Exception as e:
64+
response["status"] = f"Could not read file: {str(e)}"
65+
else:
66+
response["status"] = "Invalid file path."
5467
else:
55-
response["status"] = "Invalid file path."
68+
response["status"] = "Filename parameter is missing."
5669
else:
57-
response["status"] = "Filename parameter is missing."
58-
else:
59-
response["status"] = "Authentication failed."
70+
response["status"] = "Authentication failed."
6071

61-
# Print the JSON response at the end
62-
print(json.dumps(response))
72+
print("Content-type: application/json\n")
73+
print(json.dumps(response, indent=4))

0 commit comments

Comments
 (0)