Session timestamp and user IDs
This commit is contained in:
parent
6424512612
commit
61a36b87bb
@ -55,7 +55,7 @@ func webserviceSQLProvider(dbname string, version int) ([]byte, bool) { // {{{
|
|||||||
"name" varchar NOT NULL,
|
"name" varchar NOT NULL,
|
||||||
"username" varchar NOT NULL,
|
"username" varchar NOT NULL,
|
||||||
"password" char(96) NOT NULL,
|
"password" char(96) NOT NULL,
|
||||||
last_login timetz NOT NULL DEFAULT '1970-01-01 00:00:00',
|
last_login timestamp with time zone NOT NULL DEFAULT '1970-01-01 00:00:00',
|
||||||
CONSTRAINT user_pk PRIMARY KEY (id),
|
CONSTRAINT user_pk PRIMARY KEY (id),
|
||||||
CONSTRAINT user_un UNIQUE (username)
|
CONSTRAINT user_un UNIQUE (username)
|
||||||
);
|
);
|
||||||
@ -64,7 +64,8 @@ func webserviceSQLProvider(dbname string, version int) ([]byte, bool) { // {{{
|
|||||||
id serial NOT NULL,
|
id serial NOT NULL,
|
||||||
user_id int4 NULL,
|
user_id int4 NULL,
|
||||||
"uuid" char(36) NOT NULL,
|
"uuid" char(36) NOT NULL,
|
||||||
created time with time zone NOT NULL DEFAULT NOW(),
|
created timestamp with time zone NOT NULL DEFAULT NOW(),
|
||||||
|
last_used timestamp with time zone NOT NULL DEFAULT NOW(),
|
||||||
CONSTRAINT session_pk PRIMARY KEY (id),
|
CONSTRAINT session_pk PRIMARY KEY (id),
|
||||||
CONSTRAINT session_un UNIQUE ("uuid"),
|
CONSTRAINT session_un UNIQUE ("uuid"),
|
||||||
CONSTRAINT session_user_fk FOREIGN KEY (user_id) REFERENCES "_webservice"."user"(id) ON DELETE CASCADE ON UPDATE CASCADE
|
CONSTRAINT session_user_fk FOREIGN KEY (user_id) REFERENCES "_webservice"."user"(id) ON DELETE CASCADE ON UPDATE CASCADE
|
||||||
@ -92,9 +93,6 @@ func webserviceSQLProvider(dbname string, version int) ([]byte, bool) { // {{{
|
|||||||
END;
|
END;
|
||||||
$$;
|
$$;
|
||||||
`,
|
`,
|
||||||
2: `
|
|
||||||
ALTER TABLE _webservice.session ADD last_used timetz NOT NULL DEFAULT NOW();
|
|
||||||
`,
|
|
||||||
}
|
}
|
||||||
|
|
||||||
statement, found := sql[version]
|
statement, found := sql[version]
|
||||||
@ -154,6 +152,7 @@ func (db *T) Connect() (err error) { // {{{
|
|||||||
|
|
||||||
return
|
return
|
||||||
} // }}}
|
} // }}}
|
||||||
|
|
||||||
func (db *T) Authenticate(username, password string) (authenticated bool, userID int, err error) { // {{{
|
func (db *T) Authenticate(username, password string) (authenticated bool, userID int, err error) { // {{{
|
||||||
var rows *sql.Rows
|
var rows *sql.Rows
|
||||||
if rows, err = db.Conn.Query(`
|
if rows, err = db.Conn.Query(`
|
||||||
@ -195,7 +194,8 @@ func (db *T) RetrieveSession(uuid string) (sess *session.T, err error) {// {{{
|
|||||||
SELECT
|
SELECT
|
||||||
sd.uuid, sd.created, sd.last_used,
|
sd.uuid, sd.created, sd.last_used,
|
||||||
COALESCE(u.username, '') AS username,
|
COALESCE(u.username, '') AS username,
|
||||||
COALESCE(u.name, '') AS name
|
COALESCE(u.name, '') AS name,
|
||||||
|
COALESCE(u.id, 0) AS user_id
|
||||||
FROM session_data sd
|
FROM session_data sd
|
||||||
LEFT JOIN _webservice.user u ON sd.user_id = u.id
|
LEFT JOIN _webservice.user u ON sd.user_id = u.id
|
||||||
`,
|
`,
|
||||||
@ -209,6 +209,7 @@ func (db *T) RetrieveSession(uuid string) (sess *session.T, err error) {// {{{
|
|||||||
for rows.Next() {
|
for rows.Next() {
|
||||||
sess = new(session.T)
|
sess = new(session.T)
|
||||||
err = rows.StructScan(sess)
|
err = rows.StructScan(sess)
|
||||||
|
sess.Authenticated = sess.UserID > 0
|
||||||
}
|
}
|
||||||
return
|
return
|
||||||
}// }}}
|
}// }}}
|
||||||
@ -219,6 +220,7 @@ func (db *T) SetSessionUser(uuid string, userID int) (err error) { // {{{
|
|||||||
}
|
}
|
||||||
return
|
return
|
||||||
} // }}}
|
} // }}}
|
||||||
|
|
||||||
func (db *T) CreateUser(username, password, name string) (err error) {// {{{
|
func (db *T) CreateUser(username, password, name string) (err error) {// {{{
|
||||||
_, err = db.Conn.Exec(`
|
_, err = db.Conn.Exec(`
|
||||||
INSERT INTO _webservice.user(username, password, name)
|
INSERT INTO _webservice.user(username, password, name)
|
||||||
|
2
pkg.go
2
pkg.go
@ -91,7 +91,7 @@ func New(configFilename string) (service *Service, err error) { // {{{
|
|||||||
|
|
||||||
func (service *Service) defaultAuthenticationHandler(req AuthenticationRequest, alreadyAuthenticated bool) (resp AuthenticationResponse, err error) { // {{{
|
func (service *Service) defaultAuthenticationHandler(req AuthenticationRequest, alreadyAuthenticated bool) (resp AuthenticationResponse, err error) { // {{{
|
||||||
resp.Authenticated = alreadyAuthenticated
|
resp.Authenticated = alreadyAuthenticated
|
||||||
service.logger.Info("webservice", "op", "authentication", "request", req, "authenticated", resp.Authenticated)
|
service.logger.Info("webservice", "op", "authentication", "username", req.Username, "authenticated", resp.Authenticated)
|
||||||
return
|
return
|
||||||
} // }}}
|
} // }}}
|
||||||
func (service *Service) defaultAuthorizationHandler(sess *session.T, r *http.Request) (resp bool, err error) { // {{{
|
func (service *Service) defaultAuthorizationHandler(sess *session.T, r *http.Request) (resp bool, err error) { // {{{
|
||||||
|
@ -58,6 +58,8 @@ func (service *Service) sessionNew(w http.ResponseWriter, r *http.Request, sess
|
|||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
service.logger.Info("session", "op", "new", "uuid", session.UUID)
|
||||||
|
|
||||||
respJSON, _ := json.Marshal(
|
respJSON, _ := json.Marshal(
|
||||||
struct {
|
struct {
|
||||||
OK bool
|
OK bool
|
||||||
|
@ -11,6 +11,7 @@ type T struct {
|
|||||||
LastUsed time.Time `db:"last_used"`
|
LastUsed time.Time `db:"last_used"`
|
||||||
Authenticated bool
|
Authenticated bool
|
||||||
|
|
||||||
|
UserID int `db:"user_id"`
|
||||||
Username string
|
Username string
|
||||||
Name string
|
Name string
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user