131 lines
2.5 KiB
Go
131 lines
2.5 KiB
Go
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(id int64) (*model.Oauth, error)
|
|
CreateOauth(m *model.Oauth) error
|
|
DeleteOauth(id int64) error
|
|
|
|
GetParam(state string) (*model.Param, error)
|
|
CreateParam(m *model.Param) error
|
|
DeleteParam(state string) error
|
|
}
|
|
|
|
type DbStore struct {
|
|
db *sqlx.DB
|
|
}
|
|
|
|
var schemaAuth = `
|
|
CREATE TABLE IF NOT EXISTS oauth
|
|
(
|
|
id INTEGER PRIMARY KEY AUTOINCREMENT,
|
|
access_token TEXT,
|
|
token_type TEXT,
|
|
expires_in INTEGER,
|
|
refresh_token TEXT,
|
|
param_id INTEGER,
|
|
FOREIGN KEY(param_id) REFERENCES param(id)
|
|
)
|
|
`
|
|
|
|
var schemaParam = `
|
|
CREATE TABLE IF NOT EXISTS param
|
|
(
|
|
id INTEGER PRIMARY KEY AUTOINCREMENT,
|
|
state TEXT,
|
|
domaine TEXT,
|
|
client_id TEXT,
|
|
client_secret TEXT,
|
|
grant_type TEXT
|
|
)
|
|
`
|
|
|
|
func (store *DbStore) Open() error {
|
|
db, err := sqlx.Connect("sqlite3", "./oauth.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(id int64) (*model.Oauth, error) {
|
|
var oauth = &model.Oauth{}
|
|
err := store.db.Get(oauth, "SELECT * FROM oauth where id=$1", id)
|
|
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, token_type, expires_in, refresh_token) VALUES (?, ?, ?, ?)",
|
|
o.AccessToken, o.TokenType, o.ExpiresIN, o.RefreshToken)
|
|
|
|
if err != nil {
|
|
return err
|
|
}
|
|
|
|
o.ID, err = res.LastInsertId()
|
|
return err
|
|
|
|
}
|
|
|
|
func (store *DbStore) DeleteOauth(id int64) error {
|
|
_, err := store.db.Exec("DELETE FROM oauth where id=?", id)
|
|
if err != nil {
|
|
return err
|
|
}
|
|
|
|
return err
|
|
|
|
}
|
|
func (store *DbStore) GetParam(state string) (*model.Param, error) {
|
|
var param = &model.Param{}
|
|
err := store.db.Get(param, "SELECT * FROM param where state=$1", state)
|
|
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 (state, domaine, client_id, client_secret, grant_type) VALUES (?, ?, ?, ?, ?)",
|
|
p.State, p.Domaine, p.ClientID, p.ClientSecret, p.GrantType)
|
|
if err != nil {
|
|
return err
|
|
}
|
|
|
|
p.ID, err = res.LastInsertId()
|
|
return err
|
|
|
|
}
|
|
|
|
func (store *DbStore) DeleteParam(state string) error {
|
|
_, err := store.db.Exec("DELETE FROM param where state=?", state)
|
|
if err != nil {
|
|
return err
|
|
}
|
|
|
|
return err
|
|
|
|
}
|