129 lines
2.3 KiB
Go
129 lines
2.3 KiB
Go
package main
|
|
|
|
import (
|
|
"flag"
|
|
"fmt"
|
|
"os"
|
|
|
|
"goftp.io/ftpd/web"
|
|
|
|
ldbperm "gitea.com/goftp/leveldb-perm"
|
|
"github.com/lunny/log"
|
|
_ "github.com/shurcooL/vfsgen"
|
|
"github.com/syndtr/goleveldb/leveldb"
|
|
ldbauth "goftp.io/ftpd/modules/ldbauth"
|
|
"goftp.io/server/v2"
|
|
"goftp.io/server/v2/driver/file"
|
|
minio_driver "goftp.io/server/v2/driver/minio"
|
|
)
|
|
|
|
var (
|
|
version = "v0.3.0"
|
|
cfgPath string
|
|
)
|
|
|
|
func main() {
|
|
flag.StringVar(&cfgPath, "config", "",
|
|
"config file path, default is config.ini")
|
|
flag.Parse()
|
|
|
|
if err := initConfig(); err != nil {
|
|
fmt.Println(err)
|
|
return
|
|
}
|
|
|
|
if err := readConfigFromEnvs(); err != nil {
|
|
fmt.Println(err)
|
|
return
|
|
}
|
|
|
|
db, err := leveldb.OpenFile("./authperm.db", nil)
|
|
if err != nil {
|
|
fmt.Println(err)
|
|
return
|
|
}
|
|
|
|
var auth = &ldbauth.LDBAuth{
|
|
DB: db,
|
|
}
|
|
var perm server.Perm
|
|
if permType == "leveldb" {
|
|
perm = ldbperm.NewLDBPerm(db, "root", "root", os.ModePerm)
|
|
} else {
|
|
perm = server.NewSimplePerm("root", "root")
|
|
}
|
|
|
|
var driver server.Driver
|
|
switch driverType {
|
|
case "file":
|
|
_, err = os.Lstat(rootPath)
|
|
if os.IsNotExist(err) {
|
|
os.MkdirAll(rootPath, os.ModePerm)
|
|
} else if err != nil {
|
|
fmt.Println(err)
|
|
return
|
|
}
|
|
driver, err = file.NewDriver(rootPath)
|
|
if err != nil {
|
|
fmt.Println(err)
|
|
return
|
|
}
|
|
case "qiniu":
|
|
/*factory = qiniudriver.NewQiniuDriverFactory(
|
|
qiniu.AccessKey,
|
|
qiniu.SecretKey,
|
|
qiniu.Bucket,
|
|
)*/
|
|
case "minio":
|
|
driver, err = minio_driver.NewDriver(
|
|
minio.Endpoint,
|
|
minio.AccessKey,
|
|
minio.SecretKey,
|
|
"",
|
|
minio.Bucket,
|
|
minio.UseSSL,
|
|
)
|
|
if err != nil {
|
|
fmt.Println(err)
|
|
return
|
|
}
|
|
default:
|
|
fmt.Println("no driver type input")
|
|
return
|
|
}
|
|
|
|
// start web manage UI
|
|
if webCfg.Enabled {
|
|
web.DB = auth
|
|
web.Perm = perm
|
|
web.Driver = driver
|
|
|
|
go web.Web(webCfg.Listen, "static", "templates", admin, pass,
|
|
webCfg.TLS, webCfg.CertFile, webCfg.KeyFile)
|
|
}
|
|
|
|
opt := &server.Options{
|
|
Name: serv.Name,
|
|
Driver: driver,
|
|
Port: serv.Port,
|
|
Auth: auth,
|
|
Perm: perm,
|
|
}
|
|
|
|
opt.TLS = serv.TLS
|
|
opt.KeyFile = serv.KeyFile
|
|
opt.CertFile = serv.CertFile
|
|
opt.ExplicitFTPS = opt.TLS
|
|
|
|
// start ftp server
|
|
ftpServer, err := server.NewServer(opt)
|
|
if err != nil {
|
|
log.Fatal("Error creating server:", err)
|
|
}
|
|
log.Info("FTP Server", version)
|
|
err = ftpServer.ListenAndServe()
|
|
if err != nil {
|
|
log.Fatal("Error starting server:", err)
|
|
}
|
|
}
|