Add secubox-app-gitea and luci-app-gitea packages: secubox-app-gitea: - LXC container with Alpine 3.21 rootfs - Gitea 1.22.6 binary (auto-detect amd64/arm64/armv7) - HTTP (3000) and SSH (2222) ports - SQLite database (embedded) - giteactl: install/uninstall/update/backup/restore luci-app-gitea: - Cyberpunk themed dashboard - Repository browser with clone URLs - User management interface - Server and security settings - Backup/restore functionality - 18 RPCD methods Resource requirements: 256MB RAM minimum, ~100MB storage Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
245 lines
4.4 KiB
JavaScript
245 lines
4.4 KiB
JavaScript
'use strict';
|
|
'require rpc';
|
|
'require baseclass';
|
|
|
|
/**
|
|
* Gitea Platform API Module
|
|
* RPCD interface for Gitea Platform
|
|
*/
|
|
|
|
var callGetStatus = rpc.declare({
|
|
object: 'luci.gitea',
|
|
method: 'get_status',
|
|
expect: { result: {} }
|
|
});
|
|
|
|
var callGetStats = rpc.declare({
|
|
object: 'luci.gitea',
|
|
method: 'get_stats',
|
|
expect: { result: {} }
|
|
});
|
|
|
|
var callGetConfig = rpc.declare({
|
|
object: 'luci.gitea',
|
|
method: 'get_config',
|
|
expect: { result: {} }
|
|
});
|
|
|
|
var callSaveConfig = rpc.declare({
|
|
object: 'luci.gitea',
|
|
method: 'save_config',
|
|
params: ['http_port', 'ssh_port', 'http_host', 'data_path', 'memory_limit', 'enabled', 'app_name', 'domain', 'protocol', 'disable_registration', 'require_signin', 'landing_page'],
|
|
expect: { result: {} }
|
|
});
|
|
|
|
var callStart = rpc.declare({
|
|
object: 'luci.gitea',
|
|
method: 'start',
|
|
expect: { result: {} }
|
|
});
|
|
|
|
var callStop = rpc.declare({
|
|
object: 'luci.gitea',
|
|
method: 'stop',
|
|
expect: { result: {} }
|
|
});
|
|
|
|
var callRestart = rpc.declare({
|
|
object: 'luci.gitea',
|
|
method: 'restart',
|
|
expect: { result: {} }
|
|
});
|
|
|
|
var callInstall = rpc.declare({
|
|
object: 'luci.gitea',
|
|
method: 'install',
|
|
expect: { result: {} }
|
|
});
|
|
|
|
var callUninstall = rpc.declare({
|
|
object: 'luci.gitea',
|
|
method: 'uninstall',
|
|
expect: { result: {} }
|
|
});
|
|
|
|
var callUpdate = rpc.declare({
|
|
object: 'luci.gitea',
|
|
method: 'update',
|
|
expect: { result: {} }
|
|
});
|
|
|
|
var callGetLogs = rpc.declare({
|
|
object: 'luci.gitea',
|
|
method: 'get_logs',
|
|
params: ['lines'],
|
|
expect: { result: {} }
|
|
});
|
|
|
|
var callListRepos = rpc.declare({
|
|
object: 'luci.gitea',
|
|
method: 'list_repos',
|
|
expect: { result: {} }
|
|
});
|
|
|
|
var callGetRepo = rpc.declare({
|
|
object: 'luci.gitea',
|
|
method: 'get_repo',
|
|
params: ['name', 'owner'],
|
|
expect: { result: {} }
|
|
});
|
|
|
|
var callListUsers = rpc.declare({
|
|
object: 'luci.gitea',
|
|
method: 'list_users',
|
|
expect: { result: {} }
|
|
});
|
|
|
|
var callCreateAdmin = rpc.declare({
|
|
object: 'luci.gitea',
|
|
method: 'create_admin',
|
|
params: ['username', 'password', 'email'],
|
|
expect: { result: {} }
|
|
});
|
|
|
|
var callCreateBackup = rpc.declare({
|
|
object: 'luci.gitea',
|
|
method: 'create_backup',
|
|
expect: { result: {} }
|
|
});
|
|
|
|
var callListBackups = rpc.declare({
|
|
object: 'luci.gitea',
|
|
method: 'list_backups',
|
|
expect: { result: {} }
|
|
});
|
|
|
|
var callRestoreBackup = rpc.declare({
|
|
object: 'luci.gitea',
|
|
method: 'restore_backup',
|
|
params: ['file'],
|
|
expect: { result: {} }
|
|
});
|
|
|
|
var callGetInstallProgress = rpc.declare({
|
|
object: 'luci.gitea',
|
|
method: 'get_install_progress',
|
|
expect: { result: {} }
|
|
});
|
|
|
|
return baseclass.extend({
|
|
getStatus: function() {
|
|
return callGetStatus();
|
|
},
|
|
|
|
getStats: function() {
|
|
return callGetStats();
|
|
},
|
|
|
|
getConfig: function() {
|
|
return callGetConfig();
|
|
},
|
|
|
|
saveConfig: function(config) {
|
|
return callSaveConfig(
|
|
config.http_port,
|
|
config.ssh_port,
|
|
config.http_host,
|
|
config.data_path,
|
|
config.memory_limit,
|
|
config.enabled,
|
|
config.app_name,
|
|
config.domain,
|
|
config.protocol,
|
|
config.disable_registration,
|
|
config.require_signin,
|
|
config.landing_page
|
|
);
|
|
},
|
|
|
|
start: function() {
|
|
return callStart();
|
|
},
|
|
|
|
stop: function() {
|
|
return callStop();
|
|
},
|
|
|
|
restart: function() {
|
|
return callRestart();
|
|
},
|
|
|
|
install: function() {
|
|
return callInstall();
|
|
},
|
|
|
|
uninstall: function() {
|
|
return callUninstall();
|
|
},
|
|
|
|
update: function() {
|
|
return callUpdate();
|
|
},
|
|
|
|
getLogs: function(lines) {
|
|
return callGetLogs(lines || 100).then(function(res) {
|
|
return res.logs || [];
|
|
});
|
|
},
|
|
|
|
listRepos: function() {
|
|
return callListRepos().then(function(res) {
|
|
return {
|
|
repos: res.repos || [],
|
|
repo_root: res.repo_root || '/srv/gitea/git/repositories'
|
|
};
|
|
});
|
|
},
|
|
|
|
getRepo: function(name, owner) {
|
|
return callGetRepo(name, owner);
|
|
},
|
|
|
|
listUsers: function() {
|
|
return callListUsers().then(function(res) {
|
|
return res.users || [];
|
|
});
|
|
},
|
|
|
|
createAdmin: function(username, password, email) {
|
|
return callCreateAdmin(username, password, email);
|
|
},
|
|
|
|
createBackup: function() {
|
|
return callCreateBackup();
|
|
},
|
|
|
|
listBackups: function() {
|
|
return callListBackups().then(function(res) {
|
|
return res.backups || [];
|
|
});
|
|
},
|
|
|
|
restoreBackup: function(file) {
|
|
return callRestoreBackup(file);
|
|
},
|
|
|
|
getInstallProgress: function() {
|
|
return callGetInstallProgress();
|
|
},
|
|
|
|
getDashboardData: function() {
|
|
var self = this;
|
|
return Promise.all([
|
|
self.getStatus(),
|
|
self.getStats(),
|
|
self.getLogs(50)
|
|
]).then(function(results) {
|
|
return {
|
|
status: results[0] || {},
|
|
stats: results[1] || {},
|
|
logs: results[2] || []
|
|
};
|
|
});
|
|
}
|
|
});
|