diff --git a/database/pkg.go b/database/pkg.go index 00d585e..9e5c122 100644 --- a/database/pkg.go +++ b/database/pkg.go @@ -55,7 +55,7 @@ func webserviceSQLProvider(dbname string, version int) ([]byte, bool) { // {{{ "name" varchar NOT NULL, "username" varchar 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_un UNIQUE (username) ); @@ -64,7 +64,8 @@ func webserviceSQLProvider(dbname string, version int) ([]byte, bool) { // {{{ id serial NOT NULL, user_id int4 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_un UNIQUE ("uuid"), 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; $$; `, - 2: ` - ALTER TABLE _webservice.session ADD last_used timetz NOT NULL DEFAULT NOW(); - `, } statement, found := sql[version] @@ -154,6 +152,7 @@ func (db *T) Connect() (err error) { // {{{ return } // }}} + func (db *T) Authenticate(username, password string) (authenticated bool, userID int, err error) { // {{{ var rows *sql.Rows if rows, err = db.Conn.Query(` @@ -195,7 +194,8 @@ func (db *T) RetrieveSession(uuid string) (sess *session.T, err error) {// {{{ SELECT sd.uuid, sd.created, sd.last_used, 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 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() { sess = new(session.T) err = rows.StructScan(sess) + sess.Authenticated = sess.UserID > 0 } return }// }}} @@ -219,6 +220,7 @@ func (db *T) SetSessionUser(uuid string, userID int) (err error) { // {{{ } return } // }}} + func (db *T) CreateUser(username, password, name string) (err error) {// {{{ _, err = db.Conn.Exec(` INSERT INTO _webservice.user(username, password, name) diff --git a/pkg.go b/pkg.go index ee97fa2..6941b64 100644 --- a/pkg.go +++ b/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) { // {{{ 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 } // }}} func (service *Service) defaultAuthorizationHandler(sess *session.T, r *http.Request) (resp bool, err error) { // {{{ diff --git a/session.go b/session.go index 3e3d65b..49ce467 100644 --- a/session.go +++ b/session.go @@ -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( struct { OK bool diff --git a/session/pkg.go b/session/pkg.go index 2605c77..51e8e2e 100644 --- a/session/pkg.go +++ b/session/pkg.go @@ -11,6 +11,7 @@ type T struct { LastUsed time.Time `db:"last_used"` Authenticated bool + UserID int `db:"user_id"` Username string Name string }