feat: initial commit
All checks were successful
Cadoles/bouncer/pipeline/head This commit looks good

This commit is contained in:
2023-04-24 20:52:12 +02:00
commit d56a3c6f5e
133 changed files with 8195 additions and 0 deletions

View File

@ -0,0 +1,9 @@
package queue
type Options struct{}
type OptionFunc func(*Options)
func defaultOptions() *Options {
return &Options{}
}

47
internal/queue/queue.go Normal file
View File

@ -0,0 +1,47 @@
package queue
import (
"net/http"
"forge.cadoles.com/Cadoles/go-proxy"
"forge.cadoles.com/cadoles/bouncer/internal/proxy/director"
"forge.cadoles.com/cadoles/bouncer/internal/store"
"github.com/davecgh/go-spew/spew"
)
const LayerType store.LayerType = "queue"
type Queue struct {
repository Repository
}
// LayerType implements director.MiddlewareLayer
func (*Queue) LayerType() store.LayerType {
return LayerType
}
// Middleware implements director.MiddlewareLayer
func (*Queue) Middleware(layer *store.Layer) proxy.Middleware {
return func(h http.Handler) http.Handler {
fn := func(w http.ResponseWriter, r *http.Request) {
spew.Dump(layer)
h.ServeHTTP(w, r)
}
return http.HandlerFunc(fn)
}
}
func New(repository Repository, funcs ...OptionFunc) *Queue {
opts := defaultOptions()
for _, fn := range funcs {
fn(opts)
}
return &Queue{
repository: repository,
}
}
var _ director.MiddlewareLayer = &Queue{}

View File

@ -0,0 +1,35 @@
package redis
import (
"context"
"forge.cadoles.com/cadoles/bouncer/internal/queue"
"github.com/redis/go-redis/v9"
)
type Repository struct {
client redis.UniversalClient
}
// AddToQueue implements queue.Repository
func (*Repository) AddToQueue(ctx context.Context, queueName string, sessionId string) (uint, error) {
panic("unimplemented")
}
// IsInQueue implements queue.Repository
func (*Repository) IsInQueue(ctx context.Context, queueName string, sessionId string) (bool, uint, error) {
panic("unimplemented")
}
// RemoveFromQueue implements queue.Repository
func (*Repository) RemoveFromQueue(ctx context.Context, queueName string, sessionId string) error {
panic("unimplemented")
}
func NewRepository(client redis.UniversalClient) *Repository {
return &Repository{
client: client,
}
}
var _ queue.Repository = &Repository{}

View File

@ -0,0 +1,9 @@
package queue
import "context"
type Repository interface {
IsInQueue(ctx context.Context, queueName string, sessionId string) (bool, uint, error)
AddToQueue(ctx context.Context, queueName string, sessionId string) (uint, error)
RemoveFromQueue(ctx context.Context, queueName string, sessionId string) error
}

20
internal/queue/schema.go Normal file
View File

@ -0,0 +1,20 @@
package queue
import (
_ "embed"
"forge.cadoles.com/cadoles/bouncer/internal/schema"
"github.com/pkg/errors"
)
//go:embed schema/layer-options.json
var rawLayerOptionsSchema []byte
func init() {
layerOptionsSchema, err := schema.Parse(rawLayerOptionsSchema)
if err != nil {
panic(errors.Wrap(err, "could not parse queue layer options schema"))
}
schema.RegisterLayerOptionsSchema(LayerType, layerOptionsSchema)
}

View File

@ -0,0 +1,12 @@
{
"$id": "https://forge.cadoles.com/cadoles/bouncer/schemas/queue-layer-options",
"title": "Queue layer options",
"type": "object",
"properties": {
"capacity": {
"type": "number"
}
},
"additionalProperties": false,
"required": ["capacity"]
}