Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- package main
- import (
- "fmt"
- "time"
- "github.com/gorilla/mux"
- "net/http"
- "github.com/gorilla/sessions"
- "strings"
- "encoding/json"
- "io/ioutil"
- "github.com/gorilla/handlers"
- )
- const sessionobjectname = "mysessionobject"
- var store = sessions.NewCookieStore([]byte("this-is-the-secret"))
- func MySessionMW(next http.Handler) http.Handler {
- return http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {
- session, err := store.Get(r, sessionobjectname)
- if err != nil {
- w.Write([]byte("ERROR: Cannot read session object?n"))
- return
- }
- if session.IsNew {
- session.Values["loggedin"] = "0"
- }
- loggedIn := session.Values["loggedin"]
- session.Save(r, w)
- // If this is for an API request then we will always return JSON and no page content is needed
- if strings.Contains(r.RequestURI, "/api/") {
- next.ServeHTTP(w, r)
- return
- }
- w.Header().Set("Content-Type","text/html; charset=utf-8")
- if loggedIn == "0" {
- // Not logged in
- w.Write([]byte("<div>User <b>NOT</b> logged in.</div>"))
- } else {
- // Logged in
- w.Write([]byte("<div>User logged in.</div>"))
- }
- w.Write([]byte("<br/>"))
- t := time.Now()
- s := fmt.Sprintf("<div>[MySessionMW] - %s</div>",t.Format("2006-01-02@15:04:05"))
- w.Write([]byte(s))
- s = `
- <script
- src="https://code.jquery.com/jquery-3.3.1.min.js"
- integrity="sha256-FgpCb/KJQlLNfOu91ta32o/NMZxltwRo8QtmkMRdAu8="
- crossorigin="anonymous">
- </script>
- <div>
- <div>Username <input id='username' /></div>
- <div>Password <input id='password' /></div>
- <div><button onclick='doLogin()'>Login</button></div>
- </div>
- <script>
- function doLogin() {
- var username = $('#username').val();
- var password = $('#password').val();
- console.log("Perform login with: Username [" + username + "] Password [" + password + "]");
- var theData = JSON.stringify({ username:'John', password:'123456' });
- $.ajax({
- type: "POST",
- crossOrigin: true,
- url: 'http://localhost:5000//api//login',
- //headers: {"Access-Control-Allow-Origin": "*", "Access-Control-Allow-Headers": "access-control-allow-origin, access-control-allow-headers"},
- dataType: 'json',
- data: theData,
- contentType: 'application/json; charset=UTF-8',
- success: function(a, b, c) {
- console.log("Success values returned");
- console.dir(a);
- },
- error: function(a, b, c) {
- console.log("ERROR returned from AJAX");
- console.dir(a);
- console.dir(b);
- console.dir(c);
- }
- })
- }
- </script>
- `
- w.Write([]byte(s))
- next.ServeHTTP(w, r)
- })
- }
- type loginPOCO struct {
- username string `json:"username"`
- password string `json:"password"`
- }
- func main() {
- router := mux.NewRouter()
- router.HandleFunc("/", func(w http.ResponseWriter, r *http.Request) {
- fmt.Fprintf(w, "<div>Home page requested!</div>")
- })
- router.HandleFunc("/api/login", func(w http.ResponseWriter, r *http.Request) {
- a := r.FormValue("username")
- b := r.FormValue("password")
- fmt.Printf("a=%s b=%s",a,b)
- var err error
- loginAttempt2 := loginPOCO{}
- err = json.NewDecoder(r.Body).Decode(&loginAttempt2)
- body, err := ioutil.ReadAll(r.Body)
- if err != nil {
- panic(err)
- }
- loginAttempt := loginPOCO{}
- err = json.Unmarshal(body, &loginAttempt)
- returnJSON := []byte(`{ "error": "Hello" }`)
- w.Write(returnJSON)
- })
- router.Use(MySessionMW)
- corsObj := handlers.AllowedOrigins([]string{"*"})
- http.ListenAndServe(":5000", handlers.CORS(corsObj)(router))
- fmt.Printf("nCompleted...")
- }
Add Comment
Please, Sign In to add comment