luci-app-alist: Add ftp/sftp tabs and use paging menus
Signed-off-by: sbwml <admin@cooluc.com>
This commit is contained in:
parent
c7d7c2a5ce
commit
991b1fd6d1
@ -6,7 +6,7 @@
|
||||
include $(TOPDIR)/rules.mk
|
||||
|
||||
PKG_NAME:=luci-app-alist
|
||||
PKG_VERSION:=1.1.2
|
||||
PKG_VERSION:=1.1.3
|
||||
PKG_RELEASE:=1
|
||||
|
||||
LUCI_TITLE:=LuCI support for alist
|
||||
|
@ -95,251 +95,292 @@ return view.extend({
|
||||
]);
|
||||
}
|
||||
|
||||
// init
|
||||
s = m.section(form.TypedSection, 'alist', _('Basic Settings'));
|
||||
s.anonymous = true;
|
||||
s = m.section(form.NamedSection, '@alist[0]', 'alist');
|
||||
|
||||
o = s.option(form.Flag, 'enabled', _('Enabled'));
|
||||
s.tab('basic', _('Basic Settings'));
|
||||
s.tab('global', _('Global Settings'));
|
||||
s.tab("log", _("Logs"));
|
||||
s.tab("database", _("Database"));
|
||||
s.tab("scheme", _("Web Protocol"));
|
||||
s.tab('tasks', _('Task threads'));
|
||||
s.tab('cors', _('CORS Settings'));
|
||||
s.tab('s3', _('Object Storage'));
|
||||
s.tab('ftp', _('FTP'));
|
||||
s.tab('sftp', _('SFTP'));
|
||||
|
||||
// init
|
||||
o = s.taboption('basic', form.Flag, 'enabled', _('Enabled'));
|
||||
o.default = o.disabled;
|
||||
o.rmempty = false;
|
||||
|
||||
o = s.option(form.Value, 'port', _('Port'));
|
||||
o = s.taboption('basic', form.Value, 'port', _('Port'));
|
||||
o.datatype = 'and(port,min(1))';
|
||||
o.default = '5244';
|
||||
o.rmempty = false;
|
||||
|
||||
o = s.option(form.Value, 'delayed_start', _('Delayed Start (seconds)'));
|
||||
o = s.taboption('basic', form.Value, 'delayed_start', _('Delayed Start (seconds)'));
|
||||
o.datatype = 'uinteger';
|
||||
o.default = '0';
|
||||
o.rmempty = false;
|
||||
|
||||
o = s.option(form.Flag, 'allow_wan', _('Open firewall port'));
|
||||
o = s.taboption('basic', form.Flag, 'allow_wan', _('Open firewall port'));
|
||||
o.rmempty = false;
|
||||
|
||||
o = s.option(form.Button, '_newpassword', _('Reset Password'),
|
||||
o = s.taboption('basic', form.Value, 'data_dir', _('Data directory'));
|
||||
o.default = '/etc/alist';
|
||||
|
||||
o = s.taboption('basic', form.Value, 'temp_dir', _('Cache directory'));
|
||||
o.default = '/tmp/alist';
|
||||
o.rmempty = false;
|
||||
|
||||
o = s.taboption('basic', form.Button, '_newpassword', _('Reset Password'),
|
||||
_('Generate a new random password.'));
|
||||
o.inputtitle = _('Reset Password');
|
||||
o.inputstyle = 'apply';
|
||||
o.onclick = L.bind(this.handleResetPassword, this, data);
|
||||
|
||||
// global
|
||||
s = m.section(form.TypedSection, 'alist', _('Global Settings'));
|
||||
s.anonymous = true;
|
||||
|
||||
o = s.option(form.Flag, 'force', _('Force read config'),
|
||||
o = s.taboption('global', form.Flag, 'force', _('Force read config'),
|
||||
_('Setting this to true will force the program to read the configuration file, ignoring environment variables.'));
|
||||
o.default = true;
|
||||
o.rmempty = false;
|
||||
|
||||
o = s.option(form.Value, 'site_url', _('Site URL'),
|
||||
o = s.taboption('global', form.Value, 'site_url', _('Site URL'),
|
||||
_('When the web is reverse proxied to a subdirectory, this option must be filled out to ensure proper functioning of the web. Do not include \'/\' at the end of the URL'));
|
||||
|
||||
o = s.option(form.Value, 'cdn', _('CDN URL'));
|
||||
o = s.taboption('global', form.Value, 'cdn', _('CDN URL'));
|
||||
o.default = '';
|
||||
|
||||
o = s.option(form.Value, 'jwt_secret', _('JWT Key'));
|
||||
o = s.taboption('global', form.Value, 'jwt_secret', _('JWT Key'));
|
||||
o.default = '';
|
||||
|
||||
o = s.option(form.Value, 'token_expires_in', _('Login Validity Period (hours)'));
|
||||
o = s.taboption('global', form.Value, 'token_expires_in', _('Login Validity Period (hours)'));
|
||||
o.datatype = 'uinteger';
|
||||
o.default = '48';
|
||||
o.rmempty = false;
|
||||
|
||||
o = s.option(form.Value, 'max_connections', _('Max Connections'),
|
||||
o = s.taboption('global', form.Value, 'max_connections', _('Max Connections'),
|
||||
_('0 is unlimited, It is recommend to set a low number of concurrency (10-20) for poor performance device'));
|
||||
o.default = '0';
|
||||
o.datatype = 'uinteger';
|
||||
o.rmempty = false;
|
||||
|
||||
o = s.option(form.Flag, 'tls_insecure_skip_verify', _('Disable TLS Verify'));
|
||||
o = s.taboption('global', form.Value, 'max_concurrency', _('Max concurrency of local proxies'),
|
||||
_('0 is unlimited, Limit the maximum concurrency of local agents. The default value is 64'));
|
||||
o.default = '0';
|
||||
o.datatype = 'uinteger';
|
||||
o.rmempty = false;
|
||||
|
||||
o = s.taboption('global', form.Flag, 'tls_insecure_skip_verify', _('Disable TLS Verify'));
|
||||
o.default = true;
|
||||
o.rmempty = false;
|
||||
|
||||
o = s.option(form.Value, 'data_dir', _('Data directory'));
|
||||
o.default = '/etc/alist';
|
||||
|
||||
o = s.option(form.Value, 'temp_dir', _('Cache directory'));
|
||||
o.default = '/tmp/alist';
|
||||
o.rmempty = false;
|
||||
|
||||
// Logs
|
||||
s = m.section(form.TypedSection, 'alist', _('Logs'));
|
||||
s.anonymous = true;
|
||||
|
||||
o = s.option(form.Flag, 'log', _('Enable Logs'));
|
||||
o = s.taboption('log', form.Flag, 'log', _('Enable Logs'));
|
||||
o.default = 1;
|
||||
o.rmempty = false;
|
||||
|
||||
o = s.option(form.Value, 'log_path', _('Log path'));
|
||||
o = s.taboption('log', form.Value, 'log_path', _('Log path'));
|
||||
o.default = '/var/log/alist.log';
|
||||
o.rmempty = false;
|
||||
o.depends('log', '1');
|
||||
|
||||
o = s.option(form.Value, 'log_max_size', _('Max Size (MB)'));
|
||||
o = s.taboption('log', form.Value, 'log_max_size', _('Max Size (MB)'));
|
||||
o.datatype = 'uinteger';
|
||||
o.default = '10';
|
||||
o.rmempty = false;
|
||||
o.depends('log', '1');
|
||||
|
||||
o = s.option(form.Value, 'log_max_backups', _('Max backups'));
|
||||
o = s.taboption('log', form.Value, 'log_max_backups', _('Max backups'));
|
||||
o.datatype = 'uinteger';
|
||||
o.default = '5';
|
||||
o.rmempty = false;
|
||||
o.depends('log', '1');
|
||||
|
||||
o = s.option(form.Value, 'log_max_age', _('Max age'));
|
||||
o = s.taboption('log', form.Value, 'log_max_age', _('Max age'));
|
||||
o.datatype = 'uinteger';
|
||||
o.default = '28';
|
||||
o.rmempty = false;
|
||||
o.depends('log', '1');
|
||||
|
||||
o = s.option(form.Flag, 'log_compress', _('Log Compress'));
|
||||
o = s.taboption('log', form.Flag, 'log_compress', _('Log Compress'));
|
||||
o.default = 'false';
|
||||
o.rmempty = false;
|
||||
o.depends('log', '1');
|
||||
|
||||
// database
|
||||
s = m.section(form.TypedSection, 'alist', _('Database'));
|
||||
s.anonymous = true;
|
||||
|
||||
o = s.option(form.ListValue, 'database_type', _('Database Type'));
|
||||
o = s.taboption('database', form.ListValue, 'database_type', _('Database Type'));
|
||||
o.default = 'sqlite3';
|
||||
o.value('sqlite3', _('SQLite'));
|
||||
o.value('mysql', _('MySQL'));
|
||||
o.value('postgres', _('PostgreSQL'));
|
||||
|
||||
o = s.option(form.Value, 'mysql_host', _('Database Host'));
|
||||
o = s.taboption('database', form.Value, 'mysql_host', _('Database Host'));
|
||||
o.depends('database_type','mysql');
|
||||
o.depends('database_type','postgres');
|
||||
|
||||
o = s.option(form.Value, 'mysql_port', _('Database Port'));
|
||||
o = s.taboption('database', form.Value, 'mysql_port', _('Database Port'));
|
||||
o.datatype = 'port';
|
||||
o.default = '3306';
|
||||
o.depends('database_type','mysql');
|
||||
o.depends('database_type','postgres');
|
||||
|
||||
o = s.option(form.Value, 'mysql_username', _('Database Username'));
|
||||
o = s.taboption('database', form.Value, 'mysql_username', _('Database Username'));
|
||||
o.depends('database_type','mysql');
|
||||
o.depends('database_type','postgres');
|
||||
|
||||
o = s.option(form.Value, 'mysql_password', _('Database Password'));
|
||||
o = s.taboption('database', form.Value, 'mysql_password', _('Database Password'));
|
||||
o.depends('database_type','mysql');
|
||||
o.depends('database_type','postgres');
|
||||
|
||||
o = s.option(form.Value, 'mysql_database', _('Database Name'));
|
||||
o = s.taboption('database', form.Value, 'mysql_database', _('Database Name'));
|
||||
o.depends('database_type','mysql');
|
||||
o.depends('database_type','postgres');
|
||||
|
||||
o = s.option(form.Value, 'mysql_table_prefix', _('Database Table Prefix'));
|
||||
o = s.taboption('database', form.Value, 'mysql_table_prefix', _('Database Table Prefix'));
|
||||
o.default = 'x_';
|
||||
o.depends('database_type','mysql');
|
||||
o.depends('database_type','postgres');
|
||||
|
||||
o = s.option(form.Value, 'mysql_ssl_mode', _('Database SSL Mode'));
|
||||
o = s.taboption('database', form.Value, 'mysql_ssl_mode', _('Database SSL Mode'));
|
||||
o.depends('database_type','mysql');
|
||||
o.depends('database_type','postgres');
|
||||
|
||||
o = s.option(form.Value, 'mysql_dsn', _('Database DSN'));
|
||||
o = s.taboption('database', form.Value, 'mysql_dsn', _('Database DSN'));
|
||||
o.depends('database_type','mysql');
|
||||
o.depends('database_type','postgres');
|
||||
|
||||
// scheme
|
||||
s = m.section(form.TypedSection, 'alist', _('Web Protocol'));
|
||||
s.anonymous = true;
|
||||
|
||||
o = s.option(form.Flag, 'ssl', _('Enable SSL'));
|
||||
o = s.taboption('scheme', form.Flag, 'ssl', _('Enable SSL'));
|
||||
o.rmempty = false;
|
||||
|
||||
o = s.option(form.Flag, 'force_https', _('Force HTTPS'));
|
||||
o = s.taboption('scheme', form.Flag, 'force_https', _('Force HTTPS'));
|
||||
o.rmempty = false;
|
||||
o.depends('ssl', '1');
|
||||
|
||||
o = s.option(form.Value, 'ssl_cert', _('SSL cert'),
|
||||
o = s.taboption('scheme', form.Value, 'ssl_cert', _('SSL cert'),
|
||||
_('SSL certificate file path'));
|
||||
o.rmempty = false;
|
||||
o.depends('ssl', '1');
|
||||
|
||||
o = s.option(form.Value, 'ssl_key', _('SSL key'),
|
||||
o = s.taboption('scheme', form.Value, 'ssl_key', _('SSL key'),
|
||||
_('SSL key file path'));
|
||||
o.rmempty = false;
|
||||
o.depends('ssl', '1');
|
||||
|
||||
// tasks
|
||||
s = m.section(form.TypedSection, 'alist', _('Task threads'));
|
||||
s.anonymous = true;
|
||||
|
||||
o = s.option(form.Value, 'download_workers', _('Download Workers'));
|
||||
o = s.taboption('tasks', form.Value, 'download_workers', _('Download Workers'));
|
||||
o.datatype = 'uinteger';
|
||||
o.default = '5';
|
||||
o.rmempty = false;
|
||||
|
||||
o = s.option(form.Value, 'download_max_retry', _('Download Max Retry'));
|
||||
o = s.taboption('tasks', form.Value, 'download_max_retry', _('Download Max Retry'));
|
||||
o.datatype = 'uinteger';
|
||||
o.default = '1';
|
||||
o.rmempty = false;
|
||||
|
||||
o = s.option(form.Value, 'transfer_workers', _('Transfer Workers'));
|
||||
o = s.taboption('tasks', form.Value, 'transfer_workers', _('Transfer Workers'));
|
||||
o.datatype = 'uinteger';
|
||||
o.default = '5';
|
||||
o.rmempty = false;
|
||||
|
||||
o = s.option(form.Value, 'transfer_max_retry', _('Transfer Max Retry'));
|
||||
o = s.taboption('tasks', form.Value, 'transfer_max_retry', _('Transfer Max Retry'));
|
||||
o.datatype = 'uinteger';
|
||||
o.default = '2';
|
||||
o.rmempty = false;
|
||||
|
||||
o = s.option(form.Value, 'upload_workers', _('Upload Workers'));
|
||||
o = s.taboption('tasks', form.Value, 'upload_workers', _('Upload Workers'));
|
||||
o.datatype = 'uinteger';
|
||||
o.default = '5';
|
||||
o.rmempty = false;
|
||||
|
||||
o = s.option(form.Value, 'upload_max_retry', _('Upload Max Retry'));
|
||||
o = s.taboption('tasks', form.Value, 'upload_max_retry', _('Upload Max Retry'));
|
||||
o.datatype = 'uinteger';
|
||||
o.default = '0';
|
||||
o.rmempty = false;
|
||||
|
||||
o = s.option(form.Value, 'copy_workers', _('Copy Workers'));
|
||||
o = s.taboption('tasks', form.Value, 'copy_workers', _('Copy Workers'));
|
||||
o.datatype = 'uinteger';
|
||||
o.default = '5';
|
||||
o.rmempty = false;
|
||||
|
||||
o = s.option(form.Value, 'copy_max_retry', _('Copy Max Retry'));
|
||||
o = s.taboption('tasks', form.Value, 'copy_max_retry', _('Copy Max Retry'));
|
||||
o.datatype = 'uinteger';
|
||||
o.default = '2';
|
||||
o.rmempty = false;
|
||||
|
||||
// cors
|
||||
s = m.section(form.TypedSection, 'alist', _('CORS Settings'));
|
||||
s.anonymous = true;
|
||||
|
||||
o = s.option(form.Value, 'cors_allow_origins', _('Allow Origins'));
|
||||
o = s.taboption('cors', form.Value, 'cors_allow_origins', _('Allow Origins'));
|
||||
o.default = '*';
|
||||
o.rmempty = false;
|
||||
|
||||
o = s.option(form.Value, 'cors_allow_methods', _('Allow Methods'));
|
||||
o = s.taboption('cors', form.Value, 'cors_allow_methods', _('Allow Methods'));
|
||||
o.default = '*';
|
||||
o.rmempty = false;
|
||||
|
||||
o = s.option(form.Value, 'cors_allow_headers', _('Allow Headers'));
|
||||
o = s.taboption('cors', form.Value, 'cors_allow_headers', _('Allow Headers'));
|
||||
o.default = '*';
|
||||
o.rmempty = false;
|
||||
|
||||
// s3
|
||||
s = m.section(form.TypedSection, 'alist', _('Object Storage'));
|
||||
s.anonymous = true;
|
||||
|
||||
o = s.option(form.Flag, 's3', _('Enabled S3'));
|
||||
o = s.taboption('s3', form.Flag, 's3', _('Enabled S3'));
|
||||
o.rmempty = false;
|
||||
|
||||
o = s.option(form.Value, 's3_port', _('Port'));
|
||||
o = s.taboption('s3', form.Value, 's3_port', _('Port'));
|
||||
o.datatype = 'and(port,min(1))';
|
||||
o.default = 5246;
|
||||
o.rmempty = false;
|
||||
o.depends('s3', '1');
|
||||
|
||||
o = s.option(form.Flag, 's3_ssl', _('Enable SSL'));
|
||||
o = s.taboption('s3', form.Flag, 's3_ssl', _('Enable SSL'));
|
||||
o.rmempty = false;
|
||||
|
||||
// ftp
|
||||
o = s.taboption('ftp', form.Flag, 'ftp', _('Enabled FTP'));
|
||||
o.rmempty = false;
|
||||
|
||||
o = s.taboption('ftp', form.Value, 'ftp_port', _('FTP Port'));
|
||||
o.datatype = 'and(port,min(1))';
|
||||
o.default = 5221;
|
||||
o.rmempty = false;
|
||||
|
||||
o = s.taboption('ftp', form.Value, 'find_pasv_port_attempts', _('Max retries on port conflict during passive transfer'));
|
||||
o.datatype = 'uinteger';
|
||||
o.default = '50';
|
||||
o.rmempty = false;
|
||||
|
||||
o = s.taboption('ftp', form.Flag, 'active_transfer_port_non_20', _('Enable non-20 port for active transfer'));
|
||||
o.rmempty = false;
|
||||
|
||||
o = s.taboption('ftp', form.Value, 'idle_timeout', _('Client Idle Timeout (seconds)'));
|
||||
o.datatype = 'uinteger';
|
||||
o.default = '900';
|
||||
o.rmempty = false;
|
||||
|
||||
o = s.taboption('ftp', form.Value, 'connection_timeout', _('Connection timeout (seconds)'));
|
||||
o.datatype = 'uinteger';
|
||||
o.default = '900';
|
||||
o.rmempty = false;
|
||||
|
||||
o = s.taboption('ftp', form.Flag, 'disable_active_mode', _('Disable active transfer mode'));
|
||||
o.rmempty = false;
|
||||
|
||||
o = s.taboption('ftp', form.Flag, 'default_transfer_binary', _('Binary mode transmission'));
|
||||
o.rmempty = false;
|
||||
|
||||
o = s.taboption('ftp', form.Flag, 'enable_active_conn_ip_check', _('Client IP check in active transfer mode'));
|
||||
o.rmempty = false;
|
||||
|
||||
o = s.taboption('ftp', form.Flag, 'enable_pasv_conn_ip_check', _('Client IP check in passive transfer mode'));
|
||||
o.rmempty = false;
|
||||
|
||||
// sftp
|
||||
o = s.taboption('sftp', form.Flag, 'sftp', _('Enabled SFTP'));
|
||||
o.rmempty = false;
|
||||
|
||||
o = s.taboption('sftp', form.Value, 'sftp_port', _('SFTP Port'));
|
||||
o.datatype = 'and(port,min(1))';
|
||||
o.default = 5222;
|
||||
o.rmempty = false;
|
||||
o.depends('s3', '1');
|
||||
|
||||
return m.render();
|
||||
}
|
||||
|
@ -23,6 +23,9 @@ msgstr "设置"
|
||||
msgid "Basic Setting"
|
||||
msgstr "基本设置"
|
||||
|
||||
msgid "Global Settings"
|
||||
msgstr "全局设置"
|
||||
|
||||
msgid "Logs"
|
||||
msgstr "日志"
|
||||
|
||||
@ -128,6 +131,12 @@ msgstr "最大并发连接数"
|
||||
msgid "0 is unlimited, It is recommend to set a low number of concurrency (10-20) for poor performance device"
|
||||
msgstr "默认 0 不限制,低性能设备建议设置较低的并发数(10-20)"
|
||||
|
||||
msgid "Max concurrency of local proxies"
|
||||
msgstr "本地代理最大并发数"
|
||||
|
||||
msgid "0 is unlimited, Limit the maximum concurrency of local agents. The default value is 64"
|
||||
msgstr "限制本地代理最大并发数,值为 0 表示不限制,默认值 64"
|
||||
|
||||
msgid "Site URL"
|
||||
msgstr "站点地址"
|
||||
|
||||
@ -221,3 +230,38 @@ msgstr "对象存储"
|
||||
msgid "Enabled S3"
|
||||
msgstr "启用 S3"
|
||||
|
||||
msgid "Enabled FTP"
|
||||
msgstr "启用 FTP"
|
||||
|
||||
msgid "FTP Port"
|
||||
msgstr "FTP 端口"
|
||||
|
||||
msgid "Max retries on port conflict during passive transfer"
|
||||
msgstr "被动传输端口冲突时重试最大次数"
|
||||
|
||||
msgid "Enable non-20 port for active transfer"
|
||||
msgstr "启用非 20 端口进行主动传输"
|
||||
|
||||
msgid "Client idle timeout (seconds)"
|
||||
msgstr "客户端空闲超时(秒)"
|
||||
|
||||
msgid "Connection timeout (seconds)"
|
||||
msgstr "连接超时(秒)"
|
||||
|
||||
msgid "Disable active transfer mode"
|
||||
msgstr "禁用主动传输模式"
|
||||
|
||||
msgid "Binary mode transmission"
|
||||
msgstr "二进制模式传输"
|
||||
|
||||
msgid "Client IP check in active transfer mode"
|
||||
msgstr "主动传输模式下客户端 IP 检查"
|
||||
|
||||
msgid "Client IP check in passive transfer mode"
|
||||
msgstr "被动传输模式下客户端 IP 检查"
|
||||
|
||||
msgid "Enabled SFTP"
|
||||
msgstr "启用 SFTP"
|
||||
|
||||
msgid "SFTP Port"
|
||||
msgstr "SFTP 端口"
|
||||
|
Loading…
Reference in New Issue
Block a user