interfaces

package
v1.0.2 Latest Latest
Warning

This package is not in the latest version of its module.

Go to latest
Published: Feb 4, 2023 License: MIT Imports: 27 Imported by: 7

Documentation

Index

Constants

View Source
const MongoDefaultAlg = "AEAD_AES_256_CBC_HMAC_SHA_512-Deterministic"
View Source
const MongoDefaultDataKey = "default-data-key"
View Source
const MongoDefaultSecureField = "__encrypted__"
View Source
const MongoKeyVaultColl = "__keyVault"
View Source
const MongoRandomAlg = "AEAD_AES_256_CBC_HMAC_SHA_512-Random"

Variables

View Source
var ConfigManual = map[string]string{

	"config:autoreconnect": `auto reconnect database in first init`,
	"config:startinterval": `first timeout duration after failed`,
	"config:maxerror":      `how many reconnect before trigger error`,

	"config:sql:enable": `enable sql database`,
	"config:sql:host": `sql server address, must be valid rules hostname_rfc1123
	ex: localhost, 127.0.0.1, service.domain, 10.10.10.10, etc.`,
	"config:sql:port":     `sql server port number`,
	"config:sql:username": `sql server username`,
	"config:sql:password": `sql server password`,
	"config:sql:database": `sql database name`,
	"config:sql:options":  `this option will be added after connection string`,
	"config:sql:connection": `if this value not empty, another mysql parameter will be ignored.
	use this, if you have a custom protocol connection.
	like username:password@unix(/tmp/mysql.sock)/dbname.`,
	"config:sql:dbpath":      `sqlite database file location path`,
	"config:rabbitmq:enable": `enable rabbitmq database message brokers`,
	"config:rabbitmq:host": `rabbitmq server address, must be valid rules hostname_rfc1123
	ex: localhost, 127.0.0.1, service.domain, 10.10.10.10, etc.`,
	"config:rabbitmq:port":                `rabbitmq server port number`,
	"config:rabbitmq:username":            `rabbitmq server username`,
	"config:rabbitmq:password":            `rabbitmq server password`,
	"config:rabbitmq:reconnectDuration":   `rabbitmq reconnect duration (in second).`,
	"config:rabbitmq:dedicatedConnection": `dedicated connection for each consumer, more reliable but more cost.`,
	"config:redis:host": `redis server address, must be valid rules hostname_rfc1123
	ex: localhost, 127.0.0.1, service.domain, 10.10.10.10, etc.`,
	"config:redis:port":     `redis server port number`,
	"config:redis:password": `redis server password`,
	"config:redis:pool":     `number of redis pool`,
}
View Source
var RecordNotFound = errors.New("record not found in database")

RecordNotFound - global error record not found type

Functions

func BuildSqlSelect added in v0.0.9

func BuildSqlSelect(params ...interface{}) string

BuildSqlSelect - column:alias, ex : "users.email::email"

func SetManual

func SetManual(man map[string]string) map[string]string

Types

type ConsumerCallback

type ConsumerCallback func(Messages, ConsumerCallbackIsDone)

type ConsumerCallbackIsDone added in v0.0.6

type ConsumerCallbackIsDone struct {
	Done       context.CancelFunc
	EndRequest func()
}

type Database

type Database interface {
	Init(logger.Logger)
	SetTracer(tracing.Tracing)
	LoadRabbitMQ(string, RabbitMQProviderConfig) RabbitMQ
	LoadSQL(string, SQLConfig) SQL
	LoadRedis(string, RedisProviderConfig) Redis
	LoadEmbedded(EmbeddedOptions) Embedded
	LoadKafka(string, KafkaProviderConfig) Kafka
	LoadMongo(tag string, config MongoProviderConfig) Mongo
}

type Embedded

type Embedded interface {
	DB() *nutsdb.DB
	Set(bucket string, key string, value interface{}, encoding Encoding) (err error)
	Get(bucket string, key string, value interface{}, encoding Encoding) (err error)
	Delete(bucket string, key string) (err error)
	GetAllKeys(bucket string) (keys []string, err error)
}

type EmbeddedOptions

