190 lines
4.8 KiB
Go
190 lines
4.8 KiB
Go
package main
|
|
|
|
import (
|
|
"encoding/json"
|
|
"flag"
|
|
"fmt"
|
|
"github.com/gobuffalo/packr"
|
|
"io"
|
|
"log"
|
|
"math/rand"
|
|
"net/http"
|
|
"os"
|
|
"os/signal"
|
|
"time"
|
|
)
|
|
|
|
func main() {
|
|
Logger = log.New(io.Writer(os.Stdout), "", log.Lshortfile|log.LstdFlags)
|
|
rand.Seed(time.Now().Unix())
|
|
var port string
|
|
var address string
|
|
flag.StringVar(&port, "port", "1443", "serve port")
|
|
flag.StringVar(&address, "listen", "", "listen address")
|
|
flag.StringVar(&configPath, "config", "config.conf", "config path")
|
|
flag.Parse()
|
|
|
|
fastLinkService = new(FastLinkService)
|
|
ReadConfig()
|
|
|
|
c := make(chan os.Signal)
|
|
signal.Notify(c, os.Interrupt, os.Kill)
|
|
go func() {
|
|
<-c //阻塞直至有信号传入
|
|
Logger.Println("Saving config")
|
|
SaveConfig()
|
|
Logger.Println("Save config done,exit now.")
|
|
os.Exit(0)
|
|
}()
|
|
|
|
go func() {
|
|
ticker := time.NewTicker(time.Minute)
|
|
for range ticker.C {
|
|
<-ticker.C
|
|
fastLinkService.KillAloneSignalSession()
|
|
fastLinkService.KillExpiredToken()
|
|
SaveConfig()
|
|
Logger.Println("Saving config")
|
|
ticker.Reset(time.Minute)
|
|
}
|
|
}()
|
|
|
|
http.HandleFunc("/admin/config", configHandler)
|
|
http.HandleFunc("/admin/addUser", addUserHandler)
|
|
http.HandleFunc("/admin/editUser", editUserHandler)
|
|
http.HandleFunc("/admin/removeUser", removeUserHandler)
|
|
http.HandleFunc("/admin/kickUser", kickUserHandler)
|
|
http.HandleFunc("/admin/removeDevice", removeDeviceHandler)
|
|
http.HandleFunc("/admin/removeCustomName", removeCustomNameHandler)
|
|
http.HandleFunc("/socket.io/", socketHandler)
|
|
http.HandleFunc("/fastLink/shareUrl/connect/check", checkHandler)
|
|
http.HandleFunc("/fastLink/device/deviceVerificationType", deviceVerificationTypeHandler)
|
|
http.HandleFunc("/fastLink/config/idTransfer", idTransferHandler)
|
|
http.HandleFunc("/fastLink/stream/record/close", closeHandler)
|
|
http.HandleFunc("/fastLink/user/loginForApp", loginForAppHandler)
|
|
http.HandleFunc("/fastLink/device/list", appListDeviceHandler)
|
|
http.HandleFunc("/fastLink/user/logout", logoutHandler)
|
|
http.HandleFunc("/fastLink/user/register", registerHandler)
|
|
http.HandleFunc("/fastLink/code/send", sendCodeHandler)
|
|
|
|
box := packr.NewBox("web")
|
|
http.Handle("/", http.FileServer(box))
|
|
|
|
err := http.ListenAndServeTLS(address+":"+port, "cert.crt", "private.key", nil)
|
|
//套nginx或Caddy可直接使用Http
|
|
//err := http.ListenAndServe(address+":"+port, nil)
|
|
if err != nil {
|
|
fmt.Print(err)
|
|
}
|
|
}
|
|
|
|
func socketHandler(w http.ResponseWriter, r *http.Request) {
|
|
clientType := r.FormValue("clientType")
|
|
|
|
if clientType == CLIENT_TYPE_CPP || clientType == CLIENT_TYPE_WEB {
|
|
signalHandler(w, r)
|
|
} else {
|
|
serviceHandler(w, r)
|
|
}
|
|
}
|
|
|
|
func configHandler(w http.ResponseWriter, r *http.Request) {
|
|
marshal, _ := json.Marshal(fastLinkService)
|
|
w.Write(marshal)
|
|
}
|
|
|
|
func addUserHandler(w http.ResponseWriter, r *http.Request) {
|
|
user := r.FormValue("user")
|
|
pass := r.FormValue("pass")
|
|
if user == "" {
|
|
w.Write([]byte("user is empty"))
|
|
return
|
|
}
|
|
if pass == "" {
|
|
w.Write([]byte("pass is empty"))
|
|
return
|
|
}
|
|
exist := fastLinkService.CheckUserExist(user)
|
|
if exist {
|
|
w.Write([]byte("user exist"))
|
|
return
|
|
}
|
|
fastLinkService.AddUser(user, pass)
|
|
w.Write([]byte("success"))
|
|
}
|
|
|
|
func editUserHandler(w http.ResponseWriter, r *http.Request) {
|
|
user := r.FormValue("user")
|
|
pass := r.FormValue("pass")
|
|
if user == "" {
|
|
w.Write([]byte("user is empty"))
|
|
return
|
|
}
|
|
if pass == "" {
|
|
w.Write([]byte("pass is empty"))
|
|
return
|
|
}
|
|
exist := fastLinkService.CheckUserExist(user)
|
|
if !exist {
|
|
w.Write([]byte("user not exist"))
|
|
return
|
|
}
|
|
fastLinkService.EditUser(user, pass)
|
|
w.Write([]byte("success"))
|
|
}
|
|
|
|
func removeUserHandler(w http.ResponseWriter, r *http.Request) {
|
|
user := r.FormValue("user")
|
|
if user == "" {
|
|
w.Write([]byte("user is empty"))
|
|
return
|
|
}
|
|
fastLinkService.removeUser(user)
|
|
fastLinkService.removeDevicesByUser(user)
|
|
fastLinkService.removeTokenByUser(user)
|
|
w.Write([]byte("success"))
|
|
}
|
|
|
|
func kickUserHandler(w http.ResponseWriter, r *http.Request) {
|
|
user := r.FormValue("user")
|
|
if user == "" {
|
|
w.Write([]byte("user is empty"))
|
|
return
|
|
}
|
|
fastLinkService.removeTokenByUser(user)
|
|
w.Write([]byte("success"))
|
|
}
|
|
|
|
func removeDeviceHandler(w http.ResponseWriter, r *http.Request) {
|
|
deviceNo := r.FormValue("deviceNo")
|
|
if deviceNo == "" {
|
|
w.Write([]byte("deviceNo is empty"))
|
|
return
|
|
}
|
|
device := fastLinkService.GetDeviceByNo(deviceNo)
|
|
if device != nil {
|
|
user := device.BelongUser
|
|
fastLinkService.removeDevice(deviceNo)
|
|
if user != "" {
|
|
notifyDeviceChange(user)
|
|
}
|
|
}
|
|
w.Write([]byte("success"))
|
|
}
|
|
|
|
func removeCustomNameHandler(w http.ResponseWriter, r *http.Request) {
|
|
deviceNo := r.FormValue("deviceNo")
|
|
if deviceNo == "" {
|
|
w.Write([]byte("deviceNo is empty"))
|
|
return
|
|
}
|
|
device := fastLinkService.GetDeviceByNo(deviceNo)
|
|
if device != nil {
|
|
device.CustomName = ""
|
|
if device.BelongUser != "" {
|
|
notifyDeviceChange(device.BelongUser)
|
|
}
|
|
}
|
|
w.Write([]byte("success"))
|
|
}
|