You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
105 lines
2.8 KiB
105 lines
2.8 KiB
package dao |
|
|
|
import ( |
|
"context" |
|
"encoding/json" |
|
"fmt" |
|
"time" |
|
|
|
"go-common/app/tool/saga/conf" |
|
"go-common/library/log" |
|
|
|
"github.com/pkg/errors" |
|
"github.com/tsuna/gohbase/hrpc" |
|
) |
|
|
|
const ( |
|
_sagaTable = "ep:saga" |
|
_ColFamily = "saga_auth" |
|
_cSagaPathOwner = "path_owner" |
|
_cSagaPathReviewer = "path_reviewer" |
|
) |
|
|
|
// sagaAuthKey ... |
|
func sagaAuthKey(projID int, branch string, path string) string { |
|
return fmt.Sprintf("saga_auth_%d_%s_%s", projID, branch, path) |
|
} |
|
|
|
// SetPathAuthH ... |
|
func (d *Dao) SetPathAuthH(c context.Context, projID int, branch string, path string, owners []string, reviewers []string) (err error) { |
|
var ( |
|
key = sagaAuthKey(projID, branch, path) |
|
auth = make(map[string][]byte) |
|
bOwner []byte |
|
bReviewer []byte |
|
) |
|
|
|
if bOwner, err = json.Marshal(owners); err != nil { |
|
return errors.WithStack(err) |
|
} |
|
if bReviewer, err = json.Marshal(reviewers); err != nil { |
|
return errors.WithStack(err) |
|
} |
|
|
|
auth[_cSagaPathOwner] = bOwner |
|
auth[_cSagaPathReviewer] = bReviewer |
|
values := map[string]map[string][]byte{_ColFamily: auth} |
|
|
|
ctx, cancel := context.WithTimeout(c, time.Duration(conf.Conf.HBase.WriteTimeout)) |
|
defer cancel() |
|
|
|
if _, err = d.hbase.PutStr(ctx, _sagaTable, key, values); err != nil { |
|
return errors.Wrapf(err, "hbase PutStr error (key: %s values: %v)", key, values) |
|
} |
|
return |
|
} |
|
|
|
// PathAuthH ... |
|
func (d *Dao) PathAuthH(ctx context.Context, projID int, branch string, path string) (owners []string, reviewers []string, err error) { |
|
var ( |
|
key = sagaAuthKey(projID, branch, path) |
|
result *hrpc.Result |
|
) |
|
ctx, cancel := context.WithTimeout(ctx, time.Duration(conf.Conf.HBase.ReadTimeout)) |
|
defer cancel() |
|
|
|
if result, err = d.hbase.GetStr(ctx, _sagaTable, key); err != nil { |
|
err = errors.Wrapf(err, "hbase GetStr error (key: %s)", key) |
|
return |
|
} |
|
|
|
for _, c := range result.Cells { |
|
switch string(c.Qualifier) { |
|
case _cSagaPathOwner: |
|
if err = json.Unmarshal(c.Value, &owners); err != nil { |
|
err = errors.WithStack(err) |
|
return |
|
} |
|
log.Info("Get key: (%s), owners Info: (%+v)", key, owners) |
|
case _cSagaPathReviewer: |
|
if err = json.Unmarshal(c.Value, &reviewers); err != nil { |
|
err = errors.WithStack(err) |
|
return |
|
} |
|
log.Info("Get key: (%s), reviewers Info: (%+v)", key, reviewers) |
|
} |
|
} |
|
return |
|
} |
|
|
|
// DeletePathAuthH ... |
|
func (d *Dao) DeletePathAuthH(c context.Context, projID int, branch string, path string) (err error) { |
|
key := sagaAuthKey(projID, branch, path) |
|
ctx, cancel := context.WithTimeout(c, time.Duration(conf.Conf.HBase.WriteTimeout)) |
|
defer cancel() |
|
|
|
auth := make(map[string][]byte) |
|
auth[_cSagaPathOwner] = nil |
|
auth[_cSagaPathReviewer] = nil |
|
values := map[string]map[string][]byte{_ColFamily: auth} |
|
|
|
if _, err = d.hbase.Delete(ctx, _sagaTable, key, values); err != nil { |
|
err = errors.Wrapf(err, "hbase delete error (key: %s)", key) |
|
} |
|
return |
|
}
|
|
|