mobile: add EncryptionRestrictions (#3260)
This commit is contained in:
parent
5b20c716e6
commit
57ff0af6ba
@ -108,6 +108,17 @@ type Scope struct {
|
|||||||
lib *libuplink.Scope
|
lib *libuplink.Scope
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// NewScope creates new Scope
|
||||||
|
func NewScope(satelliteAddr string, apiKey *APIKey, encryptionAccess *EncryptionAccess) *Scope {
|
||||||
|
return &Scope{
|
||||||
|
lib: &libuplink.Scope{
|
||||||
|
SatelliteAddr: satelliteAddr,
|
||||||
|
APIKey: *apiKey.lib,
|
||||||
|
EncryptionAccess: encryptionAccess.lib,
|
||||||
|
},
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
// Serialize serializes a Scope to a base58-encoded string
|
// Serialize serializes a Scope to a base58-encoded string
|
||||||
func (s *Scope) Serialize() (string, error) {
|
func (s *Scope) Serialize() (string, error) {
|
||||||
return s.lib.Serialize()
|
return s.lib.Serialize()
|
||||||
|
@ -70,3 +70,57 @@ func NewEncryptionAccessWithDefaultKey(defaultKey []byte) (_ *EncryptionAccess,
|
|||||||
}
|
}
|
||||||
return &EncryptionAccess{lib: libuplink.NewEncryptionAccessWithDefaultKey(*key)}, nil
|
return &EncryptionAccess{lib: libuplink.NewEncryptionAccessWithDefaultKey(*key)}, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Restrict creates a new EncryptionAccess with no default key, where the key material
|
||||||
|
// in the new access is just enough to allow someone to access all of the given
|
||||||
|
// restrictions but no more.
|
||||||
|
func (e *EncryptionAccess) Restrict(satelliteAddr string, apiKey *APIKey, restrictions *EncryptionRestrictions) (_ *Scope, err error) {
|
||||||
|
libAPIKey, ea, err := e.lib.Restrict(*apiKey.lib, restrictions.restrictions...)
|
||||||
|
return &Scope{
|
||||||
|
lib: &libuplink.Scope{
|
||||||
|
SatelliteAddr: satelliteAddr,
|
||||||
|
APIKey: libAPIKey,
|
||||||
|
EncryptionAccess: ea,
|
||||||
|
},
|
||||||
|
}, err
|
||||||
|
}
|
||||||
|
|
||||||
|
// Import merges the other encryption access context into this one. In cases
|
||||||
|
// of conflicting path decryption settings (including if both accesses have
|
||||||
|
// a default key), the new settings are kept.
|
||||||
|
func (e *EncryptionAccess) Import(other *EncryptionAccess) error {
|
||||||
|
return e.lib.Import(other.lib)
|
||||||
|
}
|
||||||
|
|
||||||
|
// EncryptionRestriction represents a scenario where some set of objects
|
||||||
|
// may need to be encrypted/decrypted
|
||||||
|
type EncryptionRestriction struct {
|
||||||
|
lib *libuplink.EncryptionRestriction
|
||||||
|
}
|
||||||
|
|
||||||
|
// NewEncryptionRestriction creates new EncryptionRestriction
|
||||||
|
func NewEncryptionRestriction(bucket, path string) *EncryptionRestriction {
|
||||||
|
return &EncryptionRestriction{
|
||||||
|
lib: &libuplink.EncryptionRestriction{
|
||||||
|
Bucket: bucket,
|
||||||
|
PathPrefix: path,
|
||||||
|
},
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// EncryptionRestrictions combines EncryptionRestriction to overcome gomobile limitation (no arrays)
|
||||||
|
type EncryptionRestrictions struct {
|
||||||
|
restrictions []libuplink.EncryptionRestriction
|
||||||
|
}
|
||||||
|
|
||||||
|
// NewEncryptionRestrictions creates new EncryptionRestrictions
|
||||||
|
func NewEncryptionRestrictions() *EncryptionRestrictions {
|
||||||
|
return &EncryptionRestrictions{
|
||||||
|
restrictions: make([]libuplink.EncryptionRestriction, 0),
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// Add adds EncryptionRestriction
|
||||||
|
func (e *EncryptionRestrictions) Add(restriction *EncryptionRestriction) {
|
||||||
|
e.restrictions = append(e.restrictions, *restriction.lib)
|
||||||
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user