|
|
|
package main
|
|
|
|
|
|
|
|
import (
|
|
|
|
"flag"
|
|
|
|
"fmt"
|
|
|
|
"net"
|
|
|
|
"os"
|
|
|
|
|
|
|
|
jwtgo "github.com/dgrijalva/jwt-go"
|
|
|
|
log "github.com/sirupsen/logrus"
|
|
|
|
"github.com/valyala/fasthttp"
|
|
|
|
|
|
|
|
"github.com/mainnika/a-quest/keys"
|
|
|
|
"github.com/mainnika/a-quest/task1-backend/lib"
|
|
|
|
. "github.com/mainnika/a-quest/task1-backend/lib/configure"
|
|
|
|
. "github.com/mainnika/a-quest/task1-backend/lib/env"
|
|
|
|
)
|
|
|
|
|
|
|
|
var version = "dev"
|
|
|
|
|
|
|
|
var (
|
|
|
|
getVersion bool
|
|
|
|
)
|
|
|
|
|
|
|
|
func init() {
|
|
|
|
|
|
|
|
if IsDevelopment {
|
|
|
|
log.SetLevel(log.DebugLevel)
|
|
|
|
log.Debug("debug mode")
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
func httpStart(apiserv *lib.Api) (httpserv *fasthttp.Server) {
|
|
|
|
|
|
|
|
httpserv = &fasthttp.Server{
|
|
|
|
Logger: log.StandardLogger(),
|
|
|
|
Handler: apiserv.GetHandler(),
|
|
|
|
DisableKeepalive: true,
|
|
|
|
}
|
|
|
|
|
|
|
|
lis, err := net.Listen("tcp", Config.HttpAPI.Addr)
|
|
|
|
if err != nil {
|
|
|
|
log.Fatalf("http listen error: %v", err)
|
|
|
|
}
|
|
|
|
|
|
|
|
err = httpserv.Serve(lis)
|
|
|
|
if err != nil {
|
|
|
|
log.Fatalf("http serve error: %v", err)
|
|
|
|
}
|
|
|
|
|
|
|
|
return
|
|
|
|
}
|
|
|
|
|
|
|
|
func main() {
|
|
|
|
|
|
|
|
flag.BoolVar(&getVersion, "v", false, "version")
|
|
|
|
flag.Parse()
|
|
|
|
|
|
|
|
if getVersion {
|
|
|
|
fmt.Println(version)
|
|
|
|
os.Exit(0)
|
|
|
|
}
|
|
|
|
|
|
|
|
log.Debugf("version: %s", version)
|
|
|
|
log.Debugf("cfg: %v", Config)
|
|
|
|
|
|
|
|
pubKey, err := jwtgo.ParseECPublicKeyFromPEM(keys.PublicKey)
|
|
|
|
if err != nil {
|
|
|
|
log.Fatalf("can not parse jwt key: %s", err)
|
|
|
|
}
|
|
|
|
|
|
|
|
privKey, err := jwtgo.ParseECPrivateKeyFromPEM(keys.PrivateKey)
|
|
|
|
if err != nil {
|
|
|
|
log.Fatalf("can not parse jwt key: %s", err)
|
|
|
|
}
|
|
|
|
|
|
|
|
apiserv := &lib.Api{
|
|
|
|
Base: Config.HttpAPI.Base,
|
|
|
|
Pub: pubKey,
|
|
|
|
Priv: privKey,
|
|
|
|
Alg: keys.Alg,
|
|
|
|
Answer: keys.Answer,
|
|
|
|
}
|
|
|
|
|
|
|
|
httpStart(apiserv)
|
|
|
|
}
|