@@ -6,23 +6,14 @@ import (
66 "net/url"
77 "os"
88
9+ "github.com/go-session/session"
910 "gopkg.in/oauth2.v3/errors"
1011 "gopkg.in/oauth2.v3/manage"
1112 "gopkg.in/oauth2.v3/models"
1213 "gopkg.in/oauth2.v3/server"
1314 "gopkg.in/oauth2.v3/store"
14- "gopkg.in/session.v1"
1515)
1616
17- var (
18- globalSessions * session.Manager
19- )
20-
21- func init () {
22- globalSessions , _ = session .NewManager ("memory" , `{"cookieName":"gosessionid","gclifetime":3600}` )
23- go globalSessions .GC ()
24- }
25-
2617func main () {
2718 manager := manage .NewDefaultManager ()
2819 // token store
@@ -70,30 +61,40 @@ func main() {
7061}
7162
7263func userAuthorizeHandler (w http.ResponseWriter , r * http.Request ) (userID string , err error ) {
73- us , err := globalSessions .SessionStart (w , r )
74- uid := us .Get ("UserID" )
75- if uid == nil {
64+ store , err := session .Start (nil , w , r )
65+ if err != nil {
66+ return
67+ }
68+
69+ uid , ok := store .Get ("UserID" )
70+ if ! ok {
7671 if r .Form == nil {
7772 r .ParseForm ()
7873 }
79- us .Set ("ReturnUri" , r .Form )
74+ store .Set ("ReturnUri" , r .Form )
75+ store .Save ()
76+
8077 w .Header ().Set ("Location" , "/login" )
8178 w .WriteHeader (http .StatusFound )
8279 return
8380 }
8481 userID = uid .(string )
85- us .Delete ("UserID" )
82+ store .Delete ("UserID" )
83+ store .Save ()
8684 return
8785}
8886
8987func loginHandler (w http.ResponseWriter , r * http.Request ) {
88+ store , err := session .Start (nil , w , r )
89+ if err != nil {
90+ http .Error (w , err .Error (), http .StatusInternalServerError )
91+ return
92+ }
93+
9094 if r .Method == "POST" {
91- us , err := globalSessions .SessionStart (w , r )
92- if err != nil {
93- http .Error (w , err .Error (), http .StatusInternalServerError )
94- return
95- }
96- us .Set ("LoggedInUserID" , "000000" )
95+ store .Set ("LoggedInUserID" , "000000" )
96+ store .Save ()
97+
9798 w .Header ().Set ("Location" , "/auth" )
9899 w .WriteHeader (http .StatusFound )
99100 return
@@ -102,25 +103,35 @@ func loginHandler(w http.ResponseWriter, r *http.Request) {
102103}
103104
104105func authHandler (w http.ResponseWriter , r * http.Request ) {
105- us , err := globalSessions . SessionStart ( w , r )
106+ store , err := session . Start ( nil , w , r )
106107 if err != nil {
107108 http .Error (w , err .Error (), http .StatusInternalServerError )
108109 return
109110 }
110- if us .Get ("LoggedInUserID" ) == nil {
111+
112+ if _ , ok := store .Get ("LoggedInUserID" ); ! ok {
111113 w .Header ().Set ("Location" , "/login" )
112114 w .WriteHeader (http .StatusFound )
113115 return
114116 }
117+
115118 if r .Method == "POST" {
116- form := us .Get ("ReturnUri" ).(url.Values )
119+ var form url.Values
120+ if v , ok := store .Get ("ReturnUri" ); ok {
121+ form = v .(url.Values )
122+ }
117123 u := new (url.URL )
118124 u .Path = "/authorize"
119125 u .RawQuery = form .Encode ()
120126 w .Header ().Set ("Location" , u .String ())
121127 w .WriteHeader (http .StatusFound )
122- us .Delete ("Form" )
123- us .Set ("UserID" , us .Get ("LoggedInUserID" ))
128+ store .Delete ("Form" )
129+
130+ if v , ok := store .Get ("LoggedInUserID" ); ok {
131+ store .Set ("UserID" , v )
132+ }
133+ store .Save ()
134+
124135 return
125136 }
126137 outputHTML (w , r , "static/auth.html" )
0 commit comments