Skip to content

Commit

Permalink
chore: Remove interface from coderd and lift API surface (#1772)
Browse files Browse the repository at this point in the history
Abstracting coderd into an interface added misdirection because
the interface was never intended to be fulfilled outside of a single
implementation.

This lifts the abstraction, and attaches all handlers to a root struct
named `*coderd.API`.
  • Loading branch information
kylecarbs committed May 26, 2022
1 parent c78f947 commit 31b819e
Show file tree
Hide file tree
Showing 27 changed files with 233 additions and 262 deletions.
16 changes: 8 additions & 8 deletions cli/server.go
Original file line number Diff line number Diff line change
Expand Up @@ -273,7 +273,7 @@ func server() *cobra.Command {
}
}

coderDaemon := coderd.New(options)
coderAPI := coderd.New(options)
client := codersdk.New(localURL)
if tlsEnable {
// Secure transport isn't needed for locally communicating!
Expand All @@ -299,7 +299,7 @@ func server() *cobra.Command {
errCh := make(chan error, 1)
provisionerDaemons := make([]*provisionerd.Server, 0)
for i := 0; uint8(i) < provisionerDaemonCount; i++ {
daemonClose, err := newProvisionerDaemon(cmd.Context(), coderDaemon, logger, cacheDir, errCh, dev)
daemonClose, err := newProvisionerDaemon(cmd.Context(), coderAPI, logger, cacheDir, errCh, dev)
if err != nil {
return xerrors.Errorf("create provisioner daemon: %w", err)
}
Expand All @@ -319,7 +319,7 @@ func server() *cobra.Command {
// These errors are typically noise like "TLS: EOF". Vault does similar:
// https://github.com/hashicorp/vault/blob/e2490059d0711635e529a4efcbaa1b26998d6e1c/command/server.go#L2714
ErrorLog: log.New(io.Discard, "", 0),
Handler: coderDaemon.Handler(),
Handler: coderAPI.Handler,
BaseContext: func(_ net.Listener) context.Context {
return shutdownConnsCtx
},
Expand Down Expand Up @@ -387,15 +387,15 @@ func server() *cobra.Command {
signal.Notify(stopChan, os.Interrupt)
select {
case <-cmd.Context().Done():
coderDaemon.CloseWait()
coderAPI.Close()
return cmd.Context().Err()
case err := <-tunnelErrChan:
if err != nil {
return err
}
case err := <-errCh:
shutdownConns()
coderDaemon.CloseWait()
coderAPI.Close()
return err
case <-stopChan:
}
Expand Down Expand Up @@ -459,7 +459,7 @@ func server() *cobra.Command {

_, _ = fmt.Fprintf(cmd.OutOrStdout(), cliui.Styles.Prompt.String()+"Waiting for WebSocket connections to close...\n")
shutdownConns()
coderDaemon.CloseWait()
coderAPI.Close()
return nil
},
}
Expand Down Expand Up @@ -555,7 +555,7 @@ func createFirstUser(cmd *cobra.Command, client *codersdk.Client, cfg config.Roo
}

// nolint:revive
func newProvisionerDaemon(ctx context.Context, coderDaemon coderd.CoderD,
func newProvisionerDaemon(ctx context.Context, coderAPI *coderd.API,
logger slog.Logger, cacheDir string, errChan chan error, dev bool) (*provisionerd.Server, error) {
err := os.MkdirAll(cacheDir, 0700)
if err != nil {
Expand Down Expand Up @@ -595,7 +595,7 @@ func newProvisionerDaemon(ctx context.Context, coderDaemon coderd.CoderD,
}()
provisioners[string(database.ProvisionerTypeEcho)] = proto.NewDRPCProvisionerClient(provisionersdk.Conn(echoClient))
}
return provisionerd.New(coderDaemon.ListenProvisionerDaemon, &provisionerd.Options{
return provisionerd.New(coderAPI.ListenProvisionerDaemon, &provisionerd.Options{
Logger: logger,
PollInterval: 500 * time.Millisecond,
UpdateInterval: 500 * time.Millisecond,
Expand Down
4 changes: 2 additions & 2 deletions coderd/authorize.go
Original file line number Diff line number Diff line change
Expand Up @@ -12,12 +12,12 @@ import (
"github.com/coder/coder/coderd/rbac"
)

func AuthorizeFilter[O rbac.Objecter](api *api, r *http.Request, action rbac.Action, objects []O) []O {
func AuthorizeFilter[O rbac.Objecter](api *API, r *http.Request, action rbac.Action, objects []O) []O {
roles := httpmw.UserRoles(r)
return rbac.Filter(r.Context(), api.Authorizer, roles.ID.String(), roles.Roles, action, objects)
}

func (api *api) Authorize(rw http.ResponseWriter, r *http.Request, action rbac.Action, object rbac.Objecter) bool {
func (api *API) Authorize(rw http.ResponseWriter, r *http.Request, action rbac.Action, object rbac.Objecter) bool {
roles := httpmw.UserRoles(r)
err := api.Authorizer.ByRoleName(r.Context(), roles.ID.String(), roles.Roles, action, object.RBACObject())
if err != nil {
Expand Down

0 comments on commit 31b819e

Please sign in to comment.