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 (
|
||||
"database/sql"
|
||||
"encoding/hex"
|
||||
"fmt"
|
||||
"net/http"
|
||||
"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/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"
|
||||
)
|
||||
|
||||
var (
|
||||
db *db_.DB
|
||||
)
|
||||
|
||||
func init() {
|
||||
test.Init(&db)
|
||||
}
|
||||
|
||||
func TestMain(m *testing.M) {
|
||||
test.Main(m, db)
|
||||
}
|
||||
|
||||
func TestLogin(t *testing.T) {
|
||||
var (
|
||||
assert = assert.New(t)
|
||||
@ -72,6 +66,8 @@ func TestLoginCallback(t *testing.T) {
|
||||
sc context.ServerContext
|
||||
req *http.Request
|
||||
rec *httptest.ResponseRecorder
|
||||
sk *secp256k1.PrivateKey
|
||||
pk *secp256k1.PublicKey
|
||||
lnAuth *auth.LNAuth
|
||||
dbLnAuth *db_.LNAuth
|
||||
u *db_.User
|
||||
@ -90,10 +86,15 @@ func TestLoginCallback(t *testing.T) {
|
||||
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") {
|
||||
return
|
||||
}
|
||||
key = hex.EncodeToString(pk.SerializeCompressed())
|
||||
|
||||
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)
|
||||
|
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"
|
||||
)
|
||||
|
||||
func Sign(k1_ string) (string, string, error) {
|
||||
func GenerateKeyPair() (*secp256k1.PrivateKey, *secp256k1.PublicKey, error) {
|
||||
var (
|
||||
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
|
||||
sig []byte
|
||||
err error
|
||||
)
|
||||
if k1, err = hex.DecodeString(k1_); err != nil {
|
||||
return "", "", err
|
||||
}
|
||||
if sk, err = secp256k1.GeneratePrivateKey(); err != nil {
|
||||
return "", "", err
|
||||
return "", err
|
||||
}
|
||||
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