Files
NextZen-UserService/main.go
T

110 lines
2.9 KiB
Go
Raw Normal View History

2022-08-04 19:14:53 -04:00
package main
import (
"flag"
"fmt"
"net"
"net/http"
2022-08-06 22:52:14 -04:00
"os"
2022-09-28 17:30:34 -04:00
"time"
2022-08-04 19:14:53 -04:00
"github.com/IceWhaleTech/CasaOS-Common/model"
2022-08-04 19:14:53 -04:00
"github.com/IceWhaleTech/CasaOS-Common/utils/logger"
2022-09-28 17:38:35 -04:00
"github.com/IceWhaleTech/CasaOS-UserService/common"
2022-08-04 19:14:53 -04:00
"github.com/IceWhaleTech/CasaOS-UserService/pkg/config"
"github.com/IceWhaleTech/CasaOS-UserService/pkg/sqlite"
"github.com/IceWhaleTech/CasaOS-UserService/pkg/utils/encryption"
"github.com/IceWhaleTech/CasaOS-UserService/pkg/utils/random"
"github.com/IceWhaleTech/CasaOS-UserService/route"
"github.com/IceWhaleTech/CasaOS-UserService/service"
2022-09-06 19:13:00 -04:00
"github.com/coreos/go-systemd/daemon"
2022-08-25 17:36:24 -04:00
"go.uber.org/zap"
2022-08-04 19:14:53 -04:00
)
2022-09-01 23:09:54 +00:00
const localhost = "127.0.0.1"
2022-08-04 19:14:53 -04:00
func init() {
2022-08-06 22:52:14 -04:00
configFlag := flag.String("c", "", "config address")
dbFlag := flag.String("db", "", "db path")
resetUserFlag := flag.Bool("ru", false, "reset user")
userFlag := flag.String("user", "", "user name")
versionFlag := flag.Bool("v", false, "version")
2022-08-04 19:14:53 -04:00
flag.Parse()
2022-08-06 22:52:14 -04:00
if *versionFlag {
2022-08-31 00:29:50 -04:00
fmt.Printf("v%s\n", common.Version)
2022-08-06 22:52:14 -04:00
os.Exit(0)
}
2022-08-04 19:14:53 -04:00
config.InitSetup(*configFlag)
logger.LogInit(config.AppInfo.LogPath, config.AppInfo.LogSaveName, config.AppInfo.LogFileExt)
if len(*dbFlag) == 0 {
2022-08-28 20:40:51 -04:00
*dbFlag = config.AppInfo.DBPath
2022-08-04 19:14:53 -04:00
}
2022-08-06 22:52:14 -04:00
sqliteDB := sqlite.GetDb(*dbFlag)
2022-08-04 19:14:53 -04:00
service.MyService = service.NewService(sqliteDB, config.CommonInfo.RuntimePath)
2022-08-06 22:52:14 -04:00
if *resetUserFlag {
if userFlag == nil || len(*userFlag) == 0 {
2022-08-04 19:14:53 -04:00
fmt.Println("user is empty")
return
}
2022-08-06 22:52:14 -04:00
userData := service.MyService.User().GetUserAllInfoByName(*userFlag)
2022-08-04 19:14:53 -04:00
if userData.Id == 0 {
fmt.Println("user not exist")
return
}
2022-08-06 22:52:14 -04:00
2022-08-04 19:14:53 -04:00
password := random.RandomString(6, false)
userData.Password = encryption.GetMD5ByStr(password)
service.MyService.User().UpdateUserPassword(userData)
fmt.Println("User reset successful")
fmt.Println("UserName:" + userData.Username)
fmt.Println("Password:" + password)
}
2022-08-06 22:52:14 -04:00
}
func main() {
r := route.InitRouter()
2022-08-04 19:14:53 -04:00
listener, err := net.Listen("tcp", net.JoinHostPort(localhost, "0"))
if err != nil {
panic(err)
}
err = service.MyService.Gateway().CreateRoute(&model.Route{
2022-08-04 19:14:53 -04:00
Path: "/v1/users",
Target: "http://" + listener.Addr().String(),
})
if err != nil {
panic(err)
}
2022-09-06 19:13:00 -04:00
if supported, err := daemon.SdNotify(false, daemon.SdNotifyReady); err != nil {
logger.Error("Failed to notify systemd that user service is ready", zap.Any("error", err))
} else if supported {
logger.Info("Notified systemd that user service is ready")
} else {
logger.Info("This process is not running as a systemd service.")
}
2022-08-25 17:36:24 -04:00
logger.Info("User service is listening...", zap.Any("address", listener.Addr().String()))
2022-09-28 17:30:34 -04:00
s := &http.Server{
Handler: r,
ReadHeaderTimeout: 5 * time.Second, // fix G112: Potential slowloris attack (see https://github.com/securego/gosec)
}
err = s.Serve(listener) // not using http.serve() to fix G114: Use of net/http serve function that has no support for setting timeouts (see https://github.com/securego/gosec)
2022-08-04 19:14:53 -04:00
if err != nil {
panic(err)
}
}