diff --git a/http/http.go b/http/http.go new file mode 100644 index 0000000..9d826f6 --- /dev/null +++ b/http/http.go @@ -0,0 +1,63 @@ +package http + +import ( + "fmt" + "net/http" + "strconv" + "strings" + "log" +) + +const ( + PARAM_JID = "jid" + METHOD_ACCESS = "method" + DOMAIN_ACCESS = "domain" + TRANSACTION_ID = "transaction_id" + + RETURN_VALUE_OK = "OK" + RETURN_VALUE_NOK = "NOK" +) + +var ( + HttpPortBind = 9090 + + ChanRequest = make(chan interface{}, 5) +) + + +func indexHandler(w http.ResponseWriter, r *http.Request) { + // TODO + fmt.Fprintf(w, "Welcome to HTTP authentification over XMPP") +} + +func authHandler(w http.ResponseWriter, r *http.Request) { + r.ParseForm() + chanAnswer := make(chan bool) + + ChanRequest <- strings.Join(r.Form[PARAM_JID], "") + ChanRequest <- strings.Join(r.Form[METHOD_ACCESS], "") + ChanRequest <- strings.Join(r.Form[DOMAIN_ACCESS], "") + ChanRequest <- strings.Join(r.Form[TRANSACTION_ID], "") + ChanRequest <- chanAnswer + + answer := <- chanAnswer + ret := RETURN_VALUE_NOK + if answer { + ret = RETURN_VALUE_OK + } + fmt.Fprintf(w, ret) +} + + + +func Run() { + http.HandleFunc("/", indexHandler) // set router + http.HandleFunc("/toto", authHandler) + + port := strconv.Itoa(HttpPortBind) + log.Println("Listenning on port "+port) + err := http.ListenAndServe(":"+port, nil) // set listen port + if err != nil { + log.Fatal("ListenAndServe: ", err) + } +} diff --git a/httpAuth.cfg b/httpAuth.cfg new file mode 100644 index 0000000..e69de29 diff --git a/main.go b/main.go new file mode 100644 index 0000000..d9c01b6 --- /dev/null +++ b/main.go @@ -0,0 +1,67 @@ +package main + +import ( + "git.kingpenguin.tk/chteufleur/HTTPAuthentificationOverXMPP.git/http" + + "github.com/jimlawless/cfg" + + "log" + "os" + "os/signal" + "syscall" + "time" +) + +const ( + Version = "v0.1.0" + configurationFilePath = "httpAuth.cfg" +) + +var ( + mapConfig = make(map[string]string) +) + +func init() { + err := cfg.Load(configurationFilePath, mapConfig) + if err != nil { + log.Fatal("Failed to load configuration file.", err) + } + // TODO make config +} + + +func request() { + for { + jid := <- http.ChanRequest + log.Println(jid) + method := <- http.ChanRequest + log.Println(method) + domain := <- http.ChanRequest + log.Println(domain) + transaction := <- http.ChanRequest + log.Println(transaction) + + chanResult := <- http.ChanRequest + // TODO make the XMPP request + if v, ok := chanResult.(chan bool); ok { + v <- false + } + } +} + +func main() { + // TODO start ressources + go http.Run() + go request() + + sigchan := make(chan os.Signal, 1) + signal.Notify(sigchan, os.Interrupt) + signal.Notify(sigchan, syscall.SIGTERM) + signal.Notify(sigchan, os.Kill) + <-sigchan + + // TODO close all ressources + + log.Println("Exit main()") + time.Sleep(1 * time.Second) +}