initial commit
This commit is contained in:
125
app/routes.go
Normal file
125
app/routes.go
Normal file
@@ -0,0 +1,125 @@
|
||||
package app
|
||||
|
||||
import (
|
||||
"encoding/base64"
|
||||
"log"
|
||||
"net/http"
|
||||
"strconv"
|
||||
"strings"
|
||||
|
||||
"github.com/go-chi/chi/v5"
|
||||
)
|
||||
|
||||
var hosts = []string{
|
||||
"185.231.245.25",
|
||||
"46.243.6.125",
|
||||
}
|
||||
|
||||
func AddNode(w http.ResponseWriter, r *http.Request) {
|
||||
type AddNodeReq struct {
|
||||
Token string `json:"token"`
|
||||
URL string `json:"url"`
|
||||
}
|
||||
req, err := ReadBody[AddNodeReq](r.Body)
|
||||
if err != nil {
|
||||
log.Println(err)
|
||||
}
|
||||
rep := NewNodeRepository(db)
|
||||
node, err := rep.Create(req.Token, req.URL)
|
||||
WriteResponseOrError(w, node, err)
|
||||
}
|
||||
func GetNodes(w http.ResponseWriter, r *http.Request) {
|
||||
rep := NewNodeRepository(db)
|
||||
nodes, err := rep.All()
|
||||
WriteResponseOrError(w, nodes, err)
|
||||
}
|
||||
func GetNodeById(w http.ResponseWriter, r *http.Request) {
|
||||
id := chi.URLParam(r, "id")
|
||||
nodeId, err := strconv.Atoi(id)
|
||||
if err != nil {
|
||||
WriteError(w, err)
|
||||
return
|
||||
}
|
||||
rep := NewNodeRepository(db)
|
||||
node, err := rep.Find(nodeId)
|
||||
WriteResponseOrError(w, node, err)
|
||||
}
|
||||
|
||||
func AddUser(w http.ResponseWriter, r *http.Request) {
|
||||
rep := NewNodeRepository(db)
|
||||
nodes, err := rep.All()
|
||||
if err != nil {
|
||||
WriteError(w, err)
|
||||
return
|
||||
}
|
||||
|
||||
type AddUserReq struct {
|
||||
Username string `json:"username"`
|
||||
Password string `json:"password"`
|
||||
}
|
||||
req, err := ReadBody[AddUserReq](r.Body)
|
||||
if err != nil {
|
||||
WriteError(w, err)
|
||||
return
|
||||
}
|
||||
|
||||
var user User
|
||||
for _, node := range nodes {
|
||||
manager := NewNodeManager(node)
|
||||
user, err = manager.AddUser(req.Username, req.Password)
|
||||
if err != nil {
|
||||
WriteError(w, err)
|
||||
return
|
||||
}
|
||||
}
|
||||
WriteResponseOrError(w, user, err)
|
||||
}
|
||||
func Sub(w http.ResponseWriter, r *http.Request) {
|
||||
idS := chi.URLParam(r, "id")
|
||||
userId, err := strconv.ParseUint(idS, 10, 32)
|
||||
if err != nil {
|
||||
log.Println(err)
|
||||
return
|
||||
}
|
||||
|
||||
rep := NewNodeRepository(db)
|
||||
nodes, err := rep.All()
|
||||
if err != nil {
|
||||
WriteError(w, err)
|
||||
return
|
||||
}
|
||||
|
||||
subs := make([]string, 0)
|
||||
for _, node := range nodes {
|
||||
manager := NewNodeManager(node)
|
||||
conf, hystConf, err := manager.LoadConfig()
|
||||
if err != nil {
|
||||
WriteError(w, err)
|
||||
continue
|
||||
}
|
||||
key, err := manager.GetUserKey(userId)
|
||||
if err != nil {
|
||||
WriteError(w, err)
|
||||
return
|
||||
}
|
||||
user, err := manager.GetUser(userId)
|
||||
if err != nil {
|
||||
WriteError(w, err)
|
||||
return
|
||||
}
|
||||
hystUrl := buildSubUrl(conf, hystConf, key, user)
|
||||
subs = append(subs, hystUrl)
|
||||
}
|
||||
|
||||
sub := []byte(base64.StdEncoding.EncodeToString([]byte(strings.Join(subs, "\n"))))
|
||||
w.Header().Set("Content-Type", "text/plain; charset=utf-8")
|
||||
w.Header().Set("Content-Length", strconv.Itoa(len(sub)))
|
||||
w.Header().Set("Content-Disposition", `attachment; filename="ScuroNeko"`)
|
||||
w.Header().Set("profile-web-page-url", "http://185.231.245.25:9997/sub/1")
|
||||
w.Header().Set("support-url", "https://t.me/scuroneko")
|
||||
w.Header().Set("profile-title", "base64:YmFuLm5peDEzLnB3")
|
||||
w.Header().Set("profile-update-interval", "12")
|
||||
w.Header().Set("subscription-userinfo", "upload=0; download=197782510450; total=0; expire=0")
|
||||
w.WriteHeader(200)
|
||||
w.Write(sub)
|
||||
}
|
||||
Reference in New Issue
Block a user