diff --git a/auth.db b/auth.db index 79c0838..4908b4f 100644 Binary files a/auth.db and b/auth.db differ diff --git a/main.go b/main.go index 40ed76d..54daa0d 100644 --- a/main.go +++ b/main.go @@ -5,6 +5,8 @@ import ( "log" "net/http" "os" + + "github.com/ldrogou/goauth20/store" ) func main() { @@ -18,7 +20,8 @@ func main() { func run() error { srv := newServer() - srv.store = &dbStore{} + srv.store = &store.DbStore{} + err := srv.store.Open() if err != nil { return err diff --git a/model/oauth.go b/model/oauth.go new file mode 100644 index 0000000..0d75e36 --- /dev/null +++ b/model/oauth.go @@ -0,0 +1,15 @@ +package model + +import "fmt" + +type Oauth struct { + ID int64 `db:"id"` + AccessToken string `db:"access_token"` + ExpireIN int `db:"expire_in"` + RefreshToken string `db:"refreh_token"` +} + +func (o Oauth) String() string { + return fmt.Sprintf("id=%v, accessToken=%v, expireIN=%v, refreshToken=%v", + o.ID, o.AccessToken, o.ExpireIN, o.RefreshToken) +} diff --git a/model/param.go b/model/param.go new file mode 100644 index 0000000..08edd60 --- /dev/null +++ b/model/param.go @@ -0,0 +1,16 @@ +package model + +import "fmt" + +type Param struct { + ID int64 `db:"id"` + Domaine string `db:"domaine"` + ClientID string `db:"client_id"` + ClientSecret string `db:"client_secret"` + GrantType string `db:"grant_type"` +} + +func (p Param) String() string { + return fmt.Sprintf("id=%v, title=%v, releaseDate=%v, duration=%v, trailerURL=%v", + p.ID, p.Domaine, p.ClientID, p.ClientSecret, p.GrantType) +} diff --git a/routes.auth.go b/routes.auth.go index a8408a1..71315cf 100644 --- a/routes.auth.go +++ b/routes.auth.go @@ -104,19 +104,22 @@ func (s *server) handleLocal() http.HandlerFunc { func (s *server) handleOAuth20() http.HandlerFunc { return func(rw http.ResponseWriter, r *http.Request) { - domain := r.FormValue("domain") - clientID := r.FormValue("clientId") - scopes := r.FormValue("scopes") - currentCompany := r.FormValue("currentCompany") - if len(currentCompany) == 0 { - currentCompany = "false" + d := r.FormValue("domain") + ci := r.FormValue("clientId") + s := r.FormValue("scopes") + cc := r.FormValue("currentCompany") + if len(cc) == 0 { + cc = "false" } else { - currentCompany = "true" + cc = "true" } - log.Println(currentCompany) - redirecthttp := "https://" + domain + "/entreprise-partenaire/authorize?client_id=" + clientID + "&scope=" + scopes + "¤t_company=" + currentCompany + "&redirect_uri=http://localhost:8080/oauth/redirect&abort_uri=http://localhost:8080/index" - http.Redirect(rw, r, redirecthttp, http.StatusMovedPermanently) + rhttp := "https://" + d + "/entreprise-partenaire/authorize?client_id=" + ci + + "&scope=" + s + + "¤t_company=" + cc + + "&redirect_uri=http://localhost:8080/oauth/redirect" + + "&abort_uri=http://localhost:8080/index" + http.Redirect(rw, r, rhttp, http.StatusMovedPermanently) } @@ -147,8 +150,6 @@ func (s *server) handleRedirect() http.HandlerFunc { panic(err) } - fmt.Println("response Status:", resp.Status) - fmt.Println("response Headers:", resp.Header) var t map[string]interface{} // here's the trick json.NewDecoder(resp.Body).Decode(&t) diff --git a/server.go b/server.go index 544086f..7c54792 100644 --- a/server.go +++ b/server.go @@ -10,12 +10,14 @@ import ( "github.com/dgrijalva/jwt-go" "github.com/gorilla/mux" + "github.com/ldrogou/goauth20/model" + "github.com/ldrogou/goauth20/store" templateoauth "github.com/ldrogou/goauth20/templateOAuth" ) type server struct { router *mux.Router - store Store + store store.Store } //File structure du fichier @@ -70,7 +72,7 @@ func (s *server) responseFile(rw http.ResponseWriter, _ *http.Request, data inte } //t := template.New("mon template") - tem, err := template.New("Resulta").Parse(templateoauth.Resultat) + t, err := template.New("Resulta").Parse(templateoauth.Resultat) if err != nil { return fmt.Errorf("erreur suivante %v", err) } @@ -82,7 +84,19 @@ func (s *server) responseFile(rw http.ResponseWriter, _ *http.Request, data inte Sign: tableau[2], } - err = tem.Execute(rw, f) + o := &model.Oauth{ + ID: 0, + AccessToken: tokenVal, + ExpireIN: 180, + RefreshToken: "eeeee", + } + err = s.store.CreateOauth(o) + if err != nil { + fmt.Printf("erreur suivante %v", err) + } + + log.Println("ezdzedezd") + err = t.Execute(rw, f) if err != nil { return fmt.Errorf("erreur suivante %v", err) } diff --git a/store.go b/store.go deleted file mode 100644 index e4e12cc..0000000 --- a/store.go +++ /dev/null @@ -1,43 +0,0 @@ -package main - -import ( - "log" - - "github.com/jmoiron/sqlx" - _ "github.com/mattn/go-sqlite3" -) - -type Store interface { - Open() error - Close() error -} - -type dbStore struct { - db *sqlx.DB -} - -var schema = ` -CREATE TABLE IF NOT EXISTS auth -( - id INTEGER PRIMARY KEY AUTOINCREMENT, - access_token TEXT, - expire_in TEXT, - refreh_token TEXT -) -` - -func (store *dbStore) Open() error { - db, err := sqlx.Connect("sqlite3", "auth.db") - if err != nil { - return err - } - log.Println("Connected db") - db.MustExec(schema) - - store.db = db - return nil -} - -func (store *dbStore) Close() error { - return store.db.Close() -} diff --git a/store/store.go b/store/store.go new file mode 100644 index 0000000..467c3b5 --- /dev/null +++ b/store/store.go @@ -0,0 +1,126 @@ +package store + +import ( + "log" + + "github.com/jmoiron/sqlx" + "github.com/ldrogou/goauth20/model" + _ "github.com/mattn/go-sqlite3" +) + +type Store interface { + Open() error + Close() error + + GetOauth() (*model.Oauth, error) + CreateOauth(m *model.Oauth) error + DeleteOauth() error + + GetParam() (*model.Param, error) + CreateParam(m *model.Param) error + DeleteParam() error +} + +type DbStore struct { + db *sqlx.DB +} + +var schemaAuth = ` +CREATE TABLE IF NOT EXISTS oauth +( + id INTEGER PRIMARY KEY AUTOINCREMENT, + access_token TEXT, + expire_in INTEGER, + refresh_token TEXT +) +` + +var schemaParam = ` +CREATE TABLE IF NOT EXISTS param +( + id INTEGER PRIMARY KEY AUTOINCREMENT, + domaine TEXT, + client_id TEXT, + client_secret TEXT, + grant_type TEXT +) +` + +func (store *DbStore) Open() error { + db, err := sqlx.Connect("sqlite3", "auth.db") + if err != nil { + return err + } + log.Println("Connected db") + db.MustExec(schemaAuth) + db.MustExec(schemaParam) + + store.db = db + return nil +} + +func (store *DbStore) Close() error { + return store.db.Close() +} + +func (store *DbStore) GetOauth() (*model.Oauth, error) { + var oauth = &model.Oauth{} + err := store.db.Get(oauth, "SELECT * FROM oauth") + if err != nil { + return oauth, err + } + return oauth, nil +} + +func (store *DbStore) CreateOauth(o *model.Oauth) error { + res, err := store.db.Exec("INSERT INTO oauth (access_token, expire_in, refresh_token) VALUES (?, ?, ?)", + o.AccessToken, o.ExpireIN, o.RefreshToken) + + if err != nil { + return err + } + + o.ID, err = res.LastInsertId() + return err + +} + +func (store *DbStore) DeleteOauth() error { + _, err := store.db.Exec("DELETE TABLE oauth", nil) + if err != nil { + return err + } + + return err + +} +func (store *DbStore) GetParam() (*model.Param, error) { + var param = &model.Param{} + err := store.db.Get(param, "SELECT * FROM param") + if err != nil { + return param, err + } + return param, nil +} + +func (store *DbStore) CreateParam(p *model.Param) error { + res, err := store.db.Exec("INSERT INTO param (domaine, client_id, client_secret, grant_type) VALUES (?, ?, ?, ?)", + p.Domaine, p.ClientID, p.ClientSecret, p.GrantType) + if err != nil { + return err + } + + p.ID, err = res.LastInsertId() + return err + +} + +func (store *DbStore) DeleteParam() error { + _, err := store.db.Exec("DELETE TABLE param", nil) + if err != nil { + return err + } + + return err + +} diff --git a/store/storeoauth.go b/store/storeoauth.go new file mode 100644 index 0000000..5c05150 --- /dev/null +++ b/store/storeoauth.go @@ -0,0 +1,51 @@ +package store + +import ( + _ "github.com/mattn/go-sqlite3" +) + +/** +type StoreOauth interface { + GetOauth() (*model.Oauth, error) + CreateOauth(m *model.Oauth) error + DeleteOauth() error +} + +func (store *DbStore) GetOauth() (*model.Oauth, error) { + var oauth = &model.Oauth{} + err := store.db.Get(oauth, "SELECT * FROM oauth") + if err != nil { + return oauth, err + } + return oauth, nil +} + +func (store *DbStore) CreateOauth(o *model.Oauth) error { + log.Println("je suis ici") + log.Println(store.db.Ping()) + log.Println("je suis ici -------") + log.Printf("la valeur de o %v \n", o) + log.Println("je suis ici =======") + res, err := store.db.Exec("INSERT INTO oauth (access_token, expire_in, refresh_token) VALUES (?, ?, ?)", + o.AccessToken, o.ExpireIN, o.RefreshToken) + log.Println("je suis ici @@@@@@@@") + + if err != nil { + return err + } + + o.ID, err = res.LastInsertId() + return err + +} + +func (store *DbStore) DeleteOauth() error { + _, err := store.db.Exec("DELETE TABLE oauth", nil) + if err != nil { + return err + } + + return err + +} +**/ diff --git a/store/storeparam.go b/store/storeparam.go new file mode 100644 index 0000000..4d9fcbb --- /dev/null +++ b/store/storeparam.go @@ -0,0 +1,44 @@ +package store + +import ( + _ "github.com/mattn/go-sqlite3" +) + +/** +type StoreParam interface { + GetParam() (*model.Param, error) + CreateParam(m *model.Param) error + DeleteParam() error +} + +func (store *DbStore) GetParam() (*model.Param, error) { + var param = &model.Param{} + err := store.db.Get(param, "SELECT * FROM param") + if err != nil { + return param, err + } + return param, nil +} + +func (store *DbStore) CreateParam(p *model.Param) error { + res, err := store.db.Exec("INSERT INTO param (domaine, client_id, client_secret, grant_type) VALUES (?, ?, ?, ?)", + p.Domaine, p.ClientID, p.ClientSecret, p.GrantType) + if err != nil { + return err + } + + p.ID, err = res.LastInsertId() + return err + +} + +func (store *DbStore) DeleteParam() error { + _, err := store.db.Exec("DELETE TABLE param", nil) + if err != nil { + return err + } + + return err + +} +**/ diff --git a/templateOAuth/resultat.go b/templateOAuth/resultat.go index a7745e5..834b6c3 100644 --- a/templateOAuth/resultat.go +++ b/templateOAuth/resultat.go @@ -33,15 +33,15 @@ var Resultat = `