95 lines
3.1 KiB
Go
95 lines
3.1 KiB
Go
// Copyright 2019 Drone IO, 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 (
|
|
"net/http"
|
|
|
|
"github.com/drone/drone/cmd/drone-server/config"
|
|
"github.com/drone/drone/handler/api"
|
|
"github.com/drone/drone/handler/web"
|
|
"github.com/drone/drone/metric"
|
|
"github.com/drone/drone/operator/manager"
|
|
"github.com/drone/drone/operator/manager/rpc"
|
|
"github.com/drone/drone/server"
|
|
"github.com/google/wire"
|
|
|
|
"github.com/go-chi/chi"
|
|
"github.com/unrolled/secure"
|
|
)
|
|
|
|
// wire set for loading the server.
|
|
var serverSet = wire.NewSet(
|
|
manager.New,
|
|
metric.NewServer,
|
|
api.New,
|
|
web.New,
|
|
provideRouter,
|
|
provideRPC,
|
|
provideServer,
|
|
provideServerOptions,
|
|
)
|
|
|
|
// provideRouter is a Wire provider function that returns a
|
|
// router that is serves the provided handlers.
|
|
func provideRouter(api api.Server, web web.Server, rpc http.Handler, metrics *metric.Server) *chi.Mux {
|
|
r := chi.NewRouter()
|
|
r.Mount("/metrics", metrics)
|
|
r.Mount("/api", api.Handler())
|
|
r.Mount("/rpc", rpc)
|
|
r.Mount("/", web.Handler())
|
|
return r
|
|
}
|
|
|
|
// provideRPC is a Wire provider function that returns an rpc
|
|
// handler that exposes the build manager to a remote agent.
|
|
func provideRPC(m manager.BuildManager, config config.Config) http.Handler {
|
|
return rpc.NewServer(m, config.RPC.Secret)
|
|
}
|
|
|
|
// provideServer is a Wire provider function that returns an
|
|
// http server that is configured from the environment.
|
|
func provideServer(handler *chi.Mux, config config.Config) *server.Server {
|
|
return &server.Server{
|
|
Acme: config.Server.Acme,
|
|
Addr: config.Server.Port,
|
|
Cert: config.Server.Cert,
|
|
Key: config.Server.Key,
|
|
Host: config.Server.Host,
|
|
Handler: handler,
|
|
}
|
|
}
|
|
|
|
// provideServerOptions is a Wire provider function that returns
|
|
// the http web server security option from the environment.
|
|
func provideServerOptions(config config.Config) secure.Options {
|
|
return secure.Options{
|
|
AllowedHosts: config.HTTP.AllowedHosts,
|
|
HostsProxyHeaders: config.HTTP.HostsProxyHeaders,
|
|
SSLRedirect: config.HTTP.SSLRedirect,
|
|
SSLTemporaryRedirect: config.HTTP.SSLTemporaryRedirect,
|
|
SSLHost: config.HTTP.SSLHost,
|
|
SSLProxyHeaders: config.HTTP.SSLProxyHeaders,
|
|
STSSeconds: config.HTTP.STSSeconds,
|
|
STSIncludeSubdomains: config.HTTP.STSIncludeSubdomains,
|
|
STSPreload: config.HTTP.STSPreload,
|
|
ForceSTSHeader: config.HTTP.ForceSTSHeader,
|
|
FrameDeny: config.HTTP.FrameDeny,
|
|
ContentTypeNosniff: config.HTTP.ContentTypeNosniff,
|
|
BrowserXssFilter: config.HTTP.BrowserXSSFilter,
|
|
ContentSecurityPolicy: config.HTTP.ContentSecurityPolicy,
|
|
ReferrerPolicy: config.HTTP.ReferrerPolicy,
|
|
}
|
|
}
|