feat: add API token to install output (#4322)
* feat: add API token to install output Add -getApiToken flag to the setting subcommand so shell scripts can retrieve the panel API token. Include the token in the install.sh completion banner for automation/deployment use. * fix(install): adapt -getApiToken CLI to multi-token service settingService.GetApiToken was removed when API tokens moved to a multi-row ApiTokenService. Switch the install-time CLI to list tokens and create one named "install" if none exist, preserving the `apiToken: <value>` output the install.sh grep depends on. --------- Co-authored-by: Sanaei <ho3ein.sanaei@gmail.com>
This commit is contained in:
@@ -763,6 +763,9 @@ config_after_install() {
|
|||||||
|
|
||||||
prompt_and_setup_ssl "${config_port}" "${config_webBasePath}" "${server_ip}"
|
prompt_and_setup_ssl "${config_port}" "${config_webBasePath}" "${server_ip}"
|
||||||
|
|
||||||
|
# Retrieve the API token for display
|
||||||
|
local config_apiToken=$(${xui_folder}/x-ui setting -getApiToken true | grep -Eo 'apiToken: .+' | awk '{print $2}')
|
||||||
|
|
||||||
# Display final credentials and access information
|
# Display final credentials and access information
|
||||||
echo ""
|
echo ""
|
||||||
echo -e "${green}═══════════════════════════════════════════${plain}"
|
echo -e "${green}═══════════════════════════════════════════${plain}"
|
||||||
@@ -773,6 +776,7 @@ config_after_install() {
|
|||||||
echo -e "${green}Port: ${config_port}${plain}"
|
echo -e "${green}Port: ${config_port}${plain}"
|
||||||
echo -e "${green}WebBasePath: ${config_webBasePath}${plain}"
|
echo -e "${green}WebBasePath: ${config_webBasePath}${plain}"
|
||||||
echo -e "${green}Access URL: ${SSL_SCHEME}://${SSL_HOST}:${config_port}/${config_webBasePath}${plain}"
|
echo -e "${green}Access URL: ${SSL_SCHEME}://${SSL_HOST}:${config_port}/${config_webBasePath}${plain}"
|
||||||
|
echo -e "${green}API Token: ${config_apiToken}${plain}"
|
||||||
echo -e "${green}═══════════════════════════════════════════${plain}"
|
echo -e "${green}═══════════════════════════════════════════${plain}"
|
||||||
echo -e "${yellow}⚠ IMPORTANT: Save these credentials securely!${plain}"
|
echo -e "${yellow}⚠ IMPORTANT: Save these credentials securely!${plain}"
|
||||||
if [[ "$SSL_SCHEME" == "https" ]]; then
|
if [[ "$SSL_SCHEME" == "https" ]]; then
|
||||||
|
|||||||
@@ -391,6 +391,28 @@ func GetListenIP(getListen bool) {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func GetApiToken(getApiToken bool) {
|
||||||
|
if !getApiToken {
|
||||||
|
return
|
||||||
|
}
|
||||||
|
apiTokenService := service.ApiTokenService{}
|
||||||
|
tokens, err := apiTokenService.List()
|
||||||
|
if err != nil {
|
||||||
|
fmt.Println("get apiToken failed, error info:", err)
|
||||||
|
return
|
||||||
|
}
|
||||||
|
if len(tokens) > 0 {
|
||||||
|
fmt.Println("apiToken:", tokens[0].Token)
|
||||||
|
return
|
||||||
|
}
|
||||||
|
created, err := apiTokenService.Create("install")
|
||||||
|
if err != nil {
|
||||||
|
fmt.Println("create apiToken failed, error info:", err)
|
||||||
|
return
|
||||||
|
}
|
||||||
|
fmt.Println("apiToken:", created.Token)
|
||||||
|
}
|
||||||
|
|
||||||
// migrateDb performs database migration operations for the 3x-ui panel.
|
// migrateDb performs database migration operations for the 3x-ui panel.
|
||||||
func migrateDb() {
|
func migrateDb() {
|
||||||
inboundService := service.InboundService{}
|
inboundService := service.InboundService{}
|
||||||
@@ -433,6 +455,7 @@ func main() {
|
|||||||
var reset bool
|
var reset bool
|
||||||
var show bool
|
var show bool
|
||||||
var getCert bool
|
var getCert bool
|
||||||
|
var getApiToken bool
|
||||||
var resetTwoFactor bool
|
var resetTwoFactor bool
|
||||||
settingCmd.BoolVar(&reset, "reset", false, "Reset all settings")
|
settingCmd.BoolVar(&reset, "reset", false, "Reset all settings")
|
||||||
settingCmd.BoolVar(&show, "show", false, "Display current settings")
|
settingCmd.BoolVar(&show, "show", false, "Display current settings")
|
||||||
@@ -444,6 +467,7 @@ func main() {
|
|||||||
settingCmd.BoolVar(&resetTwoFactor, "resetTwoFactor", false, "Reset two-factor authentication settings")
|
settingCmd.BoolVar(&resetTwoFactor, "resetTwoFactor", false, "Reset two-factor authentication settings")
|
||||||
settingCmd.BoolVar(&getListen, "getListen", false, "Display current panel listenIP IP")
|
settingCmd.BoolVar(&getListen, "getListen", false, "Display current panel listenIP IP")
|
||||||
settingCmd.BoolVar(&getCert, "getCert", false, "Display current certificate settings")
|
settingCmd.BoolVar(&getCert, "getCert", false, "Display current certificate settings")
|
||||||
|
settingCmd.BoolVar(&getApiToken, "getApiToken", false, "Display current API token")
|
||||||
settingCmd.StringVar(&webCertFile, "webCert", "", "Set path to public key file for panel")
|
settingCmd.StringVar(&webCertFile, "webCert", "", "Set path to public key file for panel")
|
||||||
settingCmd.StringVar(&webKeyFile, "webCertKey", "", "Set path to private key file for panel")
|
settingCmd.StringVar(&webKeyFile, "webCertKey", "", "Set path to private key file for panel")
|
||||||
settingCmd.StringVar(&tgbottoken, "tgbottoken", "", "Set token for Telegram bot")
|
settingCmd.StringVar(&tgbottoken, "tgbottoken", "", "Set token for Telegram bot")
|
||||||
@@ -501,6 +525,9 @@ func main() {
|
|||||||
if getCert {
|
if getCert {
|
||||||
GetCertificate(getCert)
|
GetCertificate(getCert)
|
||||||
}
|
}
|
||||||
|
if getApiToken {
|
||||||
|
GetApiToken(getApiToken)
|
||||||
|
}
|
||||||
if (tgbottoken != "") || (tgbotchatid != "") || (tgbotRuntime != "") {
|
if (tgbottoken != "") || (tgbotchatid != "") || (tgbotRuntime != "") {
|
||||||
updateTgbotSetting(tgbottoken, tgbotchatid, tgbotRuntime)
|
updateTgbotSetting(tgbottoken, tgbotchatid, tgbotRuntime)
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user