@@ -21,22 +21,27 @@ const (
2121)
2222
2323type ServerOptions struct {
24- Logger logr.Logger
25- Addr string
26- AuthOptions ServerAuthOptions
27- Queryer sqlx.QueryerContext
28- Execer sqlx.ExecerContext
24+ Logger logr.Logger
25+ Addr string
26+ AuthOptions ServerAuthOptions
27+ SecurityOptions ServerSecurityOptions
28+ Queryer sqlx.QueryerContext
29+ Execer sqlx.ExecerContext
2930}
3031
3132func (opts * ServerOptions ) bindCLIFlags (fs * pflag.FlagSet ) {
3233 fs .StringVar (& opts .Addr , "http-addr" , ":8080" , "server listen addr" )
3334 opts .AuthOptions .bindCLIFlags (fs )
35+ opts .SecurityOptions .bindCLIFlags (fs )
3436}
3537
3638func (opts * ServerOptions ) defaults () error {
3739 if err := opts .AuthOptions .defaults (); err != nil {
3840 return err
3941 }
42+ if err := opts .SecurityOptions .defaults (); err != nil {
43+ return err
44+ }
4045
4146 if opts .Logger .GetSink () == nil {
4247 opts .Logger = logr .Discard ()
@@ -82,17 +87,21 @@ func NewServer(opts *ServerOptions) (*dbServer, error) {
8287
8388 // TODO: allow specifying cors config from cli / table
8489 serverMux .Use (cors .AllowAll ().Handler )
85- authMiddleware := opts .AuthOptions .createAuthMiddleware (rv .responseError )
8690
8791 {
88- serverMux .With (authMiddleware ).Group (func (r chi.Router ) {
89- routePattern := fmt .Sprintf ("/{%s:[^/]+}" , routeVarTableOrView )
90- r .Get (routePattern , rv .handleQueryTableOrView )
91- r .Post (routePattern , rv .handleInsertTable )
92- r .Patch (routePattern , rv .handleUpdateTable )
93- r .Put (routePattern , rv .handleUpdateSingleEntity )
94- r .Delete (routePattern , rv .handleDeleteTable )
95- })
92+ serverMux .
93+ With (
94+ opts .AuthOptions .createAuthMiddleware (rv .responseError ),
95+ opts .SecurityOptions .createTableOrViewAccessCheckMiddleware (rv .responseError , routeVarTableOrView ),
96+ ).
97+ Group (func (r chi.Router ) {
98+ routePattern := fmt .Sprintf ("/{%s:[^/]+}" , routeVarTableOrView )
99+ r .Get (routePattern , rv .handleQueryTableOrView )
100+ r .Post (routePattern , rv .handleInsertTable )
101+ r .Patch (routePattern , rv .handleUpdateTable )
102+ r .Put (routePattern , rv .handleUpdateSingleEntity )
103+ r .Delete (routePattern , rv .handleDeleteTable )
104+ })
96105 }
97106
98107 rv .server .Handler = serverMux
0 commit comments