type EmbeddedOptions struct {
	Directory string
}

type Encoder

type Encoder struct {
	Raw      io.Reader
	Encoding Encoding
	// contains filtered or unexported fields
}

func (*Encoder) Context

func (c *Encoder) Context() context.Context

func (*Encoder) Decode

func (c *Encoder) Decode(data interface{}) error

func (*Encoder) Encode

func (c *Encoder) Encode(data interface{}) (res []byte, err error)

func (*Encoder) Exchange

func (c *Encoder) Exchange() string

func (*Encoder) RoutingKey

func (c *Encoder) RoutingKey() string

func (*Encoder) SetContext

func (c *Encoder) SetContext(ctx context.Context)

type Encoding

type Encoding int
const (
	EncodingBase64Gob Encoding = iota
	EncodingGob
	EncodingProto
	EncodingNone
	EncodingJSON
)

type GoogleServicesKey added in v0.0.9

type GoogleServicesKey struct {
	Type                    string `json:"type"`
	ProjectId               string `json:"project_id"`
	PrivateKeyId            string `json:"private_key_id"`
	PrivateKey              string `json:"private_key"`
	ClientEmail             string `json:"client_email"`
	ClientId                string `json:"client_id"`
	AuthUri                 string `json:"auth_uri"`
	TokenUri                string `json:"token_uri"`
	AuthProviderX509CertUrl string `json:"auth_provider_x509_cert_url"`
	ClientX509CertUrl       string `json:"client_x509_cert_url"`
}

type Kafka added in v0.0.6

type Kafka interface {
	Consumer(KafkaOptions, ConsumerCallback)
	Producer(ProducerIsReady)
	Push(ctx context.Context, id string, options KafkaOptions, body interface{}, cb ConsumerCallback) error
}

type KafkaOptions added in v0.0.6

type KafkaOptions struct {
	Topic          string
	RegistryValue  string
	Group          string
	SchemeVersion  int
	SchemeID       int
	Encoding       Encoding
	MultipleThread bool
	Limiter        int
}

type KafkaProviderConfig added in v0.0.6

type KafkaProviderConfig struct {
	Enable           bool   `yaml:"enable" default:"false" desc:"config:kafka:enable"`
	Host             string `yaml:"host" default:"127.0.0.1:9092" desc:"config:kafka:host"`
	Registry         string `yaml:"registry" default:"" desc:"config:kafka:registry"`
	Username         string `yaml:"username" default:""  desc:"config:kafka:username"`
	Password         string `yaml:"password" default:"" desc:"config:kafka:password"`
	SecurityProtocol string `yaml:"securityProtocol" default:"SASL_SSL"  desc:"config:kafka:securityProtocol"`
	Mechanisms       string `yaml:"mechanisms" default:"PLAIN"  desc:"config:kafka:mechanisms"`
	Debug            string `yaml:"debug" default:"consumer"  desc:"config:kafka:debug"`
}

type Kms added in v0.0.9

type Kms interface {
	Init() error
	Keys() (res string)
	CurrentVersion() string
	CurrentKey() string
	GetKeyVersion(v int) string
	Len() int
	SwitchNextVersion(version int) error
	KeyId() string
}

type Messages

type Messages interface {
	Exchange() string
	RoutingKey() string
	Decode(interface{}) error
	SetContext(context.Context)
	Context() context.Context
}

func NewEncoder

func NewEncoder(raw io.Reader, exchange, routingKey string, enc Encoding) Messages

type Mongo added in v0.0.9

type Mongo interface {
	Get(encOption *options.AutoEncryptionOptions) (client *mongo.Client, err error)
	CreateEncryptedKeys(keys []string, bypassAutoEncryption, bypassQueryAnalysis bool) (enc *MongoEncrypted, err error)
	GetEncrypted(schemaMap map[string]interface{}, enc *MongoEncrypted, bypassAutoEncryption, bypassQueryAnalysis bool) (en *MongoEncrypted, err error)
	GetQueryableEncrypted(encryptedFieldsMap map[string]interface{}, enc *MongoEncrypted, bypassAutoEncryption, bypassQueryAnalysis bool) (res *MongoEncrypted, err error)
	DropQueryableEncryptedCollection(dbName, collName string, enc *MongoEncrypted) error
	DefaultClient() (err error)
	Client() *mongo.Client
	AddKms(name string, kms Kms)
	GetKms(name string) (kms Kms)
	GetConfig() MongoProviderConfig
}

