diff --git a/handler/api/api.go b/handler/api/api.go index e2f387462..a34963385 100644 --- a/handler/api/api.go +++ b/handler/api/api.go @@ -300,6 +300,7 @@ func (s Server) Handler() http.Handler { r.Get("/{user}", users.HandleFind(s.Users)) r.Patch("/{user}", users.HandleUpdate(s.Users)) r.Delete("/{user}", users.HandleDelete(s.Users, s.Webhook)) + r.Get("/{user}/repos", users.HandleRepoList(s.Users, s.Repos)) }) r.Route("/stream", func(r chi.Router) { diff --git a/handler/api/users/repos.go b/handler/api/users/repos.go new file mode 100644 index 000000000..b1f99bdfa --- /dev/null +++ b/handler/api/users/repos.go @@ -0,0 +1,54 @@ +// 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 users + +import ( + "net/http" + + "github.com/drone/drone/core" + "github.com/drone/drone/handler/api/render" + "github.com/drone/drone/logger" + + "github.com/go-chi/chi" +) + +// HandleRepoList returns an http.HandlerFunc that writes a json-encoded +// list of all user repositories to the response body. +func HandleRepoList(users core.UserStore, repos core.RepositoryStore) http.HandlerFunc { + return func(w http.ResponseWriter, r *http.Request) { + login := chi.URLParam(r, "user") + + user, err := users.FindLogin(r.Context(), login) + if err != nil { + render.NotFound(w, err) + logger.FromRequest(r). + WithError(err). + WithField("user", login). + Debugln("api: cannot find user") + return + } + + repos, err := repos.List(r.Context(), user.ID) + if err != nil { + render.InternalError(w, err) + logger.FromRequest(r). + WithError(err). + WithField("user", login). + Warnln("api: cannot list user repositories") + } else { + render.JSON(w, repos, 200) + } + } +} diff --git a/metric/sink/datadog.go b/metric/sink/datadog.go index 922c59fe1..ea9850a37 100644 --- a/metric/sink/datadog.go +++ b/metric/sink/datadog.go @@ -1,8 +1,16 @@ -// Copyright 2019 Drone.IO Inc. All rights reserved. -// Use of this source code is governed by the Drone Non-Commercial License -// that can be found in the LICENSE file. - -// +build !oss +// 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 sink diff --git a/metric/sink/datadog_oss.go b/metric/sink/datadog_oss.go deleted file mode 100644 index d8fc44239..000000000 --- a/metric/sink/datadog_oss.go +++ /dev/null @@ -1,42 +0,0 @@ -// 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. - -// +build oss - -package sink - -import ( - "context" - - "github.com/drone/drone/core" -) - -// Datadog defines a no-op sink to datadog. -type Datadog struct{} - -// New returns a no-op sink. -func New( - core.UserStore, - core.RepositoryStore, - core.BuildStore, - core.System, - Config, -) *Datadog { - return new(Datadog) -} - -// Start starts the sink. -func (d *Datadog) Start(ctx context.Context) error { - return nil -} diff --git a/metric/sink/datadog_test.go b/metric/sink/datadog_test.go index e77719a15..317c273aa 100644 --- a/metric/sink/datadog_test.go +++ b/metric/sink/datadog_test.go @@ -1,8 +1,16 @@ -// Copyright 2019 Drone.IO Inc. All rights reserved. -// Use of this source code is governed by the Drone Non-Commercial License -// that can be found in the LICENSE file. - -// +build !oss +// 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 sink diff --git a/metric/sink/tags.go b/metric/sink/tags.go index 91ce06cd6..1fd7689e2 100644 --- a/metric/sink/tags.go +++ b/metric/sink/tags.go @@ -1,8 +1,16 @@ -// Copyright 2019 Drone.IO Inc. All rights reserved. -// Use of this source code is governed by the Drone Non-Commercial License -// that can be found in the LICENSE file. - -// +build !oss +// 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 sink