Test logout
This commit is contained in:
parent
18107bdac8
commit
edfbd2cc92
16
server/router/handler/handler_test.go
Normal file
16
server/router/handler/handler_test.go
Normal file
@ -0,0 +1,16 @@
|
|||||||
|
package handler_test
|
||||||
|
|
||||||
|
import (
|
||||||
|
"testing"
|
||||||
|
|
||||||
|
db_ "git.ekzyis.com/ekzyis/delphi.market/db"
|
||||||
|
"git.ekzyis.com/ekzyis/delphi.market/test"
|
||||||
|
)
|
||||||
|
|
||||||
|
var (
|
||||||
|
db *db_.DB
|
||||||
|
)
|
||||||
|
|
||||||
|
func TestMain(m *testing.M) {
|
||||||
|
test.Main(m, db)
|
||||||
|
}
|
@ -2,6 +2,7 @@ package handler_test
|
|||||||
|
|
||||||
import (
|
import (
|
||||||
"database/sql"
|
"database/sql"
|
||||||
|
"encoding/hex"
|
||||||
"fmt"
|
"fmt"
|
||||||
"net/http"
|
"net/http"
|
||||||
"net/http/httptest"
|
"net/http/httptest"
|
||||||
@ -12,22 +13,15 @@ import (
|
|||||||
"git.ekzyis.com/ekzyis/delphi.market/server/router/context"
|
"git.ekzyis.com/ekzyis/delphi.market/server/router/context"
|
||||||
"git.ekzyis.com/ekzyis/delphi.market/server/router/handler"
|
"git.ekzyis.com/ekzyis/delphi.market/server/router/handler"
|
||||||
"git.ekzyis.com/ekzyis/delphi.market/test"
|
"git.ekzyis.com/ekzyis/delphi.market/test"
|
||||||
|
"github.com/decred/dcrd/dcrec/secp256k1/v4"
|
||||||
"github.com/labstack/echo/v4"
|
"github.com/labstack/echo/v4"
|
||||||
"github.com/stretchr/testify/assert"
|
"github.com/stretchr/testify/assert"
|
||||||
)
|
)
|
||||||
|
|
||||||
var (
|
|
||||||
db *db_.DB
|
|
||||||
)
|
|
||||||
|
|
||||||
func init() {
|
func init() {
|
||||||
test.Init(&db)
|
test.Init(&db)
|
||||||
}
|
}
|
||||||
|
|
||||||
func TestMain(m *testing.M) {
|
|
||||||
test.Main(m, db)
|
|
||||||
}
|
|
||||||
|
|
||||||
func TestLogin(t *testing.T) {
|
func TestLogin(t *testing.T) {
|
||||||
var (
|
var (
|
||||||
assert = assert.New(t)
|
assert = assert.New(t)
|
||||||
@ -72,6 +66,8 @@ func TestLoginCallback(t *testing.T) {
|
|||||||
sc context.ServerContext
|
sc context.ServerContext
|
||||||
req *http.Request
|
req *http.Request
|
||||||
rec *httptest.ResponseRecorder
|
rec *httptest.ResponseRecorder
|
||||||
|
sk *secp256k1.PrivateKey
|
||||||
|
pk *secp256k1.PublicKey
|
||||||
lnAuth *auth.LNAuth
|
lnAuth *auth.LNAuth
|
||||||
dbLnAuth *db_.LNAuth
|
dbLnAuth *db_.LNAuth
|
||||||
u *db_.User
|
u *db_.User
|
||||||
@ -90,10 +86,15 @@ func TestLoginCallback(t *testing.T) {
|
|||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
key, sig, err = test.Sign(lnAuth.K1)
|
sk, pk, err = test.GenerateKeyPair()
|
||||||
|
if !assert.NoErrorf(err, "error generating keypair") {
|
||||||
|
return
|
||||||
|
}
|
||||||
|
sig, err = test.Sign(sk, lnAuth.K1)
|
||||||
if !assert.NoErrorf(err, "error signing k1") {
|
if !assert.NoErrorf(err, "error signing k1") {
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
key = hex.EncodeToString(pk.SerializeCompressed())
|
||||||
|
|
||||||
sc = context.ServerContext{Db: db}
|
sc = context.ServerContext{Db: db}
|
||||||
e, req, rec = test.HTTPMocks("GET", fmt.Sprintf("/api/login?k1=%s&key=%s&sig=%s", lnAuth.K1, key, sig), nil)
|
e, req, rec = test.HTTPMocks("GET", fmt.Sprintf("/api/login?k1=%s&key=%s&sig=%s", lnAuth.K1, key, sig), nil)
|
||||||
|
72
server/router/handler/logout_test.go
Normal file
72
server/router/handler/logout_test.go
Normal file
@ -0,0 +1,72 @@
|
|||||||
|
package handler_test
|
||||||
|
|
||||||
|
import (
|
||||||
|
"database/sql"
|
||||||
|
"encoding/hex"
|
||||||
|
"fmt"
|
||||||
|
"net/http"
|
||||||
|
"net/http/httptest"
|
||||||
|
"testing"
|
||||||
|
|
||||||
|
db_ "git.ekzyis.com/ekzyis/delphi.market/db"
|
||||||
|
"git.ekzyis.com/ekzyis/delphi.market/server/router/context"
|
||||||
|
"git.ekzyis.com/ekzyis/delphi.market/server/router/handler"
|
||||||
|
"git.ekzyis.com/ekzyis/delphi.market/test"
|
||||||
|
"github.com/decred/dcrd/dcrec/secp256k1/v4"
|
||||||
|
"github.com/labstack/echo/v4"
|
||||||
|
"github.com/stretchr/testify/assert"
|
||||||
|
)
|
||||||
|
|
||||||
|
func init() {
|
||||||
|
test.Init(&db)
|
||||||
|
}
|
||||||
|
|
||||||
|
func TestLogout(t *testing.T) {
|
||||||
|
var (
|
||||||
|
assert = assert.New(t)
|
||||||
|
e *echo.Echo
|
||||||
|
c echo.Context
|
||||||
|
sc context.ServerContext
|
||||||
|
req *http.Request
|
||||||
|
rec *httptest.ResponseRecorder
|
||||||
|
pk *secp256k1.PublicKey
|
||||||
|
s *db_.Session
|
||||||
|
key string
|
||||||
|
err error
|
||||||
|
)
|
||||||
|
sc = context.ServerContext{Db: db}
|
||||||
|
e, req, rec = test.HTTPMocks("POST", "/logout", nil)
|
||||||
|
|
||||||
|
_, pk, err = test.GenerateKeyPair()
|
||||||
|
if !assert.NoErrorf(err, "error generating keypair") {
|
||||||
|
return
|
||||||
|
}
|
||||||
|
key = hex.EncodeToString(pk.SerializeCompressed())
|
||||||
|
err = sc.Db.CreateUser(&db_.User{Pubkey: key})
|
||||||
|
if !assert.NoErrorf(err, "error creating user") {
|
||||||
|
return
|
||||||
|
}
|
||||||
|
s = &db_.Session{Pubkey: key}
|
||||||
|
err = sc.Db.QueryRow("SELECT encode(gen_random_uuid()::text::bytea, 'base64')").Scan(&s.SessionId)
|
||||||
|
if !assert.NoErrorf(err, "error creating session id") {
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
// create session
|
||||||
|
err = sc.Db.CreateSession(s)
|
||||||
|
if !assert.NoErrorf(err, "error creating session") {
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
// session authentication via cookie
|
||||||
|
req.Header.Add("cookie", fmt.Sprintf("session=%s", s.SessionId))
|
||||||
|
|
||||||
|
c = e.NewContext(req, rec)
|
||||||
|
err = handler.HandleLogout(sc)(c)
|
||||||
|
assert.NoErrorf(err, "handler returned error")
|
||||||
|
|
||||||
|
// session must have been deleted
|
||||||
|
err = sc.Db.FetchSession(s)
|
||||||
|
assert.ErrorIsf(err, sql.ErrNoRows, "session not deleted")
|
||||||
|
|
||||||
|
}
|
@ -8,21 +8,28 @@ import (
|
|||||||
"github.com/decred/dcrd/dcrec/secp256k1/v4"
|
"github.com/decred/dcrd/dcrec/secp256k1/v4"
|
||||||
)
|
)
|
||||||
|
|
||||||
func Sign(k1_ string) (string, string, error) {
|
func GenerateKeyPair() (*secp256k1.PrivateKey, *secp256k1.PublicKey, error) {
|
||||||
var (
|
var (
|
||||||
sk *secp256k1.PrivateKey
|
sk *secp256k1.PrivateKey
|
||||||
|
err error
|
||||||
|
)
|
||||||
|
if sk, err = secp256k1.GeneratePrivateKey(); err != nil {
|
||||||
|
return nil, nil, err
|
||||||
|
}
|
||||||
|
return sk, sk.PubKey(), nil
|
||||||
|
}
|
||||||
|
|
||||||
|
func Sign(sk *secp256k1.PrivateKey, k1_ string) (string, error) {
|
||||||
|
var (
|
||||||
k1 []byte
|
k1 []byte
|
||||||
sig []byte
|
sig []byte
|
||||||
err error
|
err error
|
||||||
)
|
)
|
||||||
if k1, err = hex.DecodeString(k1_); err != nil {
|
if k1, err = hex.DecodeString(k1_); err != nil {
|
||||||
return "", "", err
|
return "", err
|
||||||
}
|
|
||||||
if sk, err = secp256k1.GeneratePrivateKey(); err != nil {
|
|
||||||
return "", "", err
|
|
||||||
}
|
}
|
||||||
if sig, err = ecdsa.SignASN1(rand.Reader, sk.ToECDSA(), k1); err != nil {
|
if sig, err = ecdsa.SignASN1(rand.Reader, sk.ToECDSA(), k1); err != nil {
|
||||||
return "", "", err
|
return "", err
|
||||||
}
|
}
|
||||||
return hex.EncodeToString(sk.PubKey().SerializeCompressed()), hex.EncodeToString(sig), nil
|
return hex.EncodeToString(sig), nil
|
||||||
}
|
}
|
||||||
|
Loading…
x
Reference in New Issue
Block a user