Guest User

Untitled

a guest
Feb 23rd, 2018
134
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 4.46 KB | None | 0 0
  1. package main
  2.  
  3. import (
  4. "fmt"
  5. "time"
  6. "github.com/gorilla/mux"
  7. "net/http"
  8. "github.com/gorilla/sessions"
  9. "strings"
  10. "encoding/json"
  11. "io/ioutil"
  12. "github.com/gorilla/handlers"
  13. )
  14.  
  15. const sessionobjectname = "mysessionobject"
  16. var store = sessions.NewCookieStore([]byte("this-is-the-secret"))
  17.  
  18. func MySessionMW(next http.Handler) http.Handler {
  19. return http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {
  20. session, err := store.Get(r, sessionobjectname)
  21. if err != nil {
  22. w.Write([]byte("ERROR: Cannot read session object?n"))
  23. return
  24. }
  25.  
  26. if session.IsNew {
  27. session.Values["loggedin"] = "0"
  28. }
  29.  
  30. loggedIn := session.Values["loggedin"]
  31. session.Save(r, w)
  32.  
  33. // If this is for an API request then we will always return JSON and no page content is needed
  34. if strings.Contains(r.RequestURI, "/api/") {
  35. next.ServeHTTP(w, r)
  36. return
  37. }
  38.  
  39. w.Header().Set("Content-Type","text/html; charset=utf-8")
  40.  
  41. if loggedIn == "0" {
  42. // Not logged in
  43. w.Write([]byte("<div>User <b>NOT</b> logged in.</div>"))
  44. } else {
  45. // Logged in
  46. w.Write([]byte("<div>User logged in.</div>"))
  47. }
  48. w.Write([]byte("<br/>"))
  49.  
  50. t := time.Now()
  51. s := fmt.Sprintf("<div>[MySessionMW] - %s</div>",t.Format("2006-01-02@15:04:05"))
  52. w.Write([]byte(s))
  53.  
  54.  
  55. s = `
  56. <script
  57. src="https://code.jquery.com/jquery-3.3.1.min.js"
  58. integrity="sha256-FgpCb/KJQlLNfOu91ta32o/NMZxltwRo8QtmkMRdAu8="
  59. crossorigin="anonymous">
  60. </script>
  61.  
  62. <div>
  63. <div>Username <input id='username' /></div>
  64. <div>Password <input id='password' /></div>
  65. <div><button onclick='doLogin()'>Login</button></div>
  66. </div>
  67.  
  68. <script>
  69. function doLogin() {
  70. var username = $('#username').val();
  71. var password = $('#password').val();
  72. console.log("Perform login with: Username [" + username + "] Password [" + password + "]");
  73. var theData = JSON.stringify({ username:'John', password:'123456' });
  74. $.ajax({
  75. type: "POST",
  76. crossOrigin: true,
  77. url: 'http://localhost:5000//api//login',
  78. //headers: {"Access-Control-Allow-Origin": "*", "Access-Control-Allow-Headers": "access-control-allow-origin, access-control-allow-headers"},
  79. dataType: 'json',
  80. data: theData,
  81. contentType: 'application/json; charset=UTF-8',
  82. success: function(a, b, c) {
  83. console.log("Success values returned");
  84. console.dir(a);
  85. },
  86. error: function(a, b, c) {
  87. console.log("ERROR returned from AJAX");
  88. console.dir(a);
  89. console.dir(b);
  90. console.dir(c);
  91. }
  92. })
  93. }
  94. </script>
  95. `
  96. w.Write([]byte(s))
  97.  
  98.  
  99. next.ServeHTTP(w, r)
  100. })
  101. }
  102.  
  103. type loginPOCO struct {
  104. username string `json:"username"`
  105. password string `json:"password"`
  106. }
  107.  
  108. func main() {
  109.  
  110. router := mux.NewRouter()
  111.  
  112.  
  113. router.HandleFunc("/", func(w http.ResponseWriter, r *http.Request) {
  114. fmt.Fprintf(w, "<div>Home page requested!</div>")
  115. })
  116.  
  117. router.HandleFunc("/api/login", func(w http.ResponseWriter, r *http.Request) {
  118.  
  119.  
  120. a := r.FormValue("username")
  121. b := r.FormValue("password")
  122. fmt.Printf("a=%s b=%s",a,b)
  123.  
  124. var err error
  125.  
  126. loginAttempt2 := loginPOCO{}
  127. err = json.NewDecoder(r.Body).Decode(&loginAttempt2)
  128.  
  129.  
  130. body, err := ioutil.ReadAll(r.Body)
  131. if err != nil {
  132. panic(err)
  133. }
  134. loginAttempt := loginPOCO{}
  135. err = json.Unmarshal(body, &loginAttempt)
  136.  
  137.  
  138.  
  139. returnJSON := []byte(`{ "error": "Hello" }`)
  140. w.Write(returnJSON)
  141. })
  142.  
  143.  
  144. router.Use(MySessionMW)
  145.  
  146. corsObj := handlers.AllowedOrigins([]string{"*"})
  147.  
  148. http.ListenAndServe(":5000", handlers.CORS(corsObj)(router))
  149.  
  150. fmt.Printf("nCompleted...")
  151. }
Add Comment
Please, Sign In to add comment