mirror of
https://github.com/gravitational/teleport.git
synced 2026-10-11 22:49:54 +00:00
* add Makefiles and access plugin binaries * lint + add version helper * consolidate access plugin Makefiles * add license
98 lines
2.5 KiB
Go
98 lines
2.5 KiB
Go
/*
|
|
Copyright 2019 Gravitational, Inc.
|
|
|
|
Licensed under the Apache License, Version 2.0 (the "License");
|
|
you may not use this file except in compliance with the License.
|
|
You may obtain a copy of the License at
|
|
|
|
http://www.apache.org/licenses/LICENSE-2.0
|
|
|
|
Unless required by applicable law or agreed to in writing, software
|
|
distributed under the License is distributed on an "AS IS" BASIS,
|
|
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
See the License for the specific language governing permissions and
|
|
limitations under the License.
|
|
*/
|
|
|
|
package main
|
|
|
|
import (
|
|
"context"
|
|
_ "embed"
|
|
"fmt"
|
|
"os"
|
|
"time"
|
|
|
|
"github.com/alecthomas/kingpin/v2"
|
|
"github.com/gravitational/trace"
|
|
|
|
"github.com/gravitational/teleport"
|
|
"github.com/gravitational/teleport/integrations/access/slack"
|
|
"github.com/gravitational/teleport/integrations/lib"
|
|
"github.com/gravitational/teleport/integrations/lib/logger"
|
|
)
|
|
|
|
//go:embed example_config.toml
|
|
var exampleConfig string
|
|
|
|
func main() {
|
|
logger.Init()
|
|
app := kingpin.New("teleport-slack", "Teleport plugin for access requests approval via Slack.")
|
|
|
|
app.Command("configure", "Prints an example .TOML configuration file.")
|
|
app.Command("version", "Prints teleport-slack version and exits.")
|
|
|
|
startCmd := app.Command("start", "Starts a the Teleport Slack plugin.")
|
|
path := startCmd.Flag("config", "TOML config file path").
|
|
Short('c').
|
|
Default("/etc/teleport-slack.toml").
|
|
String()
|
|
debug := startCmd.Flag("debug", "Enable verbose logging to stderr").
|
|
Short('d').
|
|
Bool()
|
|
|
|
selectedCmd, err := app.Parse(os.Args[1:])
|
|
if err != nil {
|
|
lib.Bail(err)
|
|
}
|
|
|
|
switch selectedCmd {
|
|
case "configure":
|
|
fmt.Print(exampleConfig)
|
|
case "version":
|
|
lib.PrintVersion(app.Name, teleport.Version, teleport.Gitref)
|
|
case "start":
|
|
if err := run(*path, *debug); err != nil {
|
|
lib.Bail(err)
|
|
} else {
|
|
logger.Standard().Info("Successfully shut down")
|
|
}
|
|
}
|
|
}
|
|
|
|
func run(configPath string, debug bool) error {
|
|
conf, err := slack.LoadSlackConfig(configPath)
|
|
if err != nil {
|
|
return trace.Wrap(err)
|
|
}
|
|
|
|
logConfig := conf.Log
|
|
if debug {
|
|
logConfig.Severity = "debug"
|
|
}
|
|
if err = logger.Setup(logConfig); err != nil {
|
|
return trace.Wrap(err)
|
|
}
|
|
if debug {
|
|
logger.Standard().Debugf("DEBUG logging enabled")
|
|
}
|
|
|
|
app := slack.NewSlackApp(conf)
|
|
go lib.ServeSignals(app, 15*time.Second)
|
|
|
|
logger.Standard().Infof("Starting Teleport Access Slack Plugin %s:%s", teleport.Version, teleport.Gitref)
|
|
return trace.Wrap(
|
|
app.Run(context.Background()),
|
|
)
|
|
}
|