type MongoClientEncrypted added in v1.0.0

type MongoClientEncrypted struct {
	// contains filtered or unexported fields
}

func NewMongoClientEncrypted added in v1.0.0

func NewMongoClientEncrypted(keyName string, db Mongo, encoding string) *MongoClientEncrypted

func (*MongoClientEncrypted) Decrypt added in v1.0.0

func (c *MongoClientEncrypted) Decrypt(raw bson.Raw, desc interface{}) error

func (*MongoClientEncrypted) Encrypt added in v1.0.0

func (c *MongoClientEncrypted) Encrypt(data interface{}) interface{}

type MongoEncrypted added in v0.0.9

type MongoEncrypted struct {
	Client           *mongo.Client
	ClientEncryption *mongo.ClientEncryption
	DataKeyID        map[string]primitive.Binary
	KmsProvider      map[string]map[string]interface{}
}

type MongoKeyProviderConfig added in v0.0.9

type MongoKeyProviderConfig struct {
	SecretKey             string            `yaml:"secretkey" default:"" desc:"config:mongo:secretkey"`
	KMIpAddress           string            `yaml:"kMIpAddress" default:"" desc:"config:mongo:kMIpAddress"`
	AccessKeyId           string            `yaml:"accessKeyId" default:"" desc:"config:mongo:accessKeyId"`
	SecretAccessKey       string            `yaml:"secretAccessKey" default:"" desc:"config:mongo:secretAccessKey"`
	Key                   string            `yaml:"key" default:"" desc:"config:mongo:key"`
	Region                string            `yaml:"region" default:"" desc:"config:mongo:region"`
	GoogleServicesKey     GoogleServicesKey `yaml:"googleServicesKey" default:"" desc:"config:mongo:googleServicesKey"`
	Location              string            `yaml:"location" default:"" desc:"config:mongo:location"`
	KeyRing               string            `yaml:"keyRing" default:"" desc:"config:mongo:keyRing"`
	KeyName               string            `yaml:"keyName" default:"" desc:"config:mongo:keyName"`
	TlsCertificateKeyFile string            `yaml:"tlsCertificateKeyFile" default:"" desc:"config:mongo:tlsCertificateKeyFile"`
	TlsCAFile             string            `yaml:"tlsCAFile" default:"" desc:"config:mongo:tlsCAFile"`
	Vault                 VaultConfig       `yaml:"vault" default:""  desc:"config:mongo:vault"`
}

type MongoProviderConfig added in v0.0.9

type MongoProviderConfig struct {
	Enable            bool                   `yaml:"enable" default:"false" desc:"config:mongo:enable"`
	Uri               string                 `yaml:"uri" default:"" desc:"config:mongo:uri"`
	Host              string                 `yaml:"host" default:"127.0.0.1" desc:"config:mongo:host"`
	Port              int                    `yaml:"port" default:"27017" desc:"config:mongo:port"`
	UserName          string                 `yaml:"username" default:"root" desc:"config:mongo:username"`
	Password          string                 `yaml:"password" default:"root" desc:"config:mongo:password"`
	Database          string                 `yaml:"database" default:"sample_database" desc:"config:mongo:database"`
	Options           string                 `yaml:"options" default:"options" desc:"config:mongo:options"`
	AutoReconnect     bool                   `yaml:"autoreconnect" default:"false"  desc:"config:autoreconnect"`
	StartInterval     int                    `yaml:"startinterval" default:"2"  desc:"config:startinterval"`
	MaxError          int                    `yaml:"maxerror" default:"5"  desc:"config:maxerror"`
	MongodCryptdPort  int                    `yaml:"mongodCryptdPort" default:"27020" desc:"config:mongo:mongodCryptdPort"`
	KeyProvider       string                 `yaml:"keyProvider" default:"local" desc:"config:mongo:keyProvider"`
	KeyProviderConfig MongoKeyProviderConfig `yaml:"keyProviderConfig" desc:"config:mongo:keyProviderConfig"`
}

