Implemented remaining transport layer methods; added logging middleware;

added Dockerfile; added gen cert Makefile cmds; added Redis repo
This commit is contained in:
mitchell 2019-05-05 17:56:27 -07:00
parent 719a462048
commit c289eecd54
20 changed files with 1977 additions and 143 deletions

View file

@ -9,7 +9,6 @@ import (
"github.com/mitchell/selfpass/credentials/types"
)
// NewDynamoTable TODO
func NewDynamoTable(name string) DynamoTable {
cfg, err := external.LoadDefaultAWSConfig()
if err != nil {
@ -21,22 +20,20 @@ func NewDynamoTable(name string) DynamoTable {
}
}
// DynamoTable TODO
type DynamoTable struct {
name string
svc *dynamodb.DynamoDB
}
// GetAllMetadata TODO
func (t DynamoTable) GetAllMetadata(ctx context.Context, sourceService string, errch chan<- error) (output <-chan types.Metadata) {
func (t DynamoTable) GetAllMetadata(ctx context.Context, sourceHost string, errch chan<- error) (output <-chan types.Metadata) {
mdch := make(chan types.Metadata, 1)
in := &dynamodb.ScanInput{TableName: &t.name}
if sourceService != "" {
if sourceHost != "" {
filterExpr := "SourceHost = :sh"
in.FilterExpression = &filterExpr
in.ExpressionAttributeValues = map[string]dynamodb.AttributeValue{
":sh": {S: &sourceService},
":sh": {S: &sourceHost},
}
}
@ -68,7 +65,6 @@ func (t DynamoTable) GetAllMetadata(ctx context.Context, sourceService string, e
return mdch
}
// Get TODO
func (t DynamoTable) Get(ctx context.Context, id string) (output types.Credential, err error) {
req := t.svc.GetItemRequest(&dynamodb.GetItemInput{
TableName: &t.name,
@ -86,7 +82,6 @@ func (t DynamoTable) Get(ctx context.Context, id string) (output types.Credentia
return output, err
}
// Put TODO
func (t DynamoTable) Put(ctx context.Context, c types.Credential) (err error) {
item, err := dynamodbattribute.MarshalMap(c)
if err != nil {
@ -104,7 +99,6 @@ func (t DynamoTable) Put(ctx context.Context, c types.Credential) (err error) {
return err
}
// Delete TODO
func (t DynamoTable) Delete(ctx context.Context, id string) (err error) {
req := t.svc.DeleteItemRequest(&dynamodb.DeleteItemInput{
TableName: &t.name,

View file

@ -0,0 +1,111 @@
package repositories
import (
"context"
"github.com/mediocregopher/radix/v3"
"github.com/mitchell/selfpass/credentials/types"
)
func NewRedisConn(cfg ConnConfig) (c RedisConn, err error) {
p, err := radix.NewPool(cfg.NetworkType, cfg.Address, int(cfg.Size), cfg.Options...)
return RedisConn{p: p}, err
}
type ConnConfig struct {
NetworkType string
Address string
Size uint
Options []radix.PoolOpt
}
type RedisConn struct {
p *radix.Pool
}
func (conn RedisConn) GetAllMetadata(ctx context.Context, sourceHost string, errch chan<- error) (output <-chan types.Metadata) {
mdch := make(chan types.Metadata, 1)
go func() {
defer close(mdch)
var key string
scr := radix.NewScanner(conn.p, radix.ScanOpts{Command: scan, Pattern: sourceHost + star})
for scr.Next(&key) {
select {
case <-ctx.Done():
return
default:
var md types.Metadata
if err := conn.p.Do(radix.Cmd(&md, hGetAll, key)); err != nil {
errch <- err
return
}
mdch <- md
}
}
}()
return mdch
}
func (conn RedisConn) Get(ctx context.Context, id string) (output types.Credential, err error) {
var key string
scr := radix.NewScanner(conn.p, radix.ScanOpts{Command: scan, Pattern: star + id, Count: 1})
if !scr.Next(&key) {
return output, nil
}
if err = scr.Close(); err != nil {
return output, err
}
err = conn.p.Do(radix.Cmd(&output, hGetAll, key))
return output, err
}
func (conn RedisConn) Put(ctx context.Context, c types.Credential) (err error) {
err = conn.p.Do(radix.FlatCmd(nil, hMSet, c.SourceHost+dash+c.ID, c))
return err
}
func (conn RedisConn) Delete(ctx context.Context, id string) (err error) {
var key string
scr := radix.NewScanner(conn.p, radix.ScanOpts{Command: scan, Pattern: star + id, Count: 1})
if !scr.Next(&key) {
return nil
}
if err = scr.Close(); err != nil {
return err
}
err = conn.p.Do(radix.Cmd(nil, del, key))
return err
}
func (conn RedisConn) DumpDB(ctx context.Context) (bs []byte, err error) {
bs = []byte{}
if err := conn.p.Do(radix.Cmd(&bs, "DUMP")); err != nil {
return nil, err
}
return bs, nil
}
const (
dash = "-"
star = "*"
scan = "SCAN"
hGetAll = "HGETALL"
hMSet = "HMSET"
del = "DEL"
)