39 lines
1.2 KiB
Go
39 lines
1.2 KiB
Go
package openbao
|
|
|
|
import (
|
|
"context"
|
|
|
|
"git.ddupan.top/panxiao81/ayatori/internal/database/application"
|
|
)
|
|
|
|
var _ application.CredentialStore = (*Credentials)(nil)
|
|
|
|
func (c *Credentials) ProvisionLocation(uid string) (application.CredentialLocation, error) {
|
|
path, err := c.ProvisionPath(uid)
|
|
if err != nil {
|
|
return application.CredentialLocation{}, err
|
|
}
|
|
return application.CredentialLocation{Mount: c.mount, Path: path}, nil
|
|
}
|
|
|
|
func (c *Credentials) ReadCredential(ctx context.Context, location application.CredentialLocation, version int64) (application.ApplicationCredential, error) {
|
|
if location.Mount != c.mount {
|
|
return application.ApplicationCredential{}, ErrInvalidLocation
|
|
}
|
|
if version == 0 {
|
|
return c.Read(ctx, location.Path)
|
|
}
|
|
return c.ReadConfirmed(ctx, location.Path, version)
|
|
}
|
|
|
|
func (c *Credentials) CreateCredential(ctx context.Context, location application.CredentialLocation, credential application.ApplicationCredential) (int64, error) {
|
|
if location.Mount != c.mount {
|
|
return 0, ErrInvalidLocation
|
|
}
|
|
if err := c.Create(ctx, location.Path, credential); err != nil {
|
|
return 0, err
|
|
}
|
|
// Create 的合同是 CAS=0 且回读版本 1 和七键完全一致。
|
|
return 1, nil
|
|
}
|