MongoProviderConfig - Mongodb configuration

If Uri not empty, Host, Port, UserName, Password and Options will be ignored

type MongoSecureField added in v1.0.0

type MongoSecureField struct {
	Version  int                             `json:"version"`
	KeyId    string                          `json:"keyId"`
	Encoding string                          `json:"encoding"`
	Data     map[string]MongoSecureFieldData `json:"data"`
	// contains filtered or unexported fields
}

func NewMongoSecureField added in v1.0.0

func NewMongoSecureField(kms Kms, encoding string) *MongoSecureField

func (*MongoSecureField) AddData added in v1.0.0

func (c *MongoSecureField) AddData(name string, data interface{})

type MongoSecureFieldData added in v1.0.0

type MongoSecureFieldData struct {
	Hash  string `json:"hash"`
	Crypt string `json:"crypt"`
}

type ProducerIsReady added in v0.0.6

type ProducerIsReady func()

type Provider

type Provider int

type RabbitMQ

type RabbitMQ interface {
	Consumer(RabbitMQOptions, ConsumerCallback)
	Producer(RabbitMQOptions)
	Push(ctx context.Context,
		id, exchange,
		key string,
		body interface{},
		cb ConsumerCallback) error
}

type RabbitMQOptions

type RabbitMQOptions struct {
	Exchange     string
	ExchangeType string
	RoutingKey   string
	Durable      bool
	AutoDeleted  bool
	NoWait       bool
	Encoding     Encoding
}

type RabbitMQProviderConfig

type RabbitMQProviderConfig struct {
	Enable              bool   `yaml:"enable" default:"false" desc:"config:rabbitmq:enable"`
	Host                string `yaml:"host" default:"127.0.0.1" desc:"config:rabbitmq:host"`
	Port                int    `yaml:"port" default:"5672" desc:"config:rabbitmq:port"`
	Username            string `yaml:"username" default:"guest"  desc:"config:rabbitmq:username"`
	Password            string `yaml:"password" default:"guest" desc:"config:rabbitmq:password"`
	ReconnectDuration   int    `yaml:"reconnectDuration" default:"5" desc:"config:rabbitmq:reconnectDuration"`
	DedicatedConnection bool   `yaml:"dedicatedConnection" default:"false" desc:"config:rabbitmq:dedicatedConnection"`
}

type Redis added in v0.0.2

type Redis interface {
	Init() error
	GetPool() (pool *radix.Pool)
}

type RedisProviderConfig added in v0.0.2

type RedisProviderConfig struct {
	Enable        bool   `yaml:"enable" default:"false" desc:"config:redis:enable"`
	Host          string `yaml:"host" default:"127.0.0.1" desc:"config:redis:host"`
	Port          int    `yaml:"port" default:"6379" desc:"config:redis:port"`
	Password      string `yaml:"password" default:"" desc:"config:redis:password"`
	Pool          int    `yaml:"pool" default:"10" desc:"config:redis:pool"`
	AutoReconnect bool   `yaml:"autoreconnect" default:"false"  desc:"config:autoreconnect"`
	StartInterval int    `yaml:"startinterval" default:"2"  desc:"config:startinterval"`
	MaxError      int    `yaml:"maxerror" default:"5"  desc:"config:maxerror"`
}

type SQL

type SQL interface {
	Config() SQLConfig
	Start() error
	Orm() *gorm.DB
	SQLite() error
	MySQL() error
	Close() error
}

type SQLConfig

