feat(web): add TDBMS client
This commit is contained in:
parent
77d1044742
commit
9828e0f213
49
web/tdbms-client.go
Normal file
49
web/tdbms-client.go
Normal file
@ -0,0 +1,49 @@
|
|||||||
|
package main
|
||||||
|
|
||||||
|
import (
|
||||||
|
"bytes"
|
||||||
|
"net"
|
||||||
|
)
|
||||||
|
|
||||||
|
// TDBMS connection struct
|
||||||
|
type TDBMSConnection struct {
|
||||||
|
conn net.Conn
|
||||||
|
}
|
||||||
|
|
||||||
|
// Connect to TDBMS server
|
||||||
|
func (tdbms *TDBMSConnection) Connect(domain, addr string) error {
|
||||||
|
c, err := net.Dial(domain, addr)
|
||||||
|
tdbms.conn = c
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
|
||||||
|
// Close connection to TDBMS server
|
||||||
|
func (tdbms *TDBMSConnection) Close() error {
|
||||||
|
return tdbms.conn.Close()
|
||||||
|
}
|
||||||
|
|
||||||
|
// Execute a TDB request
|
||||||
|
func (tdbms *TDBMSConnection) Query(db_name string, trc uint8, request_body string) []byte {
|
||||||
|
var err error
|
||||||
|
buffer := []byte{trc}
|
||||||
|
buffer = append(buffer, db_name...)
|
||||||
|
buffer = append(buffer, 0)
|
||||||
|
buffer = append(buffer, request_body...)
|
||||||
|
buffer = append(buffer, 0, 4)
|
||||||
|
_, err = tdbms.conn.Write(buffer)
|
||||||
|
if err != nil {
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
var response []byte
|
||||||
|
var resp_size int = -1
|
||||||
|
buffer = make([]byte, 8192)
|
||||||
|
for resp_size <= 0 {
|
||||||
|
_, err = tdbms.conn.Read(buffer)
|
||||||
|
if err != nil {
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
response = append(response, buffer...)
|
||||||
|
resp_size = bytes.IndexByte(response, 4)
|
||||||
|
}
|
||||||
|
return response[:resp_size-1]
|
||||||
|
}
|
||||||
@ -17,8 +17,13 @@ import (
|
|||||||
type JSON struct {
|
type JSON struct {
|
||||||
Status bool `json:"status,omitempty"`
|
Status bool `json:"status,omitempty"`
|
||||||
Token string `json:"token,omitempty"`
|
Token string `json:"token,omitempty"`
|
||||||
|
TRC uint8 `json:"trc,omitempty"`
|
||||||
|
TRDB string `json:"trdb,omitempty"`
|
||||||
|
TRB string `json:"trb,omitempty"`
|
||||||
}
|
}
|
||||||
|
|
||||||
|
var tdbms TDBMSConnection
|
||||||
|
|
||||||
const TOKEN_VALIDTIME = 604800
|
const TOKEN_VALIDTIME = 604800
|
||||||
|
|
||||||
var SID int64 = 0
|
var SID int64 = 0
|
||||||
@ -90,9 +95,9 @@ func HandlerAuth(w http.ResponseWriter, r *http.Request) {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
func HandlerTFM(w http.ResponseWriter, r *http.Request) {
|
func HandlerTDBMS(w http.ResponseWriter, r *http.Request) {
|
||||||
var request JSON
|
var request JSON
|
||||||
var response = JSON{Status: false}
|
var response []byte
|
||||||
var err error
|
var err error
|
||||||
r.Body = http.MaxBytesReader(w, r.Body, 1048576)
|
r.Body = http.MaxBytesReader(w, r.Body, 1048576)
|
||||||
json_decoder := json.NewDecoder(r.Body)
|
json_decoder := json.NewDecoder(r.Body)
|
||||||
@ -102,24 +107,35 @@ func HandlerTFM(w http.ResponseWriter, r *http.Request) {
|
|||||||
http.Error(w, err.Error(), http.StatusBadRequest)
|
http.Error(w, err.Error(), http.StatusBadRequest)
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
if TokenValidate(request.Token) {
|
if !TokenValidate(request.Token) {
|
||||||
response.Status = true
|
http.Error(w, "Invalid token", http.StatusBadRequest)
|
||||||
}
|
|
||||||
w.Header().Set("Content-Type", "application/json; charset=utf-8")
|
|
||||||
jsonData, err := json.Marshal(response)
|
|
||||||
if err != nil {
|
|
||||||
log.Fatalln(err)
|
|
||||||
}
|
|
||||||
_, err = w.Write(jsonData)
|
|
||||||
if err != nil {
|
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
response = tdbms.Query(request.TRDB, request.TRC, request.TRB)
|
||||||
|
if response == nil {
|
||||||
|
http.Error(w, "Failed to execute request", http.StatusInternalServerError)
|
||||||
|
return
|
||||||
|
}
|
||||||
|
w.Header().Set("Content-Type", "application/json; charset=utf-8")
|
||||||
|
_, err = w.Write(response)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
log.Fatalln(err)
|
log.Println(err)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
func main() {
|
func main() {
|
||||||
|
var err error
|
||||||
|
log.Println("Connecting to TDBMS server...")
|
||||||
|
err = tdbms.Connect("unix", "/tmp/tdbms.sock")
|
||||||
|
if err != nil {
|
||||||
|
log.Fatalln("Failed to connect to TDBMS server")
|
||||||
|
}
|
||||||
|
defer func(tdbms TDBMSConnection) {
|
||||||
|
err := tdbms.Close()
|
||||||
|
if err != nil {
|
||||||
|
log.Fatalln(err)
|
||||||
|
}
|
||||||
|
}(tdbms)
|
||||||
log.Println("Initializing...")
|
log.Println("Initializing...")
|
||||||
server := &http.Server{
|
server := &http.Server{
|
||||||
Addr: ":42776",
|
Addr: ":42776",
|
||||||
@ -132,9 +148,9 @@ func main() {
|
|||||||
public_fs.ServeHTTP(w, r)
|
public_fs.ServeHTTP(w, r)
|
||||||
})
|
})
|
||||||
http.HandleFunc("/AUTH", HandlerAuth)
|
http.HandleFunc("/AUTH", HandlerAuth)
|
||||||
http.HandleFunc("/TFM", HandlerTFM)
|
http.HandleFunc("/TDBMS", HandlerTDBMS)
|
||||||
tfm_fs := http.FileServer(http.Dir("/srv/data/tfm"))
|
tfm_fs := http.FileServer(http.Dir("/srv/data/tfm"))
|
||||||
http.Handle("/static", tfm_fs)
|
http.Handle("/tfm/", http.StripPrefix("/tfm", tfm_fs))
|
||||||
log.Println("Running...")
|
log.Println("Running...")
|
||||||
err = server.ListenAndServeTLS("/etc/ssl/certs/web-global.crt", "/etc/ssl/private/web-global.key")
|
err = server.ListenAndServeTLS("/etc/ssl/certs/web-global.crt", "/etc/ssl/private/web-global.key")
|
||||||
if errors.Is(err, http.ErrServerClosed) {
|
if errors.Is(err, http.ErrServerClosed) {
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user