Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(3083)

Unified Diff: appengine/logdog/coordinator/config/projects.go

Issue 1971623002: LogDog: Enable Coordinator to load project configs (Closed) Base URL: https://github.com/luci/luci-go@logdog-project-config
Patch Set: rebase (auto) Created 4 years, 7 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
« no previous file with comments | « no previous file | appengine/logdog/coordinator/coordinatorTest/context.go » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: appengine/logdog/coordinator/config/projects.go
diff --git a/appengine/logdog/coordinator/config/projects.go b/appengine/logdog/coordinator/config/projects.go
index 67e1f66570b8128ecf6039db677d1a78a5bb5df4..689b073e5fbcf7e800a261481a05b5c09023ff30 100644
--- a/appengine/logdog/coordinator/config/projects.go
+++ b/appengine/logdog/coordinator/config/projects.go
@@ -9,11 +9,13 @@ import (
"strings"
"github.com/golang/protobuf/proto"
+ "github.com/luci/gae/service/info"
"github.com/luci/luci-go/common/config"
"github.com/luci/luci-go/common/errors"
log "github.com/luci/luci-go/common/logging"
"github.com/luci/luci-go/common/parallel"
configProto "github.com/luci/luci-go/common/proto/config"
+ "github.com/luci/luci-go/common/proto/logdog/svcconfig"
"github.com/luci/luci-go/server/auth"
"github.com/luci/luci-go/server/auth/identity"
"golang.org/x/net/context"
@@ -24,6 +26,46 @@ const maxProjectWorkers = 32
// ErrNoAccess is returned if the user has no access to the requested project.
var ErrNoAccess = errors.New("no access")
+// ProjectConfigPath returns the config set and path for project-specific
+// configuration.
+//
+// A given project's configuration is named after the current App ID.
+func ProjectConfigPath(c context.Context, project config.ProjectName) (string, string) {
+ return fmt.Sprintf("projects/%s", project), fmt.Sprintf("%s.cfg", info.Get(c).AppID())
+}
+
+// ProjectConfig loads the project config protobuf from the config service.
+//
+// If the configuration was not present, config.ErrNoConfig will be returned.
+func ProjectConfig(c context.Context, project config.ProjectName) (*svcconfig.ProjectConfig, error) {
+ // TODO(dnj): When empty project is disabled, make this return
+ // config.ErrNoConfig.
+ if project == "" {
+ return &svcconfig.ProjectConfig{
+ ReaderAuthGroups: []string{"all"},
+ }, nil
+ }
+
+ configSet, configPath := ProjectConfigPath(c, project)
+ cfg, err := config.Get(c).GetConfig(configSet, configPath, false)
+ if err != nil {
+ return nil, err
+ }
+
+ var pcfg svcconfig.ProjectConfig
+ if err := proto.UnmarshalText(cfg.Content, &pcfg); err != nil {
+ log.Fields{
+ log.ErrorKey: err,
+ "configSet": cfg.ConfigSet,
+ "path": cfg.Path,
+ "contentHash": cfg.ContentHash,
+ }.Errorf(c, "Failed to unmarshal project configuration.")
+ return nil, ErrInvalidConfig
+ }
+
+ return &pcfg, nil
+}
+
// Projects lists the registered LogDog projects.
func Projects(c context.Context) ([]string, error) {
projects, err := config.Get(c).GetProjects()
@@ -160,7 +202,8 @@ func UserProjects(c context.Context) ([]config.ProjectName, error) {
func checkProjectAccess(c context.Context, ci config.Interface, proj config.ProjectName, st auth.State) (bool, error) {
// Load the configuration for this project.
- cfg, err := ci.GetConfig(fmt.Sprintf("projects/%s", proj), "project.cfg", false)
+ configSet, configPath := ProjectConfigPath(c, proj)
+ cfg, err := ci.GetConfig(configSet, configPath, false)
if err != nil {
if err == config.ErrNoConfig {
// If the configuration is missing, report no access.
« no previous file with comments | « no previous file | appengine/logdog/coordinator/coordinatorTest/context.go » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698