1
0
mirror of https://github.com/1Panel-dev/1Panel.git synced 2025-01-31 14:08:06 +08:00

fix: 终端支持 https

This commit is contained in:
ssongliu 2023-03-08 17:02:06 +08:00 committed by ssongliu
parent 2061e00b29
commit 1b862253bd
11 changed files with 36 additions and 15 deletions

View File

@ -11,6 +11,7 @@ import (
"github.com/1Panel-dev/1Panel/backend/app/dto"
"github.com/1Panel-dev/1Panel/backend/app/model"
"github.com/1Panel-dev/1Panel/backend/app/repo"
"github.com/1Panel-dev/1Panel/backend/buserr"
"github.com/1Panel-dev/1Panel/backend/constant"
"github.com/1Panel-dev/1Panel/backend/global"
"github.com/1Panel-dev/1Panel/backend/utils/cmd"
@ -108,7 +109,7 @@ func handleRedisRecover(redisInfo *repo.RootInfo, recoverFile string, isRollback
return err
}
if (appendonly == "yes" && !strings.HasSuffix(recoverFile, ".tar.gz")) || (appendonly != "yes" && !strings.HasSuffix(recoverFile, ".rdb")) {
return fmt.Errorf("recover redis with appendonly=%s from file %s format error", appendonly, recoverFile)
return buserr.New(constant.ErrTypeOfRedis)
}
global.LOG.Infof("appendonly in redis conf is %s", appendonly)
isOk := false
@ -140,7 +141,7 @@ func handleRedisRecover(redisInfo *repo.RootInfo, recoverFile string, isRollback
return err
}
if appendonly == "yes" {
redisDataDir := fmt.Sprintf("%s/%s/%s/data/", constant.AppInstallDir, "redis", redisInfo.Name)
redisDataDir := fmt.Sprintf("%s/%s/%s/data", constant.AppInstallDir, "redis", redisInfo.Name)
if err := handleUnTar(recoverFile, redisDataDir); err != nil {
return err
}

View File

@ -245,10 +245,12 @@ func handleTar(sourceDir, targetDir, name, exclusionRules string) error {
path = sourceDir
}
global.LOG.Debugf("tar zcvf %s %s %s \n", targetDir+"/"+name, excludeRules, path)
stdout, err := cmd.Execf("tar zcvf %s %s %s", targetDir+"/"+name, excludeRules, path)
commands := fmt.Sprintf("tar zcvf %s %s %s", targetDir+"/"+name, excludeRules, path)
global.LOG.Debug(commands)
stdout, err := cmd.Exec(commands)
if err != nil {
return errors.New(string(stdout))
global.LOG.Errorf("do handle tar failed, stdout: %s, err: %v", stdout, err)
return errors.New(stdout)
}
return nil
}
@ -260,9 +262,12 @@ func handleUnTar(sourceFile, targetDir string) error {
}
}
stdout, err := cmd.Execf("tar zxvfC %s %s", sourceFile, targetDir)
commands := fmt.Sprintf("tar zxvfC %s %s", sourceFile, targetDir)
global.LOG.Debug(commands)
stdout, err := cmd.Exec(commands)
if err != nil {
return errors.New(string(stdout))
global.LOG.Errorf("do handle untar failed, stdout: %s, err: %v", stdout, err)
return errors.New(stdout)
}
return nil
}

View File

@ -87,3 +87,8 @@ var (
ErrUserIsExist = "ErrUserIsExist"
ErrDatabaseIsExist = "ErrDatabaseIsExist"
)
//redis
var (
ErrTypeOfRedis = "ErrTypeOfRedis"
)

View File

@ -46,4 +46,7 @@ ErrEmailIsExist: 'Email is already exist'
#mysql
ErrUserIsExist: "The current user already exists. Please enter a new user"
ErrDatabaseIsExist: "The current database already exists. Please enter a new database"
ErrDatabaseIsExist: "The current database already exists. Please enter a new database"
#redis
ErrTypeOfRedis: "The recovery file type does not match the current persistence mode. Modify the file type and try again"

View File

