53 lines
1.6 KiB
Go
53 lines
1.6 KiB
Go
package common
|
|
|
|
import (
|
|
b64 "encoding/base64"
|
|
|
|
"github.com/fiskerinc/cloud-services/pkg/common/dbbasemodel"
|
|
)
|
|
|
|
type FileKey struct {
|
|
FileID string `pg:",pk" validate:"required,len=16,hexadecimal"`
|
|
Key []byte `pg:",notnull" validate:"required"`
|
|
Auth []byte `pg:",notnull" validate:"required"`
|
|
Nonce []byte `pg:",notnull" validate:"required"`
|
|
Error string `pg:"-"`
|
|
dbbasemodel.DBModelBase
|
|
}
|
|
|
|
type FileKeysRequest struct {
|
|
FileIDs []string `json:"file_ids" validate:"required,dive,len=16,hexadecimal"`
|
|
}
|
|
|
|
type FileKeyResponse struct {
|
|
FileID string `json:"file_id" redis:"file_id" validate:"required,len=16,hexadecimal"`
|
|
Key string `json:"key,omitempty" redis:"key,omitempty" validate:"required"`
|
|
Auth string `json:"auth,omitempty" redis:"auth,omitempty" validate:"required"`
|
|
Nonce string `json:"nonce,omitempty" redis:"nonce,omitempty" validate:"required"`
|
|
Error string `json:"error,omitempty" redis:"error,omitempty"`
|
|
}
|
|
|
|
// Turns the FileKey into a FileKeyResponse
|
|
func (fkr *FileKeyResponse) Apply(key *FileKey) {
|
|
fkr.FileID = key.FileID
|
|
fkr.Key = b64.StdEncoding.EncodeToString(key.Key)
|
|
fkr.Auth = b64.StdEncoding.EncodeToString(key.Auth)
|
|
fkr.Nonce = b64.StdEncoding.EncodeToString(key.Nonce)
|
|
}
|
|
|
|
// Turns a FileKeyResponse into a file key
|
|
func (key *FileKey) Apply(fkr *FileKeyResponse) (err error) {
|
|
key.FileID = fkr.FileID
|
|
key.Error = fkr.Error
|
|
key.Key, err = b64.StdEncoding.DecodeString(fkr.Key)
|
|
if err != nil {
|
|
return err
|
|
}
|
|
key.Auth, err = b64.StdEncoding.DecodeString(fkr.Auth)
|
|
if err != nil {
|
|
return err
|
|
}
|
|
key.Nonce, err = b64.StdEncoding.DecodeString(fkr.Nonce)
|
|
return err
|
|
}
|