1package api 2 3import ( 4 "net/http" 5 "path/filepath" 6 "time" 7 8 "code.cloudfoundry.org/clock" 9 "code.cloudfoundry.org/lager" 10 "github.com/concourse/concourse/atc" 11 "github.com/concourse/concourse/atc/api/artifactserver" 12 "github.com/concourse/concourse/atc/api/buildserver" 13 "github.com/concourse/concourse/atc/api/ccserver" 14 "github.com/concourse/concourse/atc/api/checkserver" 15 "github.com/concourse/concourse/atc/api/cliserver" 16 "github.com/concourse/concourse/atc/api/configserver" 17 "github.com/concourse/concourse/atc/api/containerserver" 18 "github.com/concourse/concourse/atc/api/infoserver" 19 "github.com/concourse/concourse/atc/api/jobserver" 20 "github.com/concourse/concourse/atc/api/loglevelserver" 21 "github.com/concourse/concourse/atc/api/pipelineserver" 22 "github.com/concourse/concourse/atc/api/resourceserver" 23 "github.com/concourse/concourse/atc/api/resourceserver/versionserver" 24 "github.com/concourse/concourse/atc/api/teamserver" 25 "github.com/concourse/concourse/atc/api/usersserver" 26 "github.com/concourse/concourse/atc/api/volumeserver" 27 "github.com/concourse/concourse/atc/api/wallserver" 28 "github.com/concourse/concourse/atc/api/workerserver" 29 "github.com/concourse/concourse/atc/creds" 30 "github.com/concourse/concourse/atc/db" 31 "github.com/concourse/concourse/atc/gc" 32 "github.com/concourse/concourse/atc/mainredirect" 33 "github.com/concourse/concourse/atc/worker" 34 "github.com/concourse/concourse/atc/wrappa" 35 "github.com/tedsuo/rata" 36) 37 38func NewHandler( 39 logger lager.Logger, 40 41 externalURL string, 42 clusterName string, 43 44 wrapper wrappa.Wrappa, 45 46 dbTeamFactory db.TeamFactory, 47 dbPipelineFactory db.PipelineFactory, 48 dbJobFactory db.JobFactory, 49 dbResourceFactory db.ResourceFactory, 50 dbWorkerFactory db.WorkerFactory, 51 volumeRepository db.VolumeRepository, 52 containerRepository db.ContainerRepository, 53 destroyer gc.Destroyer, 54 dbBuildFactory db.BuildFactory, 55 dbCheckFactory db.CheckFactory, 56 dbResourceConfigFactory db.ResourceConfigFactory, 57 dbUserFactory db.UserFactory, 58 59 eventHandlerFactory buildserver.EventHandlerFactory, 60 61 workerClient worker.Client, 62 63 sink *lager.ReconfigurableSink, 64 65 isTLSEnabled bool, 66 67 cliDownloadsDir string, 68 version string, 69 workerVersion string, 70 secretManager creds.Secrets, 71 varSourcePool creds.VarSourcePool, 72 credsManagers creds.Managers, 73 interceptTimeoutFactory containerserver.InterceptTimeoutFactory, 74 interceptUpdateInterval time.Duration, 75 dbWall db.Wall, 76 clock clock.Clock, 77) (http.Handler, error) { 78 79 absCLIDownloadsDir, err := filepath.Abs(cliDownloadsDir) 80 if err != nil { 81 return nil, err 82 } 83 84 pipelineHandlerFactory := pipelineserver.NewScopedHandlerFactory(dbTeamFactory) 85 buildHandlerFactory := buildserver.NewScopedHandlerFactory(logger) 86 teamHandlerFactory := NewTeamScopedHandlerFactory(logger, dbTeamFactory) 87 88 buildServer := buildserver.NewServer(logger, externalURL, dbTeamFactory, dbBuildFactory, eventHandlerFactory) 89 checkServer := checkserver.NewServer(logger, dbCheckFactory) 90 jobServer := jobserver.NewServer(logger, externalURL, secretManager, dbJobFactory, dbCheckFactory) 91 resourceServer := resourceserver.NewServer(logger, secretManager, varSourcePool, dbCheckFactory, dbResourceFactory, dbResourceConfigFactory) 92 93 versionServer := versionserver.NewServer(logger, externalURL) 94 pipelineServer := pipelineserver.NewServer(logger, dbTeamFactory, dbPipelineFactory, externalURL) 95 configServer := configserver.NewServer(logger, dbTeamFactory, secretManager) 96 ccServer := ccserver.NewServer(logger, dbTeamFactory, externalURL) 97 workerServer := workerserver.NewServer(logger, dbTeamFactory, dbWorkerFactory) 98 logLevelServer := loglevelserver.NewServer(logger, sink) 99 cliServer := cliserver.NewServer(logger, absCLIDownloadsDir) 100 containerServer := containerserver.NewServer(logger, workerClient, secretManager, varSourcePool, interceptTimeoutFactory, interceptUpdateInterval, containerRepository, destroyer, clock) 101 volumesServer := volumeserver.NewServer(logger, volumeRepository, destroyer) 102 teamServer := teamserver.NewServer(logger, dbTeamFactory, externalURL) 103 infoServer := infoserver.NewServer(logger, version, workerVersion, externalURL, clusterName, credsManagers) 104 artifactServer := artifactserver.NewServer(logger, workerClient) 105 usersServer := usersserver.NewServer(logger, dbUserFactory) 106 wallServer := wallserver.NewServer(dbWall, logger) 107 108 handlers := map[string]http.Handler{ 109 atc.GetConfig: http.HandlerFunc(configServer.GetConfig), 110 atc.SaveConfig: http.HandlerFunc(configServer.SaveConfig), 111 112 atc.GetCC: http.HandlerFunc(ccServer.GetCC), 113 114 atc.ListBuilds: http.HandlerFunc(buildServer.ListBuilds), 115 atc.CreateBuild: teamHandlerFactory.HandlerFor(buildServer.CreateBuild), 116 atc.GetBuild: buildHandlerFactory.HandlerFor(buildServer.GetBuild), 117 atc.BuildResources: buildHandlerFactory.HandlerFor(buildServer.BuildResources), 118 atc.AbortBuild: buildHandlerFactory.HandlerFor(buildServer.AbortBuild), 119 atc.GetBuildPlan: buildHandlerFactory.HandlerFor(buildServer.GetBuildPlan), 120 atc.GetBuildPreparation: buildHandlerFactory.HandlerFor(buildServer.GetBuildPreparation), 121 atc.BuildEvents: buildHandlerFactory.HandlerFor(buildServer.BuildEvents), 122 atc.ListBuildArtifacts: buildHandlerFactory.HandlerFor(buildServer.GetBuildArtifacts), 123 124 atc.GetCheck: http.HandlerFunc(checkServer.GetCheck), 125 126 atc.ListAllJobs: http.HandlerFunc(jobServer.ListAllJobs), 127 atc.ListJobs: pipelineHandlerFactory.HandlerFor(jobServer.ListJobs), 128 atc.GetJob: pipelineHandlerFactory.HandlerFor(jobServer.GetJob), 129 atc.ListJobBuilds: pipelineHandlerFactory.HandlerFor(jobServer.ListJobBuilds), 130 atc.ListJobInputs: pipelineHandlerFactory.HandlerFor(jobServer.ListJobInputs), 131 atc.GetJobBuild: pipelineHandlerFactory.HandlerFor(jobServer.GetJobBuild), 132 atc.CreateJobBuild: pipelineHandlerFactory.HandlerFor(jobServer.CreateJobBuild), 133 atc.RerunJobBuild: pipelineHandlerFactory.HandlerFor(jobServer.RerunJobBuild), 134 atc.PauseJob: pipelineHandlerFactory.HandlerFor(jobServer.PauseJob), 135 atc.UnpauseJob: pipelineHandlerFactory.HandlerFor(jobServer.UnpauseJob), 136 atc.ScheduleJob: pipelineHandlerFactory.HandlerFor(jobServer.ScheduleJob), 137 atc.JobBadge: pipelineHandlerFactory.HandlerFor(jobServer.JobBadge), 138 atc.MainJobBadge: mainredirect.Handler{ 139 Routes: atc.Routes, 140 Route: atc.JobBadge, 141 }, 142 143 atc.ClearTaskCache: pipelineHandlerFactory.HandlerFor(jobServer.ClearTaskCache), 144 145 atc.ListAllPipelines: http.HandlerFunc(pipelineServer.ListAllPipelines), 146 atc.ListPipelines: http.HandlerFunc(pipelineServer.ListPipelines), 147 atc.GetPipeline: pipelineHandlerFactory.HandlerFor(pipelineServer.GetPipeline), 148 atc.DeletePipeline: pipelineHandlerFactory.HandlerFor(pipelineServer.DeletePipeline), 149 atc.OrderPipelines: http.HandlerFunc(pipelineServer.OrderPipelines), 150 atc.PausePipeline: pipelineHandlerFactory.HandlerFor(pipelineServer.PausePipeline), 151 atc.ArchivePipeline: pipelineHandlerFactory.HandlerFor(pipelineServer.ArchivePipeline), 152 atc.UnpausePipeline: pipelineHandlerFactory.HandlerFor(pipelineServer.UnpausePipeline), 153 atc.ExposePipeline: pipelineHandlerFactory.HandlerFor(pipelineServer.ExposePipeline), 154 atc.HidePipeline: pipelineHandlerFactory.HandlerFor(pipelineServer.HidePipeline), 155 atc.GetVersionsDB: pipelineHandlerFactory.HandlerFor(pipelineServer.GetVersionsDB), 156 atc.RenamePipeline: pipelineHandlerFactory.HandlerFor(pipelineServer.RenamePipeline), 157 atc.ListPipelineBuilds: pipelineHandlerFactory.HandlerFor(pipelineServer.ListPipelineBuilds), 158 atc.CreatePipelineBuild: pipelineHandlerFactory.HandlerFor(pipelineServer.CreateBuild), 159 atc.PipelineBadge: pipelineHandlerFactory.HandlerFor(pipelineServer.PipelineBadge), 160 161 atc.ListAllResources: http.HandlerFunc(resourceServer.ListAllResources), 162 atc.ListResources: pipelineHandlerFactory.HandlerFor(resourceServer.ListResources), 163 atc.ListResourceTypes: pipelineHandlerFactory.HandlerFor(resourceServer.ListVersionedResourceTypes), 164 atc.GetResource: pipelineHandlerFactory.HandlerFor(resourceServer.GetResource), 165 atc.UnpinResource: pipelineHandlerFactory.HandlerFor(resourceServer.UnpinResource), 166 atc.SetPinCommentOnResource: pipelineHandlerFactory.HandlerFor(resourceServer.SetPinCommentOnResource), 167 atc.CheckResource: pipelineHandlerFactory.HandlerFor(resourceServer.CheckResource), 168 atc.CheckResourceWebHook: pipelineHandlerFactory.HandlerFor(resourceServer.CheckResourceWebHook), 169 atc.CheckResourceType: pipelineHandlerFactory.HandlerFor(resourceServer.CheckResourceType), 170 171 atc.ListResourceVersions: pipelineHandlerFactory.HandlerFor(versionServer.ListResourceVersions), 172 atc.GetResourceVersion: pipelineHandlerFactory.HandlerFor(versionServer.GetResourceVersion), 173 atc.EnableResourceVersion: pipelineHandlerFactory.HandlerFor(versionServer.EnableResourceVersion), 174 atc.DisableResourceVersion: pipelineHandlerFactory.HandlerFor(versionServer.DisableResourceVersion), 175 atc.PinResourceVersion: pipelineHandlerFactory.HandlerFor(versionServer.PinResourceVersion), 176 atc.ListBuildsWithVersionAsInput: pipelineHandlerFactory.HandlerFor(versionServer.ListBuildsWithVersionAsInput), 177 atc.ListBuildsWithVersionAsOutput: pipelineHandlerFactory.HandlerFor(versionServer.ListBuildsWithVersionAsOutput), 178 atc.GetResourceCausality: pipelineHandlerFactory.HandlerFor(versionServer.GetCausality), 179 180 atc.ListWorkers: http.HandlerFunc(workerServer.ListWorkers), 181 atc.RegisterWorker: http.HandlerFunc(workerServer.RegisterWorker), 182 atc.LandWorker: http.HandlerFunc(workerServer.LandWorker), 183 atc.RetireWorker: http.HandlerFunc(workerServer.RetireWorker), 184 atc.PruneWorker: http.HandlerFunc(workerServer.PruneWorker), 185 atc.HeartbeatWorker: http.HandlerFunc(workerServer.HeartbeatWorker), 186 atc.DeleteWorker: http.HandlerFunc(workerServer.DeleteWorker), 187 188 atc.SetLogLevel: http.HandlerFunc(logLevelServer.SetMinLevel), 189 atc.GetLogLevel: http.HandlerFunc(logLevelServer.GetMinLevel), 190 191 atc.DownloadCLI: http.HandlerFunc(cliServer.Download), 192 atc.GetInfo: http.HandlerFunc(infoServer.Info), 193 atc.GetInfoCreds: http.HandlerFunc(infoServer.Creds), 194 195 atc.GetUser: http.HandlerFunc(usersServer.GetUser), 196 atc.ListActiveUsersSince: http.HandlerFunc(usersServer.GetUsersSince), 197 198 atc.ListContainers: teamHandlerFactory.HandlerFor(containerServer.ListContainers), 199 atc.GetContainer: teamHandlerFactory.HandlerFor(containerServer.GetContainer), 200 atc.HijackContainer: teamHandlerFactory.HandlerFor(containerServer.HijackContainer), 201 atc.ListDestroyingContainers: http.HandlerFunc(containerServer.ListDestroyingContainers), 202 atc.ReportWorkerContainers: http.HandlerFunc(containerServer.ReportWorkerContainers), 203 204 atc.ListVolumes: teamHandlerFactory.HandlerFor(volumesServer.ListVolumes), 205 atc.ListDestroyingVolumes: http.HandlerFunc(volumesServer.ListDestroyingVolumes), 206 atc.ReportWorkerVolumes: http.HandlerFunc(volumesServer.ReportWorkerVolumes), 207 208 atc.ListTeams: http.HandlerFunc(teamServer.ListTeams), 209 atc.GetTeam: http.HandlerFunc(teamServer.GetTeam), 210 atc.SetTeam: http.HandlerFunc(teamServer.SetTeam), 211 atc.RenameTeam: http.HandlerFunc(teamServer.RenameTeam), 212 atc.DestroyTeam: http.HandlerFunc(teamServer.DestroyTeam), 213 atc.ListTeamBuilds: http.HandlerFunc(teamServer.ListTeamBuilds), 214 215 atc.CreateArtifact: teamHandlerFactory.HandlerFor(artifactServer.CreateArtifact), 216 atc.GetArtifact: teamHandlerFactory.HandlerFor(artifactServer.GetArtifact), 217 218 atc.GetWall: http.HandlerFunc(wallServer.GetWall), 219 atc.SetWall: http.HandlerFunc(wallServer.SetWall), 220 atc.ClearWall: http.HandlerFunc(wallServer.ClearWall), 221 } 222 223 return rata.NewRouter(atc.Routes, wrapper.Wrap(handlers)) 224} 225