Some checks failed
Server CI / Postgres (shard 0) (push) Has been skipped
Server CI / Postgres (shard 3) (push) Has been skipped
BuildEnv Docker Image / build-image (push) Failing after 4s
BuildEnv Docker Image / build-image-fips (push) Failing after 4s
Migration Review & Release Notes / Generate migration review & release notes (push) Failing after 3s
Server CI / Build Environment (push) Failing after 3s
Server CI / Postgres (shard 1) (push) Has been skipped
Tools CI / check-style (mattermost-govet) (push) Failing after 4s
Server CI / Postgres (shard 2) (push) Has been skipped
Tools CI / check-style (mmgotool) (push) Failing after 3s
Server CI / Elasticsearch v8 Compatibility (push) Has been skipped
Server CI / OpenSearch v2 Compatibility (push) Has been skipped
Server CI / Postgres FIPS (shard 0) (push) Has been skipped
Tools CI / Test (mattermost-govet) (push) Failing after 3s
Server CI / Postgres FIPS (shard 1) (push) Has been skipped
Server CI / Postgres FIPS (shard 2) (push) Has been skipped
Tools CI / Test (mmgotool) (push) Failing after 3s
Server CI / Postgres FIPS (shard 3) (push) Has been skipped
Server CI / Run mmctl tests (push) Has been skipped
Server CI / Run mmctl tests (FIPS) (push) Has been skipped
Server CI / Merge Postgres Test Results (push) Has been skipped
Server CI / Merge Postgres FIPS Test Results (push) Has been skipped
Server CI / Check backport migrations (push) Has been skipped
Server CI / Check generated files (push) Has been skipped
Server CI / check-style (push) Has been skipped
Server CI / Vet API (push) Has been skipped
Server CI / Build mattermost server app (push) Has been skipped
Server CI / Server CI Complete (push) Failing after 2s
Server CI / Server CI Artifacts (push) Has been skipped
Server CI / Sentry Upload (push) Has been skipped
Server CI / Server CI Report (push) Failing after 5m1s
Server CI Nightly Race / Race Detector (push) Has been skipped
CodeQL / Analyze (go) (push) Has been cancelled
CodeQL / Analyze (javascript) (push) Has been cancelled
Webapp CI Cache Warm / Warm Webapp node_modules Cache (push) Has been cancelled
E2E CI Cache Warm / Warm E2E npm Registry Cache (push) Has been cancelled
API / build (push) Has been cancelled
Web App CI / check-types (push) Has been cancelled
Web App CI / check-lint (push) Has been cancelled
Web App CI / check-i18n (push) Has been cancelled
Web App CI / check-external-links (push) Has been cancelled
Web App CI / test (platform) (push) Has been cancelled
Web App CI / test (mattermost-redux) (push) Has been cancelled
Web App CI / test (channels shard 1/4) (push) Has been cancelled
Web App CI / test (channels shard 2/4) (push) Has been cancelled
Web App CI / test (channels shard 3/4) (push) Has been cancelled
Web App CI / test (channels shard 4/4) (push) Has been cancelled
Web App CI / upload-coverage (push) Has been cancelled
Web App CI / build (push) Has been cancelled
YAML Lint / yamllint (push) Has been cancelled
Push mirrored docker images / cd/Push mirrored docker images (push) Has been cancelled
docs-cd / Build and deploy docs (push) Has been cancelled
Docs CI / build (push) Has been cancelled
E2E Cache Warm: Cypress deps / Warm Cypress deps cache (push) Has been cancelled
Scorecards supply-chain security / Scorecard analysis (push) Has been cancelled
Server CI Weekly / Postgres FIPS (push) Has been skipped
Server CI Weekly / Run mmctl tests (FIPS) (push) Has been skipped
Server CI Weekly / Postgres with binary parameters (push) Has been skipped
Server CI Weekly / Build Environment (push) Failing after 1s
Server CI Cache Warm / Warm Go Module and Build Cache (push) Failing after 2s
Server CI Nightly Race / Build Environment (push) Failing after 1s
126 lines
3.3 KiB
Go
126 lines
3.3 KiB
Go
// Copyright (c) 2015-present Mattermost, Inc. All Rights Reserved.
|
|
// See LICENSE.txt for license information.
|
|
|
|
package main
|
|
|
|
import (
|
|
"flag"
|
|
"fmt"
|
|
"os"
|
|
"slices"
|
|
"strings"
|
|
"text/template"
|
|
|
|
"github.com/mattermost/mattermost/server/public/model"
|
|
"github.com/mattermost/mattermost/server/v8/channels/app"
|
|
"github.com/mattermost/mattermost/server/v8/channels/store/storetest"
|
|
"github.com/mattermost/mattermost/server/v8/channels/utils"
|
|
"github.com/mattermost/mattermost/server/v8/config"
|
|
)
|
|
|
|
type roleEntry struct {
|
|
Name string
|
|
Permissions string
|
|
}
|
|
|
|
var tmpl = template.Must(template.New("").Parse(`// Copyright (c) 2015-present Mattermost, Inc. All Rights Reserved.
|
|
// See LICENSE.txt for license information.
|
|
|
|
// Code generated by generate_default_roles_permissions.go. DO NOT EDIT.
|
|
|
|
export const defaultRolesPermissions = {
|
|
{{- range .}}
|
|
{{.Name}}: '{{.Permissions}}',
|
|
{{- end}}
|
|
};
|
|
`))
|
|
|
|
func main() {
|
|
outPath := flag.String("out", "", "output file path")
|
|
flag.Parse()
|
|
|
|
if *outPath == "" {
|
|
fmt.Fprintln(os.Stderr, "usage: generate_default_roles_permissions -out <path>")
|
|
os.Exit(1)
|
|
}
|
|
|
|
if err := utils.TranslationsPreInit(); err != nil {
|
|
fmt.Fprintf(os.Stderr, "warning: could not load translations: %v\n", err)
|
|
}
|
|
|
|
sqlSettings := storetest.MakeSqlSettings(model.DatabaseDriverPostgres)
|
|
defer storetest.CleanupSqlSettings(sqlSettings)
|
|
|
|
cfg := model.Config{}
|
|
cfg.SetDefaults()
|
|
cfg.SqlSettings = *sqlSettings
|
|
|
|
memStore, err := config.NewMemoryStoreWithOptions(&config.MemoryStoreOptions{
|
|
InitialConfig: &cfg,
|
|
})
|
|
if err != nil {
|
|
fmt.Fprintf(os.Stderr, "error creating config store: %v\n", err)
|
|
os.Exit(1)
|
|
}
|
|
cfgStore, err := config.NewStoreFromBacking(memStore, nil, false)
|
|
if err != nil {
|
|
fmt.Fprintf(os.Stderr, "error creating config store: %v\n", err)
|
|
os.Exit(1)
|
|
}
|
|
|
|
// NewServer runs both schema migrations (via sqlstore.New) and all
|
|
// app-level migrations (doAppMigrations) as part of its initialization.
|
|
server, err := app.NewServer(app.ConfigStore(cfgStore))
|
|
if err != nil {
|
|
fmt.Fprintf(os.Stderr, "error creating server: %v\n", err)
|
|
os.Exit(1)
|
|
}
|
|
defer server.Shutdown()
|
|
|
|
roles, err := server.Store().Role().GetAll()
|
|
if err != nil {
|
|
fmt.Fprintf(os.Stderr, "error reading roles: %v\n", err)
|
|
os.Exit(1)
|
|
}
|
|
|
|
defaultNames := make(map[string]bool, len(model.MakeDefaultRoles()))
|
|
for name := range model.MakeDefaultRoles() {
|
|
defaultNames[name] = true
|
|
}
|
|
|
|
var roleNames []string
|
|
roleByName := make(map[string]*model.Role, len(roles))
|
|
for _, r := range roles {
|
|
if defaultNames[r.Name] {
|
|
roleNames = append(roleNames, r.Name)
|
|
roleByName[r.Name] = r
|
|
}
|
|
}
|
|
slices.Sort(roleNames)
|
|
|
|
entries := make([]roleEntry, 0, len(roleNames))
|
|
for _, name := range roleNames {
|
|
perms := make([]string, len(roleByName[name].Permissions))
|
|
copy(perms, roleByName[name].Permissions)
|
|
slices.Sort(perms)
|
|
perms = slices.Compact(perms)
|
|
entries = append(entries, roleEntry{
|
|
Name: name,
|
|
Permissions: strings.Join(perms, " "),
|
|
})
|
|
}
|
|
|
|
var b strings.Builder
|
|
if err := tmpl.Execute(&b, entries); err != nil {
|
|
fmt.Fprintf(os.Stderr, "error executing template: %v\n", err)
|
|
os.Exit(1)
|
|
}
|
|
|
|
if err := os.WriteFile(*outPath, []byte(b.String()), 0644); err != nil {
|
|
fmt.Fprintf(os.Stderr, "error writing %s: %v\n", *outPath, err)
|
|
os.Exit(1)
|
|
}
|
|
|
|
fmt.Printf("Generated %s\n", *outPath)
|
|
}
|