type SQLConfig struct {
	Driver             string `yaml:"driver" default:"mysql" desc:"config:sql:enable"`
	Enable             bool   `yaml:"enable" default:"false" desc:"config:sql:enable"`
	Host               string `yaml:"host" default:"127.0.0.1" desc:"config:sql:host"`
	Port               int    `yaml:"port" default:"3306" desc:"config:sql:port"`
	Username           string `yaml:"username" default:"root"  desc:"config:sql:username"`
	Password           string `yaml:"password" default:"root" desc:"config:sql:password"`
	Database           string `yaml:"database" default:"sample_database" desc:"config:sql:database"`
	Options            string `yaml:"options" default:"" desc:"config:sql:options"`
	Connection         string `yaml:"connection" default:"" desc:"config:sql:connection"`
	AutoReconnect      bool   `yaml:"autoreconnect" default:"false"  desc:"config:autoreconnect"`
	StartInterval      int    `yaml:"startinterval" default:"2"  desc:"config:startinterval"`
	MaxError           int    `yaml:"maxerror" default:"5"  desc:"config:maxerror"`
	DBPath             string `yaml:"dbpath" default:"./sqlite.db" desc:"config:sql:dbpath"`
	Sslmode            string `yaml:"sslmode" default:"disable" desc:"config:sql:sslmode"`
	TimeoutConnection  int    `yaml:"timeoutConnection" default:"5000" desc:"config:sql:timeoutConnection"`
	TimeoutTransaction int    `yaml:"timeoutTransaction" default:"5000" desc:"config:sql:timeoutTransaction"`
}

type SqlEncryptType added in v0.0.9

type SqlEncryptType int
const (
	EncryptTypeCustom SqlEncryptType = 0
	EncryptTypeNative                = 1
)

type SqlEncrypted added in v0.0.9

type SqlEncrypted struct {
	Kms Kms
	// contains filtered or unexported fields
}

func NewSqlEncrypted added in v0.0.9

func NewSqlEncrypted(kms Kms, tp SqlEncryptType) *SqlEncrypted

func (*SqlEncrypted) Encrypt added in v0.0.9

func (c *SqlEncrypted) Encrypt(data interface{}) SqlEncryptedField

func (*SqlEncrypted) EncryptedIndexWhere added in v1.0.0

func (c *SqlEncrypted) EncryptedIndexWhere(col string, cond string, params interface{}) clause.Expr

func (*SqlEncrypted) EncryptedSelect added in v0.0.9

func (c *SqlEncrypted) EncryptedSelect(params ...string) []string

func (*SqlEncrypted) EncryptedWhere added in v0.0.9

func (c *SqlEncrypted) EncryptedWhere(col string, cond string, params string) clause.Expr

func (*SqlEncrypted) SelfEncrypt added in v0.0.9

func (c *SqlEncrypted) SelfEncrypt(data interface{}) SqlEncryptedField

type SqlEncryptedField added in v0.0.9

type SqlEncryptedField struct {
	Raw interface{} `json:"Raw"`
	// contains filtered or unexported fields
}

func (SqlEncryptedField) GormDBDataType added in v0.0.9

func (c SqlEncryptedField) GormDBDataType(db *gorm.DB, field *schema.Field) string

func (SqlEncryptedField) GormDataType added in v0.0.9

func (c SqlEncryptedField) GormDataType() string

func (SqlEncryptedField) GormValue added in v0.0.9

func (c SqlEncryptedField) GormValue(ctx context.Context, db *gorm.DB) clause.Expr

func (*SqlEncryptedField) Scan added in v0.0.9

func (c *SqlEncryptedField) Scan(value interface{}) error

type SqlEncryptedList added in v1.0.0

type SqlEncryptedList struct {
	sync.RWMutex
	// contains filtered or unexported fields
}

func NewSqlEncryptedList added in v1.0.0

func NewSqlEncryptedList() *SqlEncryptedList

func (*SqlEncryptedList) Get added in v1.0.0

func (c *SqlEncryptedList) Get(key string) *SqlEncrypted

func (*SqlEncryptedList) Store added in v1.0.0

func (c *SqlEncryptedList) Store(key string, d *SqlEncrypted)

type VaultConfig added in v1.0.0

type VaultConfig struct {
	Enable     bool   `yaml:"enable"`
	Address    string `yaml:"address"`
	Token      string `yaml:"token"`
	Engine     string `yaml:"engine"`
	Secret     string `yaml:"secret"`
	Key        string `yaml:"key"`
	AutoReload bool   `yaml:"autoReload"`
}

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
y or Y : Canonical URL