@ -46,4 +46,7 @@ ErrEmailIsExist: '邮箱已存在'
#mysql
ErrUserIsExist: "当前用户已存在,请重新输入"
ErrDatabaseIsExist: "当前数据库已存在,请重新输入"
ErrDatabaseIsExist: "当前数据库已存在,请重新输入"
#redis
ErrTypeOfRedis: "恢复文件类型与当前持久化方式不符,请修改后重试"

View File

@ -1,6 +1,6 @@
// Generated by 'unplugin-auto-import'
// We suggest you to commit this file into source control
declare global {
const ElMessageBox: typeof import('element-plus/es')['ElMessageBox']
const ElMessageBox: typeof import('element-plus/es')['ElMessageBox'];
}
export {}
export {};

View File

@ -115,6 +115,7 @@ const initTerm = (formEl: FormInstance | undefined) => {
formEl.validate(async (valid) => {
if (!valid) return;
let href = window.location.href;
let protocol = href.split('//')[0] === 'http:' ? 'ws' : 'wss';
let ipLocal = href.split('//')[1].split('/')[0];
terminalOpen.value = true;
let ifm = document.getElementById('terminal-exec') as HTMLInputElement | null;
@ -133,7 +134,7 @@ const initTerm = (formEl: FormInstance | undefined) => {
if (ifm) {
term.open(ifm);
terminalSocket = new WebSocket(
`ws://${ipLocal}/api/v1/containers/exec?containerid=${form.containerID}&cols=${term.cols}&rows=${term.rows}&user=${form.user}&command=${form.command}`,
`${protocol}://${ipLocal}/api/v1/containers/exec?containerid=${form.containerID}&cols=${term.cols}&rows=${term.rows}&user=${form.user}&command=${form.command}`,
);
terminalSocket.onopen = runRealTerminal;
terminalSocket.onmessage = onWSReceive;

View File

@ -61,6 +61,7 @@ const closeRealTerminal = (ev: CloseEvent) => {
const initTerm = () => {
let ifm = document.getElementById('terminal-exec') as HTMLInputElement | null;
let href = window.location.href;
let protocol = href.split('//')[0] === 'http:' ? 'ws' : 'wss';
let ipLocal = href.split('//')[1].split('/')[0];
term = new Terminal({
lineHeight: 1.2,
@ -77,7 +78,7 @@ const initTerm = () => {
if (ifm) {
term.open(ifm);
terminalSocket = new WebSocket(
`ws://${ipLocal}/api/v1/databases/redis/exec?cols=${term.cols}&rows=${term.rows}`,
`${protocol}://${ipLocal}/api/v1/databases/redis/exec?cols=${term.cols}&rows=${term.rows}`,
);
terminalSocket.onopen = runRealTerminal;
terminalSocket.onmessage = onWSReceive;

View File

@ -54,8 +54,9 @@ const onClose = () => {};
const initProcess = () => {
let href = window.location.href;
let protocol = href.split('//')[0] === 'http:' ? 'ws' : 'wss';
let ipLocal = href.split('//')[1].split('/')[0];
processSocket = new WebSocket(`ws://${ipLocal}/api/v1/files/ws`);
processSocket = new WebSocket(`${protocol}://${ipLocal}/api/v1/files/ws`);
processSocket.onopen = onOpenProcess;
processSocket.onmessage = onMessage;
processSocket.onerror = onerror;

View File

@ -84,6 +84,7 @@ const initErrorTerm = (errorInfo: string) => {
const initTerm = () => {
let ifm = document.getElementById('terminal-' + terminalID.value) as HTMLInputElement | null;
let href = window.location.href;
let protocol = href.split('//')[0] === 'http:' ? 'ws' : 'wss';
let ipLocal = href.split('//')[1].split('/')[0];
term = new Terminal({
lineHeight: 1.2,
@ -100,7 +101,7 @@ const initTerm = () => {
if (ifm) {
term.open(ifm);
terminalSocket = new WebSocket(
`ws://${ipLocal}/api/v1/terminals?id=${wsID.value}&cols=${term.cols}&rows=${term.rows}`,
`${protocol}://${ipLocal}/api/v1/terminals?id=${wsID.value}&cols=${term.cols}&rows=${term.rows}`,
);
terminalSocket.onopen = runRealTerminal;
terminalSocket.onmessage = onWSReceive;