change work dir

This commit is contained in:
Jacky 2021-08-28 14:55:06 +08:00
parent b37c1e8eac
commit ad421905a8
17 changed files with 231 additions and 618 deletions

View file

@ -3,7 +3,7 @@ package api
import ( import (
"encoding/json" "encoding/json"
"fmt" "fmt"
"github.com/0xJacky/Nginx-UI/tool" "github.com/0xJacky/Nginx-UI/server/tool"
"github.com/dustin/go-humanize" "github.com/dustin/go-humanize"
"github.com/gin-gonic/gin" "github.com/gin-gonic/gin"
"github.com/gorilla/websocket" "github.com/gorilla/websocket"

View file

@ -3,7 +3,7 @@ package api
import ( import (
"crypto/md5" "crypto/md5"
"fmt" "fmt"
"github.com/0xJacky/Nginx-UI/model" "github.com/0xJacky/Nginx-UI/server/model"
"github.com/gin-gonic/gin" "github.com/gin-gonic/gin"
"log" "log"
"net/http" "net/http"

View file

@ -1,7 +1,7 @@
package api package api
import ( import (
"github.com/0xJacky/Nginx-UI/model" "github.com/0xJacky/Nginx-UI/server/model"
"github.com/gin-gonic/gin" "github.com/gin-gonic/gin"
"github.com/unknwon/com" "github.com/unknwon/com"
"net/http" "net/http"
@ -21,4 +21,4 @@ func GetFileBackup(c *gin.Context) {
backup := model.GetBackup(com.StrTo(id).MustInt()) backup := model.GetBackup(com.StrTo(id).MustInt())
c.JSON(http.StatusOK, backup) c.JSON(http.StatusOK, backup)
} }

View file

@ -1,183 +1,182 @@
package api package api
import ( import (
"crypto/tls" "crypto/tls"
"encoding/json" "encoding/json"
"github.com/0xJacky/Nginx-UI/tool" "github.com/0xJacky/Nginx-UI/server/tool"
"github.com/gin-gonic/gin" "github.com/gin-gonic/gin"
"io" "io"
"log" "log"
"net/http" "net/http"
"os" "os"
) )
func CertInfo(c *gin.Context) { func CertInfo(c *gin.Context) {
domain := c.Param("domain") domain := c.Param("domain")
/*sslCertificatePath := tool.GetNginxConfPath("ssl/" + domain +"/fullchain.cer") /*sslCertificatePath := tool.GetNginxConfPath("ssl/" + domain +"/fullchain.cer")
content, err := ioutil.ReadFile(sslCertificatePath) content, err := ioutil.ReadFile(sslCertificatePath)
if err != nil { if err != nil {
ErrorHandler(c, err) ErrorHandler(c, err)
return return
} }
certDERBlock, _ := pem.Decode(content) certDERBlock, _ := pem.Decode(content)
if certDERBlock == nil { if certDERBlock == nil {
ErrorHandler(c, errors.New("pem decode error")) ErrorHandler(c, errors.New("pem decode error"))
return return
} }
var key *x509.Certificate var key *x509.Certificate
key, err = x509.ParseCertificate(certDERBlock.Bytes) key, err = x509.ParseCertificate(certDERBlock.Bytes)
if err != nil { if err != nil {
ErrorHandler(c, err) ErrorHandler(c, err)
return return
}*/ }*/
ts := &http.Transport{ ts := &http.Transport{
TLSClientConfig: &tls.Config{InsecureSkipVerify: true}, TLSClientConfig: &tls.Config{InsecureSkipVerify: true},
} }
client := &http.Client{Transport: ts} client := &http.Client{Transport: ts}
response, err := client.Get("https://" + domain) response, err := client.Get("https://" + domain)
if err != nil { if err != nil {
ErrorHandler(c, err) ErrorHandler(c, err)
return return
} }
defer func(Body io.ReadCloser) { defer func(Body io.ReadCloser) {
err = Body.Close() err = Body.Close()
if err != nil { if err != nil {
ErrorHandler(c, err) ErrorHandler(c, err)
return return
} }
}(response.Body) }(response.Body)
key := response.TLS.PeerCertificates[0] key := response.TLS.PeerCertificates[0]
c.JSON(http.StatusOK, gin.H{ c.JSON(http.StatusOK, gin.H{
"subject_name": key.Subject.CommonName, "subject_name": key.Subject.CommonName,
"issuer_name": key.Issuer.CommonName, "issuer_name": key.Issuer.CommonName,
"not_after": key.NotAfter, "not_after": key.NotAfter,
"not_before": key.NotBefore, "not_before": key.NotBefore,
}) })
} }
func IssueCert(c *gin.Context) { func IssueCert(c *gin.Context) {
domain := c.Param("domain") domain := c.Param("domain")
// upgrade http to websocket // upgrade http to websocket
ws, err := upGrader.Upgrade(c.Writer, c.Request, nil) ws, err := upGrader.Upgrade(c.Writer, c.Request, nil)
if err != nil { if err != nil {
return return
} }
defer ws.Close() defer ws.Close()
for { for {
// read // read
mt, message, err := ws.ReadMessage() mt, message, err := ws.ReadMessage()
if err != nil { if err != nil {
break break
} }
if string(message) == "go" { if string(message) == "go" {
var m []byte var m []byte
err = tool.IssueCert(domain) err = tool.IssueCert(domain)
if err != nil { if err != nil {
m, err = json.Marshal(gin.H{ m, err = json.Marshal(gin.H{
"status": "error", "status": "error",
"message": err.Error(), "message": err.Error(),
}) })
if err != nil { if err != nil {
log.Println(err) log.Println(err)
return return
} }
err = ws.WriteMessage(mt, m) err = ws.WriteMessage(mt, m)
if err != nil { if err != nil {
log.Println(err) log.Println(err)
return return
} }
log.Println(err) log.Println(err)
return return
} }
sslCertificatePath := tool.GetNginxConfPath("ssl/" + domain + "/fullchain.cer") sslCertificatePath := tool.GetNginxConfPath("ssl/" + domain + "/fullchain.cer")
_, err = os.Stat(sslCertificatePath) _, err = os.Stat(sslCertificatePath)
if err != nil { if err != nil {
log.Println(err) log.Println(err)
return return
} }
log.Println("[found]", "fullchain.cer") log.Println("[found]", "fullchain.cer")
m, err = json.Marshal(gin.H{ m, err = json.Marshal(gin.H{
"status": "success", "status": "success",
"message": "[found] fullchain.cer", "message": "[found] fullchain.cer",
}) })
if err != nil { if err != nil {
log.Println(err) log.Println(err)
return return
} }
err = ws.WriteMessage(mt, m) err = ws.WriteMessage(mt, m)
if err != nil { if err != nil {
log.Println(err) log.Println(err)
return return
} }
sslCertificateKeyPath := tool.GetNginxConfPath("ssl/" + domain +"/" + domain + ".key") sslCertificateKeyPath := tool.GetNginxConfPath("ssl/" + domain + "/" + domain + ".key")
_, err = os.Stat(sslCertificateKeyPath) _, err = os.Stat(sslCertificateKeyPath)
if err != nil { if err != nil {
log.Println(err) log.Println(err)
return return
} }
log.Println("[found]", "cert key") log.Println("[found]", "cert key")
m, err = json.Marshal(gin.H{ m, err = json.Marshal(gin.H{
"status": "success", "status": "success",
"message": "[found] cert key", "message": "[found] cert key",
}) })
if err != nil { if err != nil {
log.Println(err) log.Println(err)
} }
err = ws.WriteMessage(mt, m) err = ws.WriteMessage(mt, m)
if err != nil { if err != nil {
log.Println(err) log.Println(err)
} }
log.Println("申请成功") log.Println("申请成功")
m, err = json.Marshal(gin.H{ m, err = json.Marshal(gin.H{
"status": "success", "status": "success",
"message": "申请成功", "message": "申请成功",
"ssl_certificate": sslCertificatePath, "ssl_certificate": sslCertificatePath,
"ssl_certificate_key": sslCertificateKeyPath, "ssl_certificate_key": sslCertificateKeyPath,
}) })
if err != nil { if err != nil {
log.Println(err) log.Println(err)
} }
err = ws.WriteMessage(mt, m) err = ws.WriteMessage(mt, m)
if err != nil { if err != nil {
log.Println(err) log.Println(err)
} }
} }
} }
} }

View file

@ -1,7 +1,7 @@
package api package api
import ( import (
"github.com/0xJacky/Nginx-UI/tool" "github.com/0xJacky/Nginx-UI/server/tool"
"github.com/gin-gonic/gin" "github.com/gin-gonic/gin"
"io/ioutil" "io/ioutil"
"log" "log"

View file

@ -1,7 +1,7 @@
package api package api
import ( import (
"github.com/0xJacky/Nginx-UI/tool" "github.com/0xJacky/Nginx-UI/server/tool"
"github.com/gin-gonic/gin" "github.com/gin-gonic/gin"
"io/ioutil" "io/ioutil"
"net/http" "net/http"

View file

@ -1,7 +1,7 @@
package api package api
import ( import (
"github.com/0xJacky/Nginx-UI/settings" "github.com/0xJacky/Nginx-UI/server/settings"
"github.com/gin-gonic/gin" "github.com/gin-gonic/gin"
"io/ioutil" "io/ioutil"
"net/http" "net/http"

View file

@ -1,25 +1,16 @@
module github.com/0xJacky/Nginx-UI module github.com/0xJacky/Nginx-UI/server
go 1.15 go 1.16
require ( require (
github.com/dgrijalva/jwt-go v3.2.0+incompatible github.com/dgrijalva/jwt-go v3.2.0+incompatible
github.com/dustin/go-humanize v1.0.0 github.com/dustin/go-humanize v1.0.0
github.com/gin-gonic/gin v1.7.2 github.com/gin-gonic/gin v1.7.4
github.com/go-acme/lego/v4 v4.4.0 github.com/go-acme/lego/v4 v4.4.0
github.com/go-playground/validator/v10 v10.7.0 // indirect
github.com/golang/protobuf v1.5.2 // indirect
github.com/gorilla/websocket v1.4.2 github.com/gorilla/websocket v1.4.2
github.com/json-iterator/go v1.1.11 // indirect github.com/mackerelio/go-osstat v0.2.0
github.com/leodido/go-urn v1.2.1 // indirect
github.com/mackerelio/go-osstat v0.1.0
github.com/mattn/go-isatty v0.0.13 // indirect
github.com/mattn/go-sqlite3 v2.0.3+incompatible // indirect
github.com/minio/minio v0.0.0-20210316030313-6160188bf32a
github.com/unknwon/com v1.0.1 github.com/unknwon/com v1.0.1
golang.org/x/sys v0.0.0-20210217105451-b926d437f341 // indirect
golang.org/x/text v0.3.6 // indirect
gopkg.in/ini.v1 v1.62.0 gopkg.in/ini.v1 v1.62.0
gorm.io/driver/sqlite v1.1.4 gorm.io/driver/sqlite v1.1.4
gorm.io/gorm v1.20.12 gorm.io/gorm v1.21.14
) )

File diff suppressed because it is too large Load diff

View file

@ -1,10 +1,10 @@
package main package main
import ( import (
"github.com/0xJacky/Nginx-UI/model" "github.com/0xJacky/Nginx-UI/server/model"
"github.com/0xJacky/Nginx-UI/router" "github.com/0xJacky/Nginx-UI/server/router"
"github.com/0xJacky/Nginx-UI/settings" "github.com/0xJacky/Nginx-UI/server/settings"
"github.com/0xJacky/Nginx-UI/tool" "github.com/0xJacky/Nginx-UI/server/tool"
"log" "log"
) )

View file

@ -1,7 +1,7 @@
package model package model
import ( import (
"github.com/0xJacky/Nginx-UI/settings" "github.com/0xJacky/Nginx-UI/server/settings"
"github.com/dgrijalva/jwt-go" "github.com/dgrijalva/jwt-go"
"time" "time"
) )

View file

@ -2,8 +2,8 @@ package router
import ( import (
"encoding/base64" "encoding/base64"
"github.com/0xJacky/Nginx-UI/api" "github.com/0xJacky/Nginx-UI/server/api"
"github.com/0xJacky/Nginx-UI/model" "github.com/0xJacky/Nginx-UI/server/model"
"github.com/gin-gonic/gin" "github.com/gin-gonic/gin"
"net/http" "net/http"
) )

View file

@ -2,7 +2,7 @@ package test
import ( import (
"fmt" "fmt"
"github.com/0xJacky/Nginx-UI/tool" "github.com/0xJacky/Nginx-UI/server/tool"
"io/ioutil" "io/ioutil"
"log" "log"
"os" "os"

View file

@ -1,62 +1,62 @@
package test package test
import ( import (
"fmt" "fmt"
humanize "github.com/dustin/go-humanize" humanize "github.com/dustin/go-humanize"
"github.com/mackerelio/go-osstat/cpu" "github.com/mackerelio/go-osstat/cpu"
"github.com/mackerelio/go-osstat/memory" "github.com/mackerelio/go-osstat/disk"
"github.com/minio/minio/pkg/disk" "github.com/mackerelio/go-osstat/memory"
"os" "os"
"runtime" "runtime"
"testing" "testing"
"time" "time"
) )
func TestGetArch(t *testing.T) { func TestGetArch(t *testing.T) {
fmt.Println("os:", runtime.GOOS) fmt.Println("os:", runtime.GOOS)
fmt.Println("threads:", runtime.GOMAXPROCS(0)) fmt.Println("threads:", runtime.GOMAXPROCS(0))
memoryStat, err := memory.Get() memoryStat, err := memory.Get()
if err != nil { if err != nil {
fmt.Fprintf(os.Stderr, "%s\n", err) fmt.Fprintf(os.Stderr, "%s\n", err)
return return
} }
fmt.Println("memory total:", humanize.Bytes(memoryStat.Total)) fmt.Println("memory total:", humanize.Bytes(memoryStat.Total))
fmt.Println("memory used:", humanize.Bytes(memoryStat.Used)) fmt.Println("memory used:", humanize.Bytes(memoryStat.Used))
fmt.Println("memory cached:", humanize.Bytes(memoryStat.Cached)) fmt.Println("memory cached:", humanize.Bytes(memoryStat.Cached))
fmt.Println("memory free:", humanize.Bytes(memoryStat.Free)) fmt.Println("memory free:", humanize.Bytes(memoryStat.Free))
before, err := cpu.Get() before, err := cpu.Get()
if err != nil { if err != nil {
fmt.Println(err) fmt.Println(err)
} }
time.Sleep(time.Duration(1) * time.Second) time.Sleep(time.Duration(1) * time.Second)
after, err := cpu.Get() after, err := cpu.Get()
if err != nil { if err != nil {
fmt.Println(err) fmt.Println(err)
} }
total := float64(after.Total - before.Total) total := float64(after.Total - before.Total)
fmt.Printf("cpu user: %f %%\n", float64(after.User-before.User)/total*100) fmt.Printf("cpu user: %f %%\n", float64(after.User-before.User)/total*100)
fmt.Printf("cpu system: %f %%\n", float64(after.System-before.System)/total*100) fmt.Printf("cpu system: %f %%\n", float64(after.System-before.System)/total*100)
fmt.Printf("cpu idle: %f %%\n", float64(after.Idle-before.Idle)/total*100) fmt.Printf("cpu idle: %f %%\n", float64(after.Idle-before.Idle)/total*100)
err = diskUsage(".") err = diskUsage(".")
if err != nil { if err != nil {
fmt.Println(err) fmt.Println(err)
} }
} }
func diskUsage(path string) error { func diskUsage(path string) error {
di, err := disk.GetInfo(path) di, err := disk.GetInfo(path)
if err != nil { if err != nil {
return err return err
} }
percentage := (float64(di.Total-di.Free) / float64(di.Total)) * 100 percentage := (float64(di.Total-di.Free) / float64(di.Total)) * 100
fmt.Printf("%s of %s disk space used (%0.2f%%)\n", fmt.Printf("%s of %s disk space used (%0.2f%%)\n",
humanize.Bytes(di.Total-di.Free), humanize.Bytes(di.Total-di.Free),
humanize.Bytes(di.Total), humanize.Bytes(di.Total),
percentage, percentage,
) )
return nil return nil
} }

View file

@ -2,7 +2,7 @@ package test
import ( import (
"fmt" "fmt"
"github.com/0xJacky/Nginx-UI/tool" "github.com/0xJacky/Nginx-UI/server/tool"
"log" "log"
"os" "os"
"os/exec" "os/exec"

View file

@ -3,7 +3,7 @@ package tool
import ( import (
"fmt" "fmt"
"github.com/dustin/go-humanize" "github.com/dustin/go-humanize"
"github.com/minio/minio/pkg/disk" "github.com/mackerelio/go-osstat/disk"
"strconv" "strconv"
) )
@ -14,7 +14,6 @@ func DiskUsage(path string) (string, string, float64, error) {
} }
percentage := (float64(di.Total-di.Free) / float64(di.Total)) * 100 percentage := (float64(di.Total-di.Free) / float64(di.Total)) * 100
percentage, _ = strconv.ParseFloat(fmt.Sprintf("%.2f", percentage), 64) percentage, _ = strconv.ParseFloat(fmt.Sprintf("%.2f", percentage), 64)
return humanize.Bytes(di.Total-di.Free), humanize.Bytes(di.Total), return humanize.Bytes(di.Total-di.Free), humanize.Bytes(di.Total),
percentage, nil percentage, nil
} }

View file

@ -5,7 +5,7 @@ import (
"crypto/ecdsa" "crypto/ecdsa"
"crypto/elliptic" "crypto/elliptic"
"crypto/rand" "crypto/rand"
"github.com/0xJacky/Nginx-UI/settings" "github.com/0xJacky/Nginx-UI/server/settings"
"github.com/go-acme/lego/v4/certcrypto" "github.com/go-acme/lego/v4/certcrypto"
"github.com/go-acme/lego/v4/certificate" "github.com/go-acme/lego/v4/certificate"
"github.com/go-acme/lego/v4/challenge/http01" "github.com/go-acme/lego/v4/challenge/http01"