Merge pull request #77 from sgotti/export_api_client_types
*: export clients and related types
This commit is contained in:
commit
b333b6f423
|
@ -36,7 +36,7 @@ local task_build_go(version, arch) = {
|
||||||
{ type: 'run', command: 'golangci-lint run --deadline 5m' },
|
{ type: 'run', command: 'golangci-lint run --deadline 5m' },
|
||||||
{ type: 'run', name: 'build docker/k8s drivers tests binary', command: 'CGO_ENABLED=0 go test -c ./internal/services/executor/driver -o ./bin/docker-tests' },
|
{ type: 'run', name: 'build docker/k8s drivers tests binary', command: 'CGO_ENABLED=0 go test -c ./internal/services/executor/driver -o ./bin/docker-tests' },
|
||||||
{ type: 'run', name: 'build integration tests binary', command: 'go test -tags "sqlite_unlock_notify" -c ./tests -o ./bin/integration-tests' },
|
{ type: 'run', name: 'build integration tests binary', command: 'go test -tags "sqlite_unlock_notify" -c ./tests -o ./bin/integration-tests' },
|
||||||
{ type: 'run', name: 'run tests', command: 'SKIP_DOCKER_TESTS=1 SKIP_K8S_TESTS=1 go test -v -count 1 ./cmd/... ./internal/...' },
|
{ type: 'run', name: 'run tests', command: 'SKIP_DOCKER_TESTS=1 SKIP_K8S_TESTS=1 go test -v -count 1 $(go list ./... | grep -v /tests)' },
|
||||||
{ type: 'run', name: 'fetch gitea binary for integration tests', command: 'curl -L https://github.com/go-gitea/gitea/releases/download/v1.8.3/gitea-1.8.3-linux-amd64 -o ./bin/gitea && chmod +x ./bin/gitea' },
|
{ type: 'run', name: 'fetch gitea binary for integration tests', command: 'curl -L https://github.com/go-gitea/gitea/releases/download/v1.8.3/gitea-1.8.3-linux-amd64 -o ./bin/gitea && chmod +x ./bin/gitea' },
|
||||||
{ type: 'save_to_workspace', contents: [{ source_dir: './bin', dest_dir: '/bin/', paths: ['*'] }] },
|
{ type: 'save_to_workspace', contents: [{ source_dir: './bin', dest_dir: '/bin/', paths: ['*'] }] },
|
||||||
],
|
],
|
||||||
|
|
|
@ -20,8 +20,9 @@ import (
|
||||||
"path"
|
"path"
|
||||||
|
|
||||||
gitsave "agola.io/agola/internal/git-save"
|
gitsave "agola.io/agola/internal/git-save"
|
||||||
"agola.io/agola/internal/services/gateway/api"
|
|
||||||
"agola.io/agola/internal/util"
|
"agola.io/agola/internal/util"
|
||||||
|
gwapitypes "agola.io/agola/services/gateway/api/types"
|
||||||
|
gwclient "agola.io/agola/services/gateway/client"
|
||||||
|
|
||||||
uuid "github.com/satori/go.uuid"
|
uuid "github.com/satori/go.uuid"
|
||||||
"github.com/spf13/cobra"
|
"github.com/spf13/cobra"
|
||||||
|
@ -62,7 +63,7 @@ func init() {
|
||||||
}
|
}
|
||||||
|
|
||||||
func directRunStart(cmd *cobra.Command, args []string) error {
|
func directRunStart(cmd *cobra.Command, args []string) error {
|
||||||
gwclient := api.NewClient(gatewayURL, token)
|
gwclient := gwclient.NewClient(gatewayURL, token)
|
||||||
|
|
||||||
user, _, err := gwclient.GetCurrentUser(context.TODO())
|
user, _, err := gwclient.GetCurrentUser(context.TODO())
|
||||||
if err != nil {
|
if err != nil {
|
||||||
|
@ -102,7 +103,7 @@ func directRunStart(cmd *cobra.Command, args []string) error {
|
||||||
}
|
}
|
||||||
|
|
||||||
log.Infof("starting direct run")
|
log.Infof("starting direct run")
|
||||||
req := &api.UserCreateRunRequest{
|
req := &gwapitypes.UserCreateRunRequest{
|
||||||
RepoUUID: repoUUID,
|
RepoUUID: repoUUID,
|
||||||
RepoPath: repoPath,
|
RepoPath: repoPath,
|
||||||
Branch: branch,
|
Branch: branch,
|
||||||
|
|
|
@ -17,8 +17,8 @@ package cmd
|
||||||
import (
|
import (
|
||||||
"context"
|
"context"
|
||||||
|
|
||||||
cstypes "agola.io/agola/internal/services/configstore/types"
|
gwapitypes "agola.io/agola/services/gateway/api/types"
|
||||||
"agola.io/agola/internal/services/gateway/api"
|
gwclient "agola.io/agola/services/gateway/client"
|
||||||
|
|
||||||
"github.com/spf13/cobra"
|
"github.com/spf13/cobra"
|
||||||
errors "golang.org/x/xerrors"
|
errors "golang.org/x/xerrors"
|
||||||
|
@ -55,16 +55,16 @@ func init() {
|
||||||
}
|
}
|
||||||
|
|
||||||
func orgCreate(cmd *cobra.Command, args []string) error {
|
func orgCreate(cmd *cobra.Command, args []string) error {
|
||||||
gwclient := api.NewClient(gatewayURL, token)
|
gwclient := gwclient.NewClient(gatewayURL, token)
|
||||||
|
|
||||||
// TODO(sgotti) make this a custom pflag Value?
|
// TODO(sgotti) make this a custom pflag Value?
|
||||||
if !cstypes.IsValidVisibility(cstypes.Visibility(orgCreateOpts.visibility)) {
|
if !IsValidVisibility(orgCreateOpts.visibility) {
|
||||||
return errors.Errorf("invalid visibility %q", orgCreateOpts.visibility)
|
return errors.Errorf("invalid visibility %q", orgCreateOpts.visibility)
|
||||||
}
|
}
|
||||||
|
|
||||||
req := &api.CreateOrgRequest{
|
req := &gwapitypes.CreateOrgRequest{
|
||||||
Name: orgCreateOpts.name,
|
Name: orgCreateOpts.name,
|
||||||
Visibility: cstypes.Visibility(orgCreateOpts.visibility),
|
Visibility: gwapitypes.Visibility(orgCreateOpts.visibility),
|
||||||
}
|
}
|
||||||
|
|
||||||
log.Infof("creating org")
|
log.Infof("creating org")
|
||||||
|
|
|
@ -17,7 +17,7 @@ package cmd
|
||||||
import (
|
import (
|
||||||
"context"
|
"context"
|
||||||
|
|
||||||
"agola.io/agola/internal/services/gateway/api"
|
gwclient "agola.io/agola/services/gateway/client"
|
||||||
|
|
||||||
"github.com/spf13/cobra"
|
"github.com/spf13/cobra"
|
||||||
errors "golang.org/x/xerrors"
|
errors "golang.org/x/xerrors"
|
||||||
|
@ -52,7 +52,7 @@ func init() {
|
||||||
}
|
}
|
||||||
|
|
||||||
func orgDelete(cmd *cobra.Command, args []string) error {
|
func orgDelete(cmd *cobra.Command, args []string) error {
|
||||||
gwclient := api.NewClient(gatewayURL, token)
|
gwclient := gwclient.NewClient(gatewayURL, token)
|
||||||
|
|
||||||
log.Infof("deleting organization %q", orgDeleteOpts.name)
|
log.Infof("deleting organization %q", orgDeleteOpts.name)
|
||||||
if _, err := gwclient.DeleteOrg(context.TODO(), orgDeleteOpts.name); err != nil {
|
if _, err := gwclient.DeleteOrg(context.TODO(), orgDeleteOpts.name); err != nil {
|
||||||
|
|
|
@ -17,8 +17,8 @@ package cmd
|
||||||
import (
|
import (
|
||||||
"context"
|
"context"
|
||||||
|
|
||||||
cstypes "agola.io/agola/internal/services/configstore/types"
|
gwapitypes "agola.io/agola/services/gateway/api/types"
|
||||||
"agola.io/agola/internal/services/gateway/api"
|
gwclient "agola.io/agola/services/gateway/client"
|
||||||
|
|
||||||
"github.com/spf13/cobra"
|
"github.com/spf13/cobra"
|
||||||
errors "golang.org/x/xerrors"
|
errors "golang.org/x/xerrors"
|
||||||
|
@ -60,10 +60,10 @@ func init() {
|
||||||
}
|
}
|
||||||
|
|
||||||
func orgMemberAdd(cmd *cobra.Command, args []string) error {
|
func orgMemberAdd(cmd *cobra.Command, args []string) error {
|
||||||
gwclient := api.NewClient(gatewayURL, token)
|
gwclient := gwclient.NewClient(gatewayURL, token)
|
||||||
|
|
||||||
log.Infof("adding/updating member %q to organization %q with role %q", orgMemberAddOpts.username, orgMemberAddOpts.orgname, orgMemberAddOpts.role)
|
log.Infof("adding/updating member %q to organization %q with role %q", orgMemberAddOpts.username, orgMemberAddOpts.orgname, orgMemberAddOpts.role)
|
||||||
_, _, err := gwclient.AddOrgMember(context.TODO(), orgMemberAddOpts.orgname, orgMemberAddOpts.username, cstypes.MemberRole(orgMemberAddOpts.role))
|
_, _, err := gwclient.AddOrgMember(context.TODO(), orgMemberAddOpts.orgname, orgMemberAddOpts.username, gwapitypes.MemberRole(orgMemberAddOpts.role))
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return errors.Errorf("failed to add/update organization member: %w", err)
|
return errors.Errorf("failed to add/update organization member: %w", err)
|
||||||
}
|
}
|
||||||
|
|
|
@ -19,7 +19,7 @@ import (
|
||||||
"encoding/json"
|
"encoding/json"
|
||||||
"os"
|
"os"
|
||||||
|
|
||||||
"agola.io/agola/internal/services/gateway/api"
|
gwclient "agola.io/agola/services/gateway/client"
|
||||||
|
|
||||||
"github.com/spf13/cobra"
|
"github.com/spf13/cobra"
|
||||||
errors "golang.org/x/xerrors"
|
errors "golang.org/x/xerrors"
|
||||||
|
@ -54,7 +54,7 @@ func init() {
|
||||||
}
|
}
|
||||||
|
|
||||||
func orgMemberList(cmd *cobra.Command, args []string) error {
|
func orgMemberList(cmd *cobra.Command, args []string) error {
|
||||||
gwclient := api.NewClient(gatewayURL, token)
|
gwclient := gwclient.NewClient(gatewayURL, token)
|
||||||
|
|
||||||
orgMembers, _, err := gwclient.GetOrgMembers(context.TODO(), orgMemberListOpts.orgname)
|
orgMembers, _, err := gwclient.GetOrgMembers(context.TODO(), orgMemberListOpts.orgname)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
|
|
|
@ -17,7 +17,7 @@ package cmd
|
||||||
import (
|
import (
|
||||||
"context"
|
"context"
|
||||||
|
|
||||||
"agola.io/agola/internal/services/gateway/api"
|
gwclient "agola.io/agola/services/gateway/client"
|
||||||
|
|
||||||
"github.com/spf13/cobra"
|
"github.com/spf13/cobra"
|
||||||
errors "golang.org/x/xerrors"
|
errors "golang.org/x/xerrors"
|
||||||
|
@ -57,7 +57,7 @@ func init() {
|
||||||
}
|
}
|
||||||
|
|
||||||
func orgMemberRemove(cmd *cobra.Command, args []string) error {
|
func orgMemberRemove(cmd *cobra.Command, args []string) error {
|
||||||
gwclient := api.NewClient(gatewayURL, token)
|
gwclient := gwclient.NewClient(gatewayURL, token)
|
||||||
|
|
||||||
log.Infof("removing member %q from organization %q", orgMemberRemoveOpts.username, orgMemberRemoveOpts.orgname)
|
log.Infof("removing member %q from organization %q", orgMemberRemoveOpts.username, orgMemberRemoveOpts.orgname)
|
||||||
_, err := gwclient.RemoveOrgMember(context.TODO(), orgMemberRemoveOpts.orgname, orgMemberRemoveOpts.username)
|
_, err := gwclient.RemoveOrgMember(context.TODO(), orgMemberRemoveOpts.orgname, orgMemberRemoveOpts.username)
|
||||||
|
|
|
@ -17,8 +17,8 @@ package cmd
|
||||||
import (
|
import (
|
||||||
"context"
|
"context"
|
||||||
|
|
||||||
cstypes "agola.io/agola/internal/services/configstore/types"
|
gwapitypes "agola.io/agola/services/gateway/api/types"
|
||||||
"agola.io/agola/internal/services/gateway/api"
|
gwclient "agola.io/agola/services/gateway/client"
|
||||||
|
|
||||||
"github.com/spf13/cobra"
|
"github.com/spf13/cobra"
|
||||||
errors "golang.org/x/xerrors"
|
errors "golang.org/x/xerrors"
|
||||||
|
@ -71,18 +71,28 @@ func init() {
|
||||||
cmdProject.AddCommand(cmdProjectCreate)
|
cmdProject.AddCommand(cmdProjectCreate)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func IsValidVisibility(v string) bool {
|
||||||
|
switch gwapitypes.Visibility(v) {
|
||||||
|
case gwapitypes.VisibilityPublic:
|
||||||
|
case gwapitypes.VisibilityPrivate:
|
||||||
|
default:
|
||||||
|
return false
|
||||||
|
}
|
||||||
|
return true
|
||||||
|
}
|
||||||
|
|
||||||
func projectCreate(cmd *cobra.Command, args []string) error {
|
func projectCreate(cmd *cobra.Command, args []string) error {
|
||||||
gwclient := api.NewClient(gatewayURL, token)
|
gwclient := gwclient.NewClient(gatewayURL, token)
|
||||||
|
|
||||||
// TODO(sgotti) make this a custom pflag Value?
|
// TODO(sgotti) make this a custom pflag Value?
|
||||||
if !cstypes.IsValidVisibility(cstypes.Visibility(projectCreateOpts.visibility)) {
|
if !IsValidVisibility(projectCreateOpts.visibility) {
|
||||||
return errors.Errorf("invalid visibility %q", projectCreateOpts.visibility)
|
return errors.Errorf("invalid visibility %q", projectCreateOpts.visibility)
|
||||||
}
|
}
|
||||||
|
|
||||||
req := &api.CreateProjectRequest{
|
req := &gwapitypes.CreateProjectRequest{
|
||||||
Name: projectCreateOpts.name,
|
Name: projectCreateOpts.name,
|
||||||
ParentRef: projectCreateOpts.parentPath,
|
ParentRef: projectCreateOpts.parentPath,
|
||||||
Visibility: cstypes.Visibility(projectCreateOpts.visibility),
|
Visibility: gwapitypes.Visibility(projectCreateOpts.visibility),
|
||||||
RepoPath: projectCreateOpts.repoPath,
|
RepoPath: projectCreateOpts.repoPath,
|
||||||
RemoteSourceName: projectCreateOpts.remoteSourceName,
|
RemoteSourceName: projectCreateOpts.remoteSourceName,
|
||||||
SkipSSHHostKeyCheck: projectCreateOpts.skipSSHHostKeyCheck,
|
SkipSSHHostKeyCheck: projectCreateOpts.skipSSHHostKeyCheck,
|
||||||
|
|
|
@ -17,7 +17,7 @@ package cmd
|
||||||
import (
|
import (
|
||||||
"context"
|
"context"
|
||||||
|
|
||||||
"agola.io/agola/internal/services/gateway/api"
|
gwclient "agola.io/agola/services/gateway/client"
|
||||||
|
|
||||||
"github.com/spf13/cobra"
|
"github.com/spf13/cobra"
|
||||||
errors "golang.org/x/xerrors"
|
errors "golang.org/x/xerrors"
|
||||||
|
@ -52,7 +52,7 @@ func init() {
|
||||||
}
|
}
|
||||||
|
|
||||||
func projectDelete(cmd *cobra.Command, args []string) error {
|
func projectDelete(cmd *cobra.Command, args []string) error {
|
||||||
gwclient := api.NewClient(gatewayURL, token)
|
gwclient := gwclient.NewClient(gatewayURL, token)
|
||||||
|
|
||||||
log.Infof("deleting project")
|
log.Infof("deleting project")
|
||||||
|
|
||||||
|
|
|
@ -17,8 +17,8 @@ package cmd
|
||||||
import (
|
import (
|
||||||
"context"
|
"context"
|
||||||
|
|
||||||
cstypes "agola.io/agola/internal/services/configstore/types"
|
gwapitypes "agola.io/agola/services/gateway/api/types"
|
||||||
"agola.io/agola/internal/services/gateway/api"
|
gwclient "agola.io/agola/services/gateway/client"
|
||||||
|
|
||||||
"github.com/spf13/cobra"
|
"github.com/spf13/cobra"
|
||||||
errors "golang.org/x/xerrors"
|
errors "golang.org/x/xerrors"
|
||||||
|
@ -60,17 +60,17 @@ func init() {
|
||||||
}
|
}
|
||||||
|
|
||||||
func projectGroupCreate(cmd *cobra.Command, args []string) error {
|
func projectGroupCreate(cmd *cobra.Command, args []string) error {
|
||||||
gwclient := api.NewClient(gatewayURL, token)
|
gwclient := gwclient.NewClient(gatewayURL, token)
|
||||||
|
|
||||||
// TODO(sgotti) make this a custom pflag Value?
|
// TODO(sgotti) make this a custom pflag Value?
|
||||||
if !cstypes.IsValidVisibility(cstypes.Visibility(projectCreateOpts.visibility)) {
|
if !IsValidVisibility(projectGroupCreateOpts.visibility) {
|
||||||
return errors.Errorf("invalid visibility %q", projectCreateOpts.visibility)
|
return errors.Errorf("invalid visibility %q", projectGroupCreateOpts.visibility)
|
||||||
}
|
}
|
||||||
|
|
||||||
req := &api.CreateProjectGroupRequest{
|
req := &gwapitypes.CreateProjectGroupRequest{
|
||||||
Name: projectGroupCreateOpts.name,
|
Name: projectGroupCreateOpts.name,
|
||||||
ParentRef: projectGroupCreateOpts.parentPath,
|
ParentRef: projectGroupCreateOpts.parentPath,
|
||||||
Visibility: cstypes.Visibility(projectCreateOpts.visibility),
|
Visibility: gwapitypes.Visibility(projectGroupCreateOpts.visibility),
|
||||||
}
|
}
|
||||||
|
|
||||||
log.Infof("creating project group")
|
log.Infof("creating project group")
|
||||||
|
|
|
@ -18,7 +18,9 @@ import (
|
||||||
"context"
|
"context"
|
||||||
"fmt"
|
"fmt"
|
||||||
|
|
||||||
"agola.io/agola/internal/services/gateway/api"
|
gwapitypes "agola.io/agola/services/gateway/api/types"
|
||||||
|
gwclient "agola.io/agola/services/gateway/client"
|
||||||
|
|
||||||
"github.com/spf13/cobra"
|
"github.com/spf13/cobra"
|
||||||
)
|
)
|
||||||
|
|
||||||
|
@ -50,14 +52,14 @@ func init() {
|
||||||
cmdProject.AddCommand(cmdProjectList)
|
cmdProject.AddCommand(cmdProjectList)
|
||||||
}
|
}
|
||||||
|
|
||||||
func printProjects(projects []*api.ProjectResponse) {
|
func printProjects(projects []*gwapitypes.ProjectResponse) {
|
||||||
for _, project := range projects {
|
for _, project := range projects {
|
||||||
fmt.Printf("%s: Name: %s\n", project.ID, project.Name)
|
fmt.Printf("%s: Name: %s\n", project.ID, project.Name)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
func projectList(cmd *cobra.Command, args []string) error {
|
func projectList(cmd *cobra.Command, args []string) error {
|
||||||
gwclient := api.NewClient(gatewayURL, token)
|
gwclient := gwclient.NewClient(gatewayURL, token)
|
||||||
|
|
||||||
projects, _, err := gwclient.GetProjectGroupProjects(context.TODO(), projectListOpts.parentPath)
|
projects, _, err := gwclient.GetProjectGroupProjects(context.TODO(), projectListOpts.parentPath)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
|
|
|
@ -17,7 +17,7 @@ package cmd
|
||||||
import (
|
import (
|
||||||
"context"
|
"context"
|
||||||
|
|
||||||
"agola.io/agola/internal/services/gateway/api"
|
gwclient "agola.io/agola/services/gateway/client"
|
||||||
|
|
||||||
"github.com/spf13/cobra"
|
"github.com/spf13/cobra"
|
||||||
errors "golang.org/x/xerrors"
|
errors "golang.org/x/xerrors"
|
||||||
|
@ -52,7 +52,7 @@ func init() {
|
||||||
}
|
}
|
||||||
|
|
||||||
func projectReconfig(cmd *cobra.Command, args []string) error {
|
func projectReconfig(cmd *cobra.Command, args []string) error {
|
||||||
gwclient := api.NewClient(gatewayURL, token)
|
gwclient := gwclient.NewClient(gatewayURL, token)
|
||||||
|
|
||||||
log.Infof("reconfiguring remote project")
|
log.Infof("reconfiguring remote project")
|
||||||
if _, err := gwclient.ReconfigProject(context.TODO(), projectReconfigOpts.name); err != nil {
|
if _, err := gwclient.ReconfigProject(context.TODO(), projectReconfigOpts.name); err != nil {
|
||||||
|
|
|
@ -19,8 +19,8 @@ import (
|
||||||
"io/ioutil"
|
"io/ioutil"
|
||||||
"os"
|
"os"
|
||||||
|
|
||||||
cstypes "agola.io/agola/internal/services/configstore/types"
|
gwapitypes "agola.io/agola/services/gateway/api/types"
|
||||||
"agola.io/agola/internal/services/gateway/api"
|
gwclient "agola.io/agola/services/gateway/client"
|
||||||
|
|
||||||
"github.com/ghodss/yaml"
|
"github.com/ghodss/yaml"
|
||||||
"github.com/spf13/cobra"
|
"github.com/spf13/cobra"
|
||||||
|
@ -73,7 +73,7 @@ func init() {
|
||||||
}
|
}
|
||||||
|
|
||||||
func secretCreate(cmd *cobra.Command, ownertype string, args []string) error {
|
func secretCreate(cmd *cobra.Command, ownertype string, args []string) error {
|
||||||
gwclient := api.NewClient(gatewayURL, token)
|
gwclient := gwclient.NewClient(gatewayURL, token)
|
||||||
|
|
||||||
// "github.com/ghodss/yaml" doesn't provide a streaming decoder
|
// "github.com/ghodss/yaml" doesn't provide a streaming decoder
|
||||||
var data []byte
|
var data []byte
|
||||||
|
@ -94,9 +94,9 @@ func secretCreate(cmd *cobra.Command, ownertype string, args []string) error {
|
||||||
if err := yaml.Unmarshal(data, &secretData); err != nil {
|
if err := yaml.Unmarshal(data, &secretData); err != nil {
|
||||||
log.Fatalf("failed to unmarshal secret: %v", err)
|
log.Fatalf("failed to unmarshal secret: %v", err)
|
||||||
}
|
}
|
||||||
req := &api.CreateSecretRequest{
|
req := &gwapitypes.CreateSecretRequest{
|
||||||
Name: secretCreateOpts.name,
|
Name: secretCreateOpts.name,
|
||||||
Type: cstypes.SecretTypeInternal,
|
Type: gwapitypes.SecretTypeInternal,
|
||||||
Data: secretData,
|
Data: secretData,
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -17,7 +17,7 @@ package cmd
|
||||||
import (
|
import (
|
||||||
"context"
|
"context"
|
||||||
|
|
||||||
"agola.io/agola/internal/services/gateway/api"
|
gwclient "agola.io/agola/services/gateway/client"
|
||||||
|
|
||||||
"github.com/spf13/cobra"
|
"github.com/spf13/cobra"
|
||||||
errors "golang.org/x/xerrors"
|
errors "golang.org/x/xerrors"
|
||||||
|
@ -57,7 +57,7 @@ func init() {
|
||||||
}
|
}
|
||||||
|
|
||||||
func secretDelete(cmd *cobra.Command, ownertype string, args []string) error {
|
func secretDelete(cmd *cobra.Command, ownertype string, args []string) error {
|
||||||
gwclient := api.NewClient(gatewayURL, token)
|
gwclient := gwclient.NewClient(gatewayURL, token)
|
||||||
|
|
||||||
switch ownertype {
|
switch ownertype {
|
||||||
case "project":
|
case "project":
|
||||||
|
|
|
@ -19,8 +19,8 @@ import (
|
||||||
"io/ioutil"
|
"io/ioutil"
|
||||||
"os"
|
"os"
|
||||||
|
|
||||||
cstypes "agola.io/agola/internal/services/configstore/types"
|
gwapitypes "agola.io/agola/services/gateway/api/types"
|
||||||
"agola.io/agola/internal/services/gateway/api"
|
gwclient "agola.io/agola/services/gateway/client"
|
||||||
|
|
||||||
"github.com/ghodss/yaml"
|
"github.com/ghodss/yaml"
|
||||||
"github.com/spf13/cobra"
|
"github.com/spf13/cobra"
|
||||||
|
@ -75,7 +75,7 @@ func init() {
|
||||||
}
|
}
|
||||||
|
|
||||||
func secretUpdate(cmd *cobra.Command, ownertype string, args []string) error {
|
func secretUpdate(cmd *cobra.Command, ownertype string, args []string) error {
|
||||||
gwclient := api.NewClient(gatewayURL, token)
|
gwclient := gwclient.NewClient(gatewayURL, token)
|
||||||
|
|
||||||
// "github.com/ghodss/yaml" doesn't provide a streaming decoder
|
// "github.com/ghodss/yaml" doesn't provide a streaming decoder
|
||||||
var data []byte
|
var data []byte
|
||||||
|
@ -96,9 +96,9 @@ func secretUpdate(cmd *cobra.Command, ownertype string, args []string) error {
|
||||||
if err := yaml.Unmarshal(data, &secretData); err != nil {
|
if err := yaml.Unmarshal(data, &secretData); err != nil {
|
||||||
log.Fatalf("failed to unmarshal secret: %v", err)
|
log.Fatalf("failed to unmarshal secret: %v", err)
|
||||||
}
|
}
|
||||||
req := &api.UpdateSecretRequest{
|
req := &gwapitypes.UpdateSecretRequest{
|
||||||
Name: secretUpdateOpts.name,
|
Name: secretUpdateOpts.name,
|
||||||
Type: cstypes.SecretTypeInternal,
|
Type: gwapitypes.SecretTypeInternal,
|
||||||
Data: secretData,
|
Data: secretData,
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -19,9 +19,8 @@ import (
|
||||||
"io/ioutil"
|
"io/ioutil"
|
||||||
"os"
|
"os"
|
||||||
|
|
||||||
"agola.io/agola/internal/config"
|
gwapitypes "agola.io/agola/services/gateway/api/types"
|
||||||
cstypes "agola.io/agola/internal/services/configstore/types"
|
gwclient "agola.io/agola/services/gateway/client"
|
||||||
"agola.io/agola/internal/services/gateway/api"
|
|
||||||
|
|
||||||
"github.com/ghodss/yaml"
|
"github.com/ghodss/yaml"
|
||||||
"github.com/spf13/cobra"
|
"github.com/spf13/cobra"
|
||||||
|
@ -92,11 +91,11 @@ type VariableValue struct {
|
||||||
SecretName string `json:"secret_name,omitempty"`
|
SecretName string `json:"secret_name,omitempty"`
|
||||||
SecretVar string `json:"secret_var,omitempty"`
|
SecretVar string `json:"secret_var,omitempty"`
|
||||||
|
|
||||||
When *config.When `json:"when,omitempty"`
|
When *gwapitypes.When `json:"when,omitempty"`
|
||||||
}
|
}
|
||||||
|
|
||||||
func variableCreate(cmd *cobra.Command, ownertype string, args []string) error {
|
func variableCreate(cmd *cobra.Command, ownertype string, args []string) error {
|
||||||
gwclient := api.NewClient(gatewayURL, token)
|
gwclient := gwclient.NewClient(gatewayURL, token)
|
||||||
|
|
||||||
// "github.com/ghodss/yaml" doesn't provide a streaming decoder
|
// "github.com/ghodss/yaml" doesn't provide a streaming decoder
|
||||||
var data []byte
|
var data []byte
|
||||||
|
@ -117,15 +116,15 @@ func variableCreate(cmd *cobra.Command, ownertype string, args []string) error {
|
||||||
if err := yaml.Unmarshal(data, &values); err != nil {
|
if err := yaml.Unmarshal(data, &values); err != nil {
|
||||||
log.Fatalf("failed to unmarshal values: %v", err)
|
log.Fatalf("failed to unmarshal values: %v", err)
|
||||||
}
|
}
|
||||||
rvalues := []cstypes.VariableValue{}
|
rvalues := []gwapitypes.VariableValueRequest{}
|
||||||
for _, value := range values {
|
for _, value := range values {
|
||||||
rvalues = append(rvalues, cstypes.VariableValue{
|
rvalues = append(rvalues, gwapitypes.VariableValueRequest{
|
||||||
SecretName: value.SecretName,
|
SecretName: value.SecretName,
|
||||||
SecretVar: value.SecretVar,
|
SecretVar: value.SecretVar,
|
||||||
When: (*cstypes.When)(value.When),
|
When: value.When,
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
req := &api.CreateVariableRequest{
|
req := &gwapitypes.CreateVariableRequest{
|
||||||
Name: variableCreateOpts.name,
|
Name: variableCreateOpts.name,
|
||||||
Values: rvalues,
|
Values: rvalues,
|
||||||
}
|
}
|
||||||
|
|
|
@ -17,7 +17,7 @@ package cmd
|
||||||
import (
|
import (
|
||||||
"context"
|
"context"
|
||||||
|
|
||||||
"agola.io/agola/internal/services/gateway/api"
|
gwclient "agola.io/agola/services/gateway/client"
|
||||||
|
|
||||||
"github.com/spf13/cobra"
|
"github.com/spf13/cobra"
|
||||||
errors "golang.org/x/xerrors"
|
errors "golang.org/x/xerrors"
|
||||||
|
@ -57,7 +57,7 @@ func init() {
|
||||||
}
|
}
|
||||||
|
|
||||||
func variableDelete(cmd *cobra.Command, ownertype string, args []string) error {
|
func variableDelete(cmd *cobra.Command, ownertype string, args []string) error {
|
||||||
gwclient := api.NewClient(gatewayURL, token)
|
gwclient := gwclient.NewClient(gatewayURL, token)
|
||||||
|
|
||||||
switch ownertype {
|
switch ownertype {
|
||||||
case "project":
|
case "project":
|
||||||
|
|
|
@ -19,8 +19,8 @@ import (
|
||||||
"io/ioutil"
|
"io/ioutil"
|
||||||
"os"
|
"os"
|
||||||
|
|
||||||
cstypes "agola.io/agola/internal/services/configstore/types"
|
gwapitypes "agola.io/agola/services/gateway/api/types"
|
||||||
"agola.io/agola/internal/services/gateway/api"
|
gwclient "agola.io/agola/services/gateway/client"
|
||||||
|
|
||||||
"github.com/ghodss/yaml"
|
"github.com/ghodss/yaml"
|
||||||
"github.com/spf13/cobra"
|
"github.com/spf13/cobra"
|
||||||
|
@ -68,7 +68,7 @@ func init() {
|
||||||
}
|
}
|
||||||
|
|
||||||
func variableUpdate(cmd *cobra.Command, ownertype string, args []string) error {
|
func variableUpdate(cmd *cobra.Command, ownertype string, args []string) error {
|
||||||
gwclient := api.NewClient(gatewayURL, token)
|
gwclient := gwclient.NewClient(gatewayURL, token)
|
||||||
|
|
||||||
// "github.com/ghodss/yaml" doesn't provide a streaming decoder
|
// "github.com/ghodss/yaml" doesn't provide a streaming decoder
|
||||||
var data []byte
|
var data []byte
|
||||||
|
@ -89,15 +89,15 @@ func variableUpdate(cmd *cobra.Command, ownertype string, args []string) error {
|
||||||
if err := yaml.Unmarshal(data, &values); err != nil {
|
if err := yaml.Unmarshal(data, &values); err != nil {
|
||||||
log.Fatalf("failed to unmarshall values: %v", err)
|
log.Fatalf("failed to unmarshall values: %v", err)
|
||||||
}
|
}
|
||||||
rvalues := []cstypes.VariableValue{}
|
rvalues := []gwapitypes.VariableValueRequest{}
|
||||||
for _, value := range values {
|
for _, value := range values {
|
||||||
rvalues = append(rvalues, cstypes.VariableValue{
|
rvalues = append(rvalues, gwapitypes.VariableValueRequest{
|
||||||
SecretName: value.SecretName,
|
SecretName: value.SecretName,
|
||||||
SecretVar: value.SecretVar,
|
SecretVar: value.SecretVar,
|
||||||
When: (*cstypes.When)(value.When),
|
When: value.When,
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
req := &api.UpdateVariableRequest{
|
req := &gwapitypes.UpdateVariableRequest{
|
||||||
Name: variableUpdateOpts.name,
|
Name: variableUpdateOpts.name,
|
||||||
Values: rvalues,
|
Values: rvalues,
|
||||||
}
|
}
|
||||||
|
|
|
@ -18,9 +18,9 @@ import (
|
||||||
"context"
|
"context"
|
||||||
|
|
||||||
"agola.io/agola/internal/gitsources/github"
|
"agola.io/agola/internal/gitsources/github"
|
||||||
cstypes "agola.io/agola/internal/services/configstore/types"
|
gwapitypes "agola.io/agola/services/gateway/api/types"
|
||||||
"agola.io/agola/internal/services/gateway/api"
|
gwclient "agola.io/agola/services/gateway/client"
|
||||||
"agola.io/agola/internal/util"
|
"agola.io/agola/util"
|
||||||
|
|
||||||
"github.com/spf13/cobra"
|
"github.com/spf13/cobra"
|
||||||
errors "golang.org/x/xerrors"
|
errors "golang.org/x/xerrors"
|
||||||
|
@ -81,10 +81,10 @@ func init() {
|
||||||
}
|
}
|
||||||
|
|
||||||
func remoteSourceCreate(cmd *cobra.Command, args []string) error {
|
func remoteSourceCreate(cmd *cobra.Command, args []string) error {
|
||||||
gwclient := api.NewClient(gatewayURL, token)
|
gwclient := gwclient.NewClient(gatewayURL, token)
|
||||||
|
|
||||||
// for github remote source type, set defaults for github.com
|
// for github remote source type, set defaults for github.com
|
||||||
if remoteSourceCreateOpts.rsType == string(cstypes.RemoteSourceTypeGithub) {
|
if remoteSourceCreateOpts.rsType == "github" {
|
||||||
remoteSourceCreateOpts.apiURL = github.GitHubAPIURL
|
remoteSourceCreateOpts.apiURL = github.GitHubAPIURL
|
||||||
remoteSourceCreateOpts.sshHostKey = github.GitHubSSHHostKey
|
remoteSourceCreateOpts.sshHostKey = github.GitHubSSHHostKey
|
||||||
}
|
}
|
||||||
|
@ -93,7 +93,7 @@ func remoteSourceCreate(cmd *cobra.Command, args []string) error {
|
||||||
return errors.Errorf(`required flag "api-url" not set`)
|
return errors.Errorf(`required flag "api-url" not set`)
|
||||||
}
|
}
|
||||||
|
|
||||||
req := &api.CreateRemoteSourceRequest{
|
req := &gwapitypes.CreateRemoteSourceRequest{
|
||||||
Name: remoteSourceCreateOpts.name,
|
Name: remoteSourceCreateOpts.name,
|
||||||
Type: remoteSourceCreateOpts.rsType,
|
Type: remoteSourceCreateOpts.rsType,
|
||||||
AuthType: remoteSourceCreateOpts.authType,
|
AuthType: remoteSourceCreateOpts.authType,
|
||||||
|
|
|
@ -18,7 +18,9 @@ import (
|
||||||
"context"
|
"context"
|
||||||
"fmt"
|
"fmt"
|
||||||
|
|
||||||
"agola.io/agola/internal/services/gateway/api"
|
gwapitypes "agola.io/agola/services/gateway/api/types"
|
||||||
|
gwclient "agola.io/agola/services/gateway/client"
|
||||||
|
|
||||||
"github.com/spf13/cobra"
|
"github.com/spf13/cobra"
|
||||||
)
|
)
|
||||||
|
|
||||||
|
@ -48,14 +50,14 @@ func init() {
|
||||||
cmdRemoteSource.AddCommand(cmdRemoteSourceList)
|
cmdRemoteSource.AddCommand(cmdRemoteSourceList)
|
||||||
}
|
}
|
||||||
|
|
||||||
func printRemoteSources(remoteSources []*api.RemoteSourceResponse) {
|
func printRemoteSources(remoteSources []*gwapitypes.RemoteSourceResponse) {
|
||||||
for _, rs := range remoteSources {
|
for _, rs := range remoteSources {
|
||||||
fmt.Printf("%s: Name: %s\n", rs.ID, rs.Name)
|
fmt.Printf("%s: Name: %s\n", rs.ID, rs.Name)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
func remoteSourceList(cmd *cobra.Command, args []string) error {
|
func remoteSourceList(cmd *cobra.Command, args []string) error {
|
||||||
gwclient := api.NewClient(gatewayURL, token)
|
gwclient := gwclient.NewClient(gatewayURL, token)
|
||||||
|
|
||||||
remouteSources, _, err := gwclient.GetRemoteSources(context.TODO(), remoteSourceListOpts.start, remoteSourceListOpts.limit, false)
|
remouteSources, _, err := gwclient.GetRemoteSources(context.TODO(), remoteSourceListOpts.start, remoteSourceListOpts.limit, false)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
|
|
|
@ -17,7 +17,8 @@ package cmd
|
||||||
import (
|
import (
|
||||||
"context"
|
"context"
|
||||||
|
|
||||||
"agola.io/agola/internal/services/gateway/api"
|
gwapitypes "agola.io/agola/services/gateway/api/types"
|
||||||
|
gwclient "agola.io/agola/services/gateway/client"
|
||||||
|
|
||||||
"github.com/spf13/cobra"
|
"github.com/spf13/cobra"
|
||||||
errors "golang.org/x/xerrors"
|
errors "golang.org/x/xerrors"
|
||||||
|
@ -71,9 +72,9 @@ func init() {
|
||||||
}
|
}
|
||||||
|
|
||||||
func remoteSourceUpdate(cmd *cobra.Command, args []string) error {
|
func remoteSourceUpdate(cmd *cobra.Command, args []string) error {
|
||||||
gwclient := api.NewClient(gatewayURL, token)
|
gwclient := gwclient.NewClient(gatewayURL, token)
|
||||||
|
|
||||||
req := &api.UpdateRemoteSourceRequest{}
|
req := &gwapitypes.UpdateRemoteSourceRequest{}
|
||||||
|
|
||||||
flags := cmd.Flags()
|
flags := cmd.Flags()
|
||||||
if flags.Changed("new-name") {
|
if flags.Changed("new-name") {
|
||||||
|
|
|
@ -19,7 +19,8 @@ import (
|
||||||
"fmt"
|
"fmt"
|
||||||
"path"
|
"path"
|
||||||
|
|
||||||
"agola.io/agola/internal/services/gateway/api"
|
gwapitypes "agola.io/agola/services/gateway/api/types"
|
||||||
|
gwclient "agola.io/agola/services/gateway/client"
|
||||||
errors "golang.org/x/xerrors"
|
errors "golang.org/x/xerrors"
|
||||||
|
|
||||||
"github.com/spf13/cobra"
|
"github.com/spf13/cobra"
|
||||||
|
@ -59,7 +60,7 @@ func init() {
|
||||||
cmdRun.AddCommand(cmdRunList)
|
cmdRun.AddCommand(cmdRunList)
|
||||||
}
|
}
|
||||||
|
|
||||||
func printRuns(runs []*api.RunResponse) {
|
func printRuns(runs []*gwapitypes.RunResponse) {
|
||||||
for _, run := range runs {
|
for _, run := range runs {
|
||||||
fmt.Printf("%s: Phase: %s, Result: %s\n", run.ID, run.Phase, run.Result)
|
fmt.Printf("%s: Phase: %s, Result: %s\n", run.ID, run.Phase, run.Result)
|
||||||
for _, task := range run.Tasks {
|
for _, task := range run.Tasks {
|
||||||
|
@ -69,7 +70,7 @@ func printRuns(runs []*api.RunResponse) {
|
||||||
}
|
}
|
||||||
|
|
||||||
func runList(cmd *cobra.Command, args []string) error {
|
func runList(cmd *cobra.Command, args []string) error {
|
||||||
gwclient := api.NewClient(gatewayURL, token)
|
gwclient := gwclient.NewClient(gatewayURL, token)
|
||||||
|
|
||||||
project, _, err := gwclient.GetProject(context.TODO(), runListOpts.projectRef)
|
project, _, err := gwclient.GetProject(context.TODO(), runListOpts.projectRef)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
|
@ -81,7 +82,7 @@ func runList(cmd *cobra.Command, args []string) error {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
|
|
||||||
runs := make([]*api.RunResponse, len(runsResp))
|
runs := make([]*gwapitypes.RunResponse, len(runsResp))
|
||||||
for i, runResponse := range runsResp {
|
for i, runResponse := range runsResp {
|
||||||
run, _, err := gwclient.GetRun(context.TODO(), runResponse.ID)
|
run, _, err := gwclient.GetRun(context.TODO(), runResponse.ID)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
|
|
|
@ -17,7 +17,8 @@ package cmd
|
||||||
import (
|
import (
|
||||||
"context"
|
"context"
|
||||||
|
|
||||||
"agola.io/agola/internal/services/gateway/api"
|
gwapitypes "agola.io/agola/services/gateway/api/types"
|
||||||
|
gwclient "agola.io/agola/services/gateway/client"
|
||||||
|
|
||||||
"github.com/spf13/cobra"
|
"github.com/spf13/cobra"
|
||||||
errors "golang.org/x/xerrors"
|
errors "golang.org/x/xerrors"
|
||||||
|
@ -52,9 +53,9 @@ func init() {
|
||||||
}
|
}
|
||||||
|
|
||||||
func userCreate(cmd *cobra.Command, args []string) error {
|
func userCreate(cmd *cobra.Command, args []string) error {
|
||||||
gwclient := api.NewClient(gatewayURL, token)
|
gwclient := gwclient.NewClient(gatewayURL, token)
|
||||||
|
|
||||||
req := &api.CreateUserRequest{
|
req := &gwapitypes.CreateUserRequest{
|
||||||
UserName: userCreateOpts.username,
|
UserName: userCreateOpts.username,
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -17,7 +17,7 @@ package cmd
|
||||||
import (
|
import (
|
||||||
"context"
|
"context"
|
||||||
|
|
||||||
"agola.io/agola/internal/services/gateway/api"
|
gwclient "agola.io/agola/services/gateway/client"
|
||||||
|
|
||||||
"github.com/spf13/cobra"
|
"github.com/spf13/cobra"
|
||||||
errors "golang.org/x/xerrors"
|
errors "golang.org/x/xerrors"
|
||||||
|
@ -52,7 +52,7 @@ func init() {
|
||||||
}
|
}
|
||||||
|
|
||||||
func userDelete(cmd *cobra.Command, args []string) error {
|
func userDelete(cmd *cobra.Command, args []string) error {
|
||||||
gwclient := api.NewClient(gatewayURL, token)
|
gwclient := gwclient.NewClient(gatewayURL, token)
|
||||||
|
|
||||||
log.Infof("deleting user %q", userDeleteOpts.username)
|
log.Infof("deleting user %q", userDeleteOpts.username)
|
||||||
if _, err := gwclient.DeleteUser(context.TODO(), userDeleteOpts.username); err != nil {
|
if _, err := gwclient.DeleteUser(context.TODO(), userDeleteOpts.username); err != nil {
|
||||||
|
|
|
@ -17,7 +17,8 @@ package cmd
|
||||||
import (
|
import (
|
||||||
"context"
|
"context"
|
||||||
|
|
||||||
"agola.io/agola/internal/services/gateway/api"
|
gwapitypes "agola.io/agola/services/gateway/api/types"
|
||||||
|
gwclient "agola.io/agola/services/gateway/client"
|
||||||
|
|
||||||
"github.com/spf13/cobra"
|
"github.com/spf13/cobra"
|
||||||
errors "golang.org/x/xerrors"
|
errors "golang.org/x/xerrors"
|
||||||
|
@ -61,9 +62,9 @@ func init() {
|
||||||
}
|
}
|
||||||
|
|
||||||
func userLACreate(cmd *cobra.Command, args []string) error {
|
func userLACreate(cmd *cobra.Command, args []string) error {
|
||||||
gwclient := api.NewClient(gatewayURL, token)
|
gwclient := gwclient.NewClient(gatewayURL, token)
|
||||||
|
|
||||||
req := &api.CreateUserLARequest{
|
req := &gwapitypes.CreateUserLARequest{
|
||||||
RemoteSourceName: userLACreateOpts.remoteSourceName,
|
RemoteSourceName: userLACreateOpts.remoteSourceName,
|
||||||
RemoteSourceLoginName: userLACreateOpts.remoteSourceLoginName,
|
RemoteSourceLoginName: userLACreateOpts.remoteSourceLoginName,
|
||||||
RemoteSourceLoginPassword: userLACreateOpts.remoteSourceLoginPassword,
|
RemoteSourceLoginPassword: userLACreateOpts.remoteSourceLoginPassword,
|
||||||
|
|
|
@ -17,7 +17,7 @@ package cmd
|
||||||
import (
|
import (
|
||||||
"context"
|
"context"
|
||||||
|
|
||||||
"agola.io/agola/internal/services/gateway/api"
|
gwclient "agola.io/agola/services/gateway/client"
|
||||||
|
|
||||||
"github.com/spf13/cobra"
|
"github.com/spf13/cobra"
|
||||||
errors "golang.org/x/xerrors"
|
errors "golang.org/x/xerrors"
|
||||||
|
@ -57,7 +57,7 @@ func init() {
|
||||||
}
|
}
|
||||||
|
|
||||||
func userLADelete(cmd *cobra.Command, args []string) error {
|
func userLADelete(cmd *cobra.Command, args []string) error {
|
||||||
gwclient := api.NewClient(gatewayURL, token)
|
gwclient := gwclient.NewClient(gatewayURL, token)
|
||||||
|
|
||||||
userName := userLADeleteOpts.userName
|
userName := userLADeleteOpts.userName
|
||||||
laID := userLADeleteOpts.laID
|
laID := userLADeleteOpts.laID
|
||||||
|
|
|
@ -18,7 +18,9 @@ import (
|
||||||
"context"
|
"context"
|
||||||
"fmt"
|
"fmt"
|
||||||
|
|
||||||
"agola.io/agola/internal/services/gateway/api"
|
gwapitypes "agola.io/agola/services/gateway/api/types"
|
||||||
|
gwclient "agola.io/agola/services/gateway/client"
|
||||||
|
|
||||||
"github.com/spf13/cobra"
|
"github.com/spf13/cobra"
|
||||||
)
|
)
|
||||||
|
|
||||||
|
@ -48,14 +50,14 @@ func init() {
|
||||||
cmdUser.AddCommand(cmdUserList)
|
cmdUser.AddCommand(cmdUserList)
|
||||||
}
|
}
|
||||||
|
|
||||||
func printUsers(users []*api.UserResponse) {
|
func printUsers(users []*gwapitypes.UserResponse) {
|
||||||
for _, user := range users {
|
for _, user := range users {
|
||||||
fmt.Printf("%s: Name: %s\n", user.ID, user.UserName)
|
fmt.Printf("%s: Name: %s\n", user.ID, user.UserName)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
func userList(cmd *cobra.Command, args []string) error {
|
func userList(cmd *cobra.Command, args []string) error {
|
||||||
gwclient := api.NewClient(gatewayURL, token)
|
gwclient := gwclient.NewClient(gatewayURL, token)
|
||||||
|
|
||||||
users, _, err := gwclient.GetUsers(context.TODO(), userListOpts.start, userListOpts.limit, false)
|
users, _, err := gwclient.GetUsers(context.TODO(), userListOpts.start, userListOpts.limit, false)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
|
|
|
@ -18,7 +18,8 @@ import (
|
||||||
"context"
|
"context"
|
||||||
"fmt"
|
"fmt"
|
||||||
|
|
||||||
"agola.io/agola/internal/services/gateway/api"
|
gwapitypes "agola.io/agola/services/gateway/api/types"
|
||||||
|
gwclient "agola.io/agola/services/gateway/client"
|
||||||
|
|
||||||
"github.com/spf13/cobra"
|
"github.com/spf13/cobra"
|
||||||
errors "golang.org/x/xerrors"
|
errors "golang.org/x/xerrors"
|
||||||
|
@ -58,9 +59,9 @@ func init() {
|
||||||
}
|
}
|
||||||
|
|
||||||
func userTokenCreate(cmd *cobra.Command, args []string) error {
|
func userTokenCreate(cmd *cobra.Command, args []string) error {
|
||||||
gwclient := api.NewClient(gatewayURL, token)
|
gwclient := gwclient.NewClient(gatewayURL, token)
|
||||||
|
|
||||||
req := &api.CreateUserTokenRequest{
|
req := &gwapitypes.CreateUserTokenRequest{
|
||||||
TokenName: userTokenCreateOpts.tokenName,
|
TokenName: userTokenCreateOpts.tokenName,
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -17,7 +17,7 @@ package cmd
|
||||||
import (
|
import (
|
||||||
"context"
|
"context"
|
||||||
|
|
||||||
"agola.io/agola/internal/services/gateway/api"
|
gwclient "agola.io/agola/services/gateway/client"
|
||||||
|
|
||||||
"github.com/spf13/cobra"
|
"github.com/spf13/cobra"
|
||||||
errors "golang.org/x/xerrors"
|
errors "golang.org/x/xerrors"
|
||||||
|
@ -57,7 +57,7 @@ func init() {
|
||||||
}
|
}
|
||||||
|
|
||||||
func userTokenDelete(cmd *cobra.Command, args []string) error {
|
func userTokenDelete(cmd *cobra.Command, args []string) error {
|
||||||
gwclient := api.NewClient(gatewayURL, token)
|
gwclient := gwclient.NewClient(gatewayURL, token)
|
||||||
|
|
||||||
userName := userTokenDeleteOpts.userName
|
userName := userTokenDeleteOpts.userName
|
||||||
tokenName := userTokenDeleteOpts.tokenName
|
tokenName := userTokenDeleteOpts.tokenName
|
||||||
|
|
|
@ -20,9 +20,9 @@ import (
|
||||||
"regexp"
|
"regexp"
|
||||||
"strings"
|
"strings"
|
||||||
|
|
||||||
"agola.io/agola/internal/common"
|
|
||||||
cstypes "agola.io/agola/internal/services/configstore/types"
|
|
||||||
"agola.io/agola/internal/util"
|
"agola.io/agola/internal/util"
|
||||||
|
cstypes "agola.io/agola/services/configstore/types"
|
||||||
|
"agola.io/agola/services/types"
|
||||||
|
|
||||||
"github.com/ghodss/yaml"
|
"github.com/ghodss/yaml"
|
||||||
"github.com/google/go-jsonnet"
|
"github.com/google/go-jsonnet"
|
||||||
|
@ -83,7 +83,7 @@ type DockerRegistryAuth struct {
|
||||||
|
|
||||||
type Runtime struct {
|
type Runtime struct {
|
||||||
Type RuntimeType `json:"type,omitempty"`
|
Type RuntimeType `json:"type,omitempty"`
|
||||||
Arch common.Arch `json:"arch,omitempty"`
|
Arch types.Arch `json:"arch,omitempty"`
|
||||||
Containers []*Container `json:"containers,omitempty"`
|
Containers []*Container `json:"containers,omitempty"`
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -702,7 +702,7 @@ func checkConfig(config *Config) error {
|
||||||
return errors.Errorf("task %q runtime: at least one container must be defined", task.Name)
|
return errors.Errorf("task %q runtime: at least one container must be defined", task.Name)
|
||||||
}
|
}
|
||||||
if r.Arch != "" {
|
if r.Arch != "" {
|
||||||
if !common.IsValidArch(r.Arch) {
|
if !types.IsValidArch(r.Arch) {
|
||||||
return errors.Errorf("task %q runtime: invalid arch %q", task.Name, r.Arch)
|
return errors.Errorf("task %q runtime: invalid arch %q", task.Name, r.Arch)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -18,8 +18,8 @@ import (
|
||||||
"fmt"
|
"fmt"
|
||||||
"testing"
|
"testing"
|
||||||
|
|
||||||
"agola.io/agola/internal/services/configstore/types"
|
|
||||||
"agola.io/agola/internal/util"
|
"agola.io/agola/internal/util"
|
||||||
|
"agola.io/agola/services/configstore/types"
|
||||||
|
|
||||||
"github.com/google/go-cmp/cmp"
|
"github.com/google/go-cmp/cmp"
|
||||||
errors "golang.org/x/xerrors"
|
errors "golang.org/x/xerrors"
|
||||||
|
|
|
@ -35,7 +35,6 @@ var (
|
||||||
tagRefPrefix = "refs/tags/"
|
tagRefPrefix = "refs/tags/"
|
||||||
)
|
)
|
||||||
|
|
||||||
// Client represents a Gogs API client.
|
|
||||||
type Client struct {
|
type Client struct {
|
||||||
url string
|
url string
|
||||||
client *http.Client
|
client *http.Client
|
||||||
|
|
|
@ -19,9 +19,9 @@ import (
|
||||||
"strings"
|
"strings"
|
||||||
|
|
||||||
"agola.io/agola/internal/config"
|
"agola.io/agola/internal/config"
|
||||||
cstypes "agola.io/agola/internal/services/configstore/types"
|
|
||||||
rstypes "agola.io/agola/internal/services/runservice/types"
|
|
||||||
"agola.io/agola/internal/util"
|
"agola.io/agola/internal/util"
|
||||||
|
cstypes "agola.io/agola/services/configstore/types"
|
||||||
|
rstypes "agola.io/agola/services/runservice/types"
|
||||||
|
|
||||||
errors "golang.org/x/xerrors"
|
errors "golang.org/x/xerrors"
|
||||||
)
|
)
|
||||||
|
|
|
@ -20,9 +20,9 @@ import (
|
||||||
"testing"
|
"testing"
|
||||||
|
|
||||||
"agola.io/agola/internal/config"
|
"agola.io/agola/internal/config"
|
||||||
cstypes "agola.io/agola/internal/services/configstore/types"
|
|
||||||
rstypes "agola.io/agola/internal/services/runservice/types"
|
|
||||||
"agola.io/agola/internal/util"
|
"agola.io/agola/internal/util"
|
||||||
|
cstypes "agola.io/agola/services/configstore/types"
|
||||||
|
rstypes "agola.io/agola/services/runservice/types"
|
||||||
|
|
||||||
"github.com/google/go-cmp/cmp"
|
"github.com/google/go-cmp/cmp"
|
||||||
errors "golang.org/x/xerrors"
|
errors "golang.org/x/xerrors"
|
||||||
|
|
|
@ -19,7 +19,7 @@ import (
|
||||||
"agola.io/agola/internal/gitsources/gitea"
|
"agola.io/agola/internal/gitsources/gitea"
|
||||||
"agola.io/agola/internal/gitsources/github"
|
"agola.io/agola/internal/gitsources/github"
|
||||||
"agola.io/agola/internal/gitsources/gitlab"
|
"agola.io/agola/internal/gitsources/gitlab"
|
||||||
cstypes "agola.io/agola/internal/services/configstore/types"
|
cstypes "agola.io/agola/services/configstore/types"
|
||||||
|
|
||||||
errors "golang.org/x/xerrors"
|
errors "golang.org/x/xerrors"
|
||||||
)
|
)
|
||||||
|
|
|
@ -15,20 +15,20 @@
|
||||||
package common
|
package common
|
||||||
|
|
||||||
import (
|
import (
|
||||||
csapi "agola.io/agola/internal/services/configstore/api"
|
|
||||||
cstypes "agola.io/agola/internal/services/configstore/types"
|
|
||||||
"agola.io/agola/internal/util"
|
"agola.io/agola/internal/util"
|
||||||
|
csapitypes "agola.io/agola/services/configstore/api/types"
|
||||||
|
cstypes "agola.io/agola/services/configstore/types"
|
||||||
)
|
)
|
||||||
|
|
||||||
func FilterOverriddenVariables(variables []*csapi.Variable) []*csapi.Variable {
|
func FilterOverriddenVariables(variables []*csapitypes.Variable) []*csapitypes.Variable {
|
||||||
variablesMap := map[string]*csapi.Variable{}
|
variablesMap := map[string]*csapitypes.Variable{}
|
||||||
for _, v := range variables {
|
for _, v := range variables {
|
||||||
if _, ok := variablesMap[v.Name]; !ok {
|
if _, ok := variablesMap[v.Name]; !ok {
|
||||||
variablesMap[v.Name] = v
|
variablesMap[v.Name] = v
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
filteredVariables := make([]*csapi.Variable, len(variablesMap))
|
filteredVariables := make([]*csapitypes.Variable, len(variablesMap))
|
||||||
i := 0
|
i := 0
|
||||||
// keep the original order
|
// keep the original order
|
||||||
for _, v := range variables {
|
for _, v := range variables {
|
||||||
|
@ -43,9 +43,9 @@ func FilterOverriddenVariables(variables []*csapi.Variable) []*csapi.Variable {
|
||||||
return filteredVariables
|
return filteredVariables
|
||||||
}
|
}
|
||||||
|
|
||||||
func GetVarValueMatchingSecret(varval cstypes.VariableValue, varParentPath string, secrets []*csapi.Secret) *csapi.Secret {
|
func GetVarValueMatchingSecret(varval cstypes.VariableValue, varParentPath string, secrets []*csapitypes.Secret) *csapitypes.Secret {
|
||||||
// get the secret value referenced by the variable, it must be a secret at the same level or a lower level
|
// get the secret value referenced by the variable, it must be a secret at the same level or a lower level
|
||||||
var secret *csapi.Secret
|
var secret *csapitypes.Secret
|
||||||
for _, s := range secrets {
|
for _, s := range secrets {
|
||||||
// we assume the root path will be the same
|
// we assume the root path will be the same
|
||||||
if s.Name != varval.SecretName {
|
if s.Name != varval.SecretName {
|
||||||
|
|
|
@ -17,84 +17,85 @@ package common
|
||||||
import (
|
import (
|
||||||
"testing"
|
"testing"
|
||||||
|
|
||||||
csapi "agola.io/agola/internal/services/configstore/api"
|
csapitypes "agola.io/agola/services/configstore/api/types"
|
||||||
cstypes "agola.io/agola/internal/services/configstore/types"
|
cstypes "agola.io/agola/services/configstore/types"
|
||||||
|
|
||||||
"github.com/google/go-cmp/cmp"
|
"github.com/google/go-cmp/cmp"
|
||||||
)
|
)
|
||||||
|
|
||||||
func TestFilterOverriddenVariables(t *testing.T) {
|
func TestFilterOverriddenVariables(t *testing.T) {
|
||||||
tests := []struct {
|
tests := []struct {
|
||||||
name string
|
name string
|
||||||
variables []*csapi.Variable
|
variables []*csapitypes.Variable
|
||||||
out []*csapi.Variable
|
out []*csapitypes.Variable
|
||||||
}{
|
}{
|
||||||
{
|
{
|
||||||
name: "test empty variables",
|
name: "test empty variables",
|
||||||
variables: []*csapi.Variable{},
|
variables: []*csapitypes.Variable{},
|
||||||
out: []*csapi.Variable{},
|
out: []*csapitypes.Variable{},
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
name: "test variable overrides",
|
name: "test variable overrides",
|
||||||
variables: []*csapi.Variable{
|
variables: []*csapitypes.Variable{
|
||||||
// variables must be in depth (from leaves to root) order as returned by the
|
// variables must be in depth (from leaves to root) order as returned by the
|
||||||
// configstore apis
|
// configstore apis
|
||||||
&csapi.Variable{
|
&csapitypes.Variable{
|
||||||
Variable: &cstypes.Variable{
|
Variable: &cstypes.Variable{
|
||||||
Name: "var04",
|
Name: "var04",
|
||||||
},
|
},
|
||||||
ParentPath: "org/org01/projectgroup02/projectgroup03/project02",
|
ParentPath: "org/org01/projectgroup02/projectgroup03/project02",
|
||||||
},
|
},
|
||||||
&csapi.Variable{
|
&csapitypes.Variable{
|
||||||
Variable: &cstypes.Variable{
|
Variable: &cstypes.Variable{
|
||||||
Name: "var03",
|
Name: "var03",
|
||||||
},
|
},
|
||||||
ParentPath: "org/org01/projectgroup01/project01",
|
ParentPath: "org/org01/projectgroup01/project01",
|
||||||
},
|
},
|
||||||
&csapi.Variable{
|
&csapitypes.Variable{
|
||||||
Variable: &cstypes.Variable{
|
Variable: &cstypes.Variable{
|
||||||
Name: "var02",
|
Name: "var02",
|
||||||
},
|
},
|
||||||
ParentPath: "org/org01/projectgroup01/project01",
|
ParentPath: "org/org01/projectgroup01/project01",
|
||||||
},
|
},
|
||||||
&csapi.Variable{
|
&csapitypes.Variable{
|
||||||
Variable: &cstypes.Variable{
|
Variable: &cstypes.Variable{
|
||||||
Name: "var02",
|
Name: "var02",
|
||||||
},
|
},
|
||||||
ParentPath: "org/org01/projectgroup01",
|
ParentPath: "org/org01/projectgroup01",
|
||||||
},
|
},
|
||||||
&csapi.Variable{
|
&csapitypes.Variable{
|
||||||
Variable: &cstypes.Variable{
|
Variable: &cstypes.Variable{
|
||||||
Name: "var01",
|
Name: "var01",
|
||||||
},
|
},
|
||||||
ParentPath: "org/org01/projectgroup01",
|
ParentPath: "org/org01/projectgroup01",
|
||||||
},
|
},
|
||||||
&csapi.Variable{
|
&csapitypes.Variable{
|
||||||
Variable: &cstypes.Variable{
|
Variable: &cstypes.Variable{
|
||||||
Name: "var01",
|
Name: "var01",
|
||||||
},
|
},
|
||||||
ParentPath: "org/org01",
|
ParentPath: "org/org01",
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
out: []*csapi.Variable{
|
out: []*csapitypes.Variable{
|
||||||
&csapi.Variable{
|
&csapitypes.Variable{
|
||||||
Variable: &cstypes.Variable{
|
Variable: &cstypes.Variable{
|
||||||
Name: "var04",
|
Name: "var04",
|
||||||
},
|
},
|
||||||
ParentPath: "org/org01/projectgroup02/projectgroup03/project02",
|
ParentPath: "org/org01/projectgroup02/projectgroup03/project02",
|
||||||
},
|
},
|
||||||
&csapi.Variable{
|
&csapitypes.Variable{
|
||||||
Variable: &cstypes.Variable{
|
Variable: &cstypes.Variable{
|
||||||
Name: "var03",
|
Name: "var03",
|
||||||
},
|
},
|
||||||
ParentPath: "org/org01/projectgroup01/project01",
|
ParentPath: "org/org01/projectgroup01/project01",
|
||||||
},
|
},
|
||||||
&csapi.Variable{
|
&csapitypes.Variable{
|
||||||
Variable: &cstypes.Variable{
|
Variable: &cstypes.Variable{
|
||||||
Name: "var02",
|
Name: "var02",
|
||||||
},
|
},
|
||||||
ParentPath: "org/org01/projectgroup01/project01",
|
ParentPath: "org/org01/projectgroup01/project01",
|
||||||
},
|
},
|
||||||
&csapi.Variable{
|
&csapitypes.Variable{
|
||||||
Variable: &cstypes.Variable{
|
Variable: &cstypes.Variable{
|
||||||
Name: "var01",
|
Name: "var01",
|
||||||
},
|
},
|
||||||
|
@ -120,8 +121,8 @@ func TestGetVarValueMatchingSecret(t *testing.T) {
|
||||||
name string
|
name string
|
||||||
varValue cstypes.VariableValue
|
varValue cstypes.VariableValue
|
||||||
varParentPath string
|
varParentPath string
|
||||||
secrets []*csapi.Secret
|
secrets []*csapitypes.Secret
|
||||||
out *csapi.Secret
|
out *csapitypes.Secret
|
||||||
}{
|
}{
|
||||||
{
|
{
|
||||||
name: "test empty secrets",
|
name: "test empty secrets",
|
||||||
|
@ -130,7 +131,7 @@ func TestGetVarValueMatchingSecret(t *testing.T) {
|
||||||
SecretVar: "secretvar01",
|
SecretVar: "secretvar01",
|
||||||
},
|
},
|
||||||
varParentPath: "org/org01/projectgroup01/project01",
|
varParentPath: "org/org01/projectgroup01/project01",
|
||||||
secrets: []*csapi.Secret{},
|
secrets: []*csapitypes.Secret{},
|
||||||
out: nil,
|
out: nil,
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
|
@ -140,8 +141,8 @@ func TestGetVarValueMatchingSecret(t *testing.T) {
|
||||||
SecretVar: "secretvar01",
|
SecretVar: "secretvar01",
|
||||||
},
|
},
|
||||||
varParentPath: "org/org01/projectgroup01/projectgroup02",
|
varParentPath: "org/org01/projectgroup01/projectgroup02",
|
||||||
secrets: []*csapi.Secret{
|
secrets: []*csapitypes.Secret{
|
||||||
&csapi.Secret{
|
&csapitypes.Secret{
|
||||||
Secret: &cstypes.Secret{
|
Secret: &cstypes.Secret{
|
||||||
Name: "secret02",
|
Name: "secret02",
|
||||||
},
|
},
|
||||||
|
@ -157,8 +158,8 @@ func TestGetVarValueMatchingSecret(t *testing.T) {
|
||||||
SecretVar: "secretvar01",
|
SecretVar: "secretvar01",
|
||||||
},
|
},
|
||||||
varParentPath: "org/org01/projectgroup01/projectgroup02",
|
varParentPath: "org/org01/projectgroup01/projectgroup02",
|
||||||
secrets: []*csapi.Secret{
|
secrets: []*csapitypes.Secret{
|
||||||
&csapi.Secret{
|
&csapitypes.Secret{
|
||||||
Secret: &cstypes.Secret{
|
Secret: &cstypes.Secret{
|
||||||
Name: "secret02",
|
Name: "secret02",
|
||||||
},
|
},
|
||||||
|
@ -174,8 +175,8 @@ func TestGetVarValueMatchingSecret(t *testing.T) {
|
||||||
SecretVar: "secretvar01",
|
SecretVar: "secretvar01",
|
||||||
},
|
},
|
||||||
varParentPath: "org/org01/projectgroup01/projectgroup02",
|
varParentPath: "org/org01/projectgroup01/projectgroup02",
|
||||||
secrets: []*csapi.Secret{
|
secrets: []*csapitypes.Secret{
|
||||||
&csapi.Secret{
|
&csapitypes.Secret{
|
||||||
Secret: &cstypes.Secret{
|
Secret: &cstypes.Secret{
|
||||||
Name: "secret01",
|
Name: "secret01",
|
||||||
},
|
},
|
||||||
|
@ -191,21 +192,21 @@ func TestGetVarValueMatchingSecret(t *testing.T) {
|
||||||
SecretVar: "secretvar01",
|
SecretVar: "secretvar01",
|
||||||
},
|
},
|
||||||
varParentPath: "org/org01/projectgroup01/projectgroup02",
|
varParentPath: "org/org01/projectgroup01/projectgroup02",
|
||||||
secrets: []*csapi.Secret{
|
secrets: []*csapitypes.Secret{
|
||||||
&csapi.Secret{
|
&csapitypes.Secret{
|
||||||
Secret: &cstypes.Secret{
|
Secret: &cstypes.Secret{
|
||||||
Name: "secret01",
|
Name: "secret01",
|
||||||
},
|
},
|
||||||
ParentPath: "org/org01/projectgroup01/projectgroup02/project01",
|
ParentPath: "org/org01/projectgroup01/projectgroup02/project01",
|
||||||
},
|
},
|
||||||
&csapi.Secret{
|
&csapitypes.Secret{
|
||||||
Secret: &cstypes.Secret{
|
Secret: &cstypes.Secret{
|
||||||
Name: "secret01",
|
Name: "secret01",
|
||||||
},
|
},
|
||||||
ParentPath: "org/org01/projectgroup01/projectgroup02",
|
ParentPath: "org/org01/projectgroup01/projectgroup02",
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
out: &csapi.Secret{
|
out: &csapitypes.Secret{
|
||||||
Secret: &cstypes.Secret{
|
Secret: &cstypes.Secret{
|
||||||
Name: "secret01",
|
Name: "secret01",
|
||||||
},
|
},
|
||||||
|
@ -219,15 +220,15 @@ func TestGetVarValueMatchingSecret(t *testing.T) {
|
||||||
SecretVar: "secretvar01",
|
SecretVar: "secretvar01",
|
||||||
},
|
},
|
||||||
varParentPath: "org/org01/projectgroup01/projectgroup02",
|
varParentPath: "org/org01/projectgroup01/projectgroup02",
|
||||||
secrets: []*csapi.Secret{
|
secrets: []*csapitypes.Secret{
|
||||||
&csapi.Secret{
|
&csapitypes.Secret{
|
||||||
Secret: &cstypes.Secret{
|
Secret: &cstypes.Secret{
|
||||||
Name: "secret01",
|
Name: "secret01",
|
||||||
},
|
},
|
||||||
ParentPath: "org/org01/projectgroup01",
|
ParentPath: "org/org01/projectgroup01",
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
out: &csapi.Secret{
|
out: &csapitypes.Secret{
|
||||||
Secret: &cstypes.Secret{
|
Secret: &cstypes.Secret{
|
||||||
Name: "secret01",
|
Name: "secret01",
|
||||||
},
|
},
|
||||||
|
@ -241,29 +242,29 @@ func TestGetVarValueMatchingSecret(t *testing.T) {
|
||||||
SecretVar: "secretvar01",
|
SecretVar: "secretvar01",
|
||||||
},
|
},
|
||||||
varParentPath: "org/org01/projectgroup01/projectgroup02",
|
varParentPath: "org/org01/projectgroup01/projectgroup02",
|
||||||
secrets: []*csapi.Secret{
|
secrets: []*csapitypes.Secret{
|
||||||
// secrets must be in depth (from leaves to root) order as returned by the
|
// secrets must be in depth (from leaves to root) order as returned by the
|
||||||
// configstore apis
|
// configstore apis
|
||||||
&csapi.Secret{
|
&csapitypes.Secret{
|
||||||
Secret: &cstypes.Secret{
|
Secret: &cstypes.Secret{
|
||||||
Name: "secret01",
|
Name: "secret01",
|
||||||
},
|
},
|
||||||
ParentPath: "org/org01/projectgroup01/projectgroup02/project01",
|
ParentPath: "org/org01/projectgroup01/projectgroup02/project01",
|
||||||
},
|
},
|
||||||
&csapi.Secret{
|
&csapitypes.Secret{
|
||||||
Secret: &cstypes.Secret{
|
Secret: &cstypes.Secret{
|
||||||
Name: "secret01",
|
Name: "secret01",
|
||||||
},
|
},
|
||||||
ParentPath: "org/org01/projectgroup01/projectgroup02",
|
ParentPath: "org/org01/projectgroup01/projectgroup02",
|
||||||
},
|
},
|
||||||
&csapi.Secret{
|
&csapitypes.Secret{
|
||||||
Secret: &cstypes.Secret{
|
Secret: &cstypes.Secret{
|
||||||
Name: "secret01",
|
Name: "secret01",
|
||||||
},
|
},
|
||||||
ParentPath: "org/org01/projectgroup01",
|
ParentPath: "org/org01/projectgroup01",
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
out: &csapi.Secret{
|
out: &csapitypes.Secret{
|
||||||
Secret: &cstypes.Secret{
|
Secret: &cstypes.Secret{
|
||||||
Name: "secret01",
|
Name: "secret01",
|
||||||
},
|
},
|
||||||
|
|
|
@ -23,8 +23,8 @@ import (
|
||||||
"agola.io/agola/internal/datamanager"
|
"agola.io/agola/internal/datamanager"
|
||||||
"agola.io/agola/internal/db"
|
"agola.io/agola/internal/db"
|
||||||
"agola.io/agola/internal/services/configstore/readdb"
|
"agola.io/agola/internal/services/configstore/readdb"
|
||||||
"agola.io/agola/internal/services/configstore/types"
|
|
||||||
"agola.io/agola/internal/util"
|
"agola.io/agola/internal/util"
|
||||||
|
"agola.io/agola/services/configstore/types"
|
||||||
|
|
||||||
uuid "github.com/satori/go.uuid"
|
uuid "github.com/satori/go.uuid"
|
||||||
errors "golang.org/x/xerrors"
|
errors "golang.org/x/xerrors"
|
||||||
|
|
|
@ -21,8 +21,8 @@ import (
|
||||||
|
|
||||||
"agola.io/agola/internal/datamanager"
|
"agola.io/agola/internal/datamanager"
|
||||||
"agola.io/agola/internal/db"
|
"agola.io/agola/internal/db"
|
||||||
"agola.io/agola/internal/services/configstore/types"
|
|
||||||
"agola.io/agola/internal/util"
|
"agola.io/agola/internal/util"
|
||||||
|
"agola.io/agola/services/configstore/types"
|
||||||
|
|
||||||
uuid "github.com/satori/go.uuid"
|
uuid "github.com/satori/go.uuid"
|
||||||
errors "golang.org/x/xerrors"
|
errors "golang.org/x/xerrors"
|
||||||
|
|
|
@ -21,8 +21,8 @@ import (
|
||||||
|
|
||||||
"agola.io/agola/internal/datamanager"
|
"agola.io/agola/internal/datamanager"
|
||||||
"agola.io/agola/internal/db"
|
"agola.io/agola/internal/db"
|
||||||
"agola.io/agola/internal/services/configstore/types"
|
|
||||||
"agola.io/agola/internal/util"
|
"agola.io/agola/internal/util"
|
||||||
|
"agola.io/agola/services/configstore/types"
|
||||||
|
|
||||||
uuid "github.com/satori/go.uuid"
|
uuid "github.com/satori/go.uuid"
|
||||||
errors "golang.org/x/xerrors"
|
errors "golang.org/x/xerrors"
|
||||||
|
|
|
@ -20,8 +20,8 @@ import (
|
||||||
|
|
||||||
"agola.io/agola/internal/datamanager"
|
"agola.io/agola/internal/datamanager"
|
||||||
"agola.io/agola/internal/db"
|
"agola.io/agola/internal/db"
|
||||||
"agola.io/agola/internal/services/configstore/types"
|
|
||||||
"agola.io/agola/internal/util"
|
"agola.io/agola/internal/util"
|
||||||
|
"agola.io/agola/services/configstore/types"
|
||||||
|
|
||||||
uuid "github.com/satori/go.uuid"
|
uuid "github.com/satori/go.uuid"
|
||||||
errors "golang.org/x/xerrors"
|
errors "golang.org/x/xerrors"
|
||||||
|
|
|
@ -20,8 +20,8 @@ import (
|
||||||
|
|
||||||
"agola.io/agola/internal/datamanager"
|
"agola.io/agola/internal/datamanager"
|
||||||
"agola.io/agola/internal/db"
|
"agola.io/agola/internal/db"
|
||||||
"agola.io/agola/internal/services/configstore/types"
|
|
||||||
"agola.io/agola/internal/util"
|
"agola.io/agola/internal/util"
|
||||||
|
"agola.io/agola/services/configstore/types"
|
||||||
|
|
||||||
uuid "github.com/satori/go.uuid"
|
uuid "github.com/satori/go.uuid"
|
||||||
errors "golang.org/x/xerrors"
|
errors "golang.org/x/xerrors"
|
||||||
|
|
|
@ -22,8 +22,8 @@ import (
|
||||||
"agola.io/agola/internal/datamanager"
|
"agola.io/agola/internal/datamanager"
|
||||||
"agola.io/agola/internal/db"
|
"agola.io/agola/internal/db"
|
||||||
"agola.io/agola/internal/services/configstore/readdb"
|
"agola.io/agola/internal/services/configstore/readdb"
|
||||||
"agola.io/agola/internal/services/configstore/types"
|
|
||||||
"agola.io/agola/internal/util"
|
"agola.io/agola/internal/util"
|
||||||
|
"agola.io/agola/services/configstore/types"
|
||||||
|
|
||||||
uuid "github.com/satori/go.uuid"
|
uuid "github.com/satori/go.uuid"
|
||||||
errors "golang.org/x/xerrors"
|
errors "golang.org/x/xerrors"
|
||||||
|
|
|
@ -20,8 +20,8 @@ import (
|
||||||
|
|
||||||
"agola.io/agola/internal/datamanager"
|
"agola.io/agola/internal/datamanager"
|
||||||
"agola.io/agola/internal/db"
|
"agola.io/agola/internal/db"
|
||||||
"agola.io/agola/internal/services/configstore/types"
|
|
||||||
"agola.io/agola/internal/util"
|
"agola.io/agola/internal/util"
|
||||||
|
"agola.io/agola/services/configstore/types"
|
||||||
|
|
||||||
uuid "github.com/satori/go.uuid"
|
uuid "github.com/satori/go.uuid"
|
||||||
errors "golang.org/x/xerrors"
|
errors "golang.org/x/xerrors"
|
||||||
|
|
|
@ -19,8 +19,9 @@ import (
|
||||||
"net/http"
|
"net/http"
|
||||||
"net/url"
|
"net/url"
|
||||||
|
|
||||||
"agola.io/agola/internal/services/configstore/types"
|
|
||||||
"agola.io/agola/internal/util"
|
"agola.io/agola/internal/util"
|
||||||
|
"agola.io/agola/services/configstore/types"
|
||||||
|
|
||||||
"github.com/gorilla/mux"
|
"github.com/gorilla/mux"
|
||||||
errors "golang.org/x/xerrors"
|
errors "golang.org/x/xerrors"
|
||||||
)
|
)
|
||||||
|
|
|
@ -22,12 +22,13 @@ import (
|
||||||
"agola.io/agola/internal/db"
|
"agola.io/agola/internal/db"
|
||||||
"agola.io/agola/internal/services/configstore/action"
|
"agola.io/agola/internal/services/configstore/action"
|
||||||
"agola.io/agola/internal/services/configstore/readdb"
|
"agola.io/agola/internal/services/configstore/readdb"
|
||||||
"agola.io/agola/internal/services/configstore/types"
|
|
||||||
"agola.io/agola/internal/util"
|
"agola.io/agola/internal/util"
|
||||||
errors "golang.org/x/xerrors"
|
csapitypes "agola.io/agola/services/configstore/api/types"
|
||||||
|
"agola.io/agola/services/configstore/types"
|
||||||
|
|
||||||
"github.com/gorilla/mux"
|
"github.com/gorilla/mux"
|
||||||
"go.uber.org/zap"
|
"go.uber.org/zap"
|
||||||
|
errors "golang.org/x/xerrors"
|
||||||
)
|
)
|
||||||
|
|
||||||
type OrgHandler struct {
|
type OrgHandler struct {
|
||||||
|
@ -180,10 +181,6 @@ func (h *OrgsHandler) ServeHTTP(w http.ResponseWriter, r *http.Request) {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
type AddOrgMemberRequest struct {
|
|
||||||
Role types.MemberRole
|
|
||||||
}
|
|
||||||
|
|
||||||
type AddOrgMemberHandler struct {
|
type AddOrgMemberHandler struct {
|
||||||
log *zap.SugaredLogger
|
log *zap.SugaredLogger
|
||||||
ah *action.ActionHandler
|
ah *action.ActionHandler
|
||||||
|
@ -200,7 +197,7 @@ func (h *AddOrgMemberHandler) ServeHTTP(w http.ResponseWriter, r *http.Request)
|
||||||
orgRef := vars["orgref"]
|
orgRef := vars["orgref"]
|
||||||
userRef := vars["userref"]
|
userRef := vars["userref"]
|
||||||
|
|
||||||
var req AddOrgMemberRequest
|
var req csapitypes.AddOrgMemberRequest
|
||||||
d := json.NewDecoder(r.Body)
|
d := json.NewDecoder(r.Body)
|
||||||
if err := d.Decode(&req); err != nil {
|
if err := d.Decode(&req); err != nil {
|
||||||
httpError(w, util.NewErrBadRequest(err))
|
httpError(w, util.NewErrBadRequest(err))
|
||||||
|
@ -245,13 +242,8 @@ func (h *RemoveOrgMemberHandler) ServeHTTP(w http.ResponseWriter, r *http.Reques
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
type OrgMemberResponse struct {
|
func orgMemberResponse(orgUser *action.OrgMemberResponse) *csapitypes.OrgMemberResponse {
|
||||||
User *types.User
|
return &csapitypes.OrgMemberResponse{
|
||||||
Role types.MemberRole
|
|
||||||
}
|
|
||||||
|
|
||||||
func orgMemberResponse(orgUser *action.OrgMemberResponse) *OrgMemberResponse {
|
|
||||||
return &OrgMemberResponse{
|
|
||||||
User: orgUser.User,
|
User: orgUser.User,
|
||||||
Role: orgUser.Role,
|
Role: orgUser.Role,
|
||||||
}
|
}
|
||||||
|
@ -277,7 +269,7 @@ func (h *OrgMembersHandler) ServeHTTP(w http.ResponseWriter, r *http.Request) {
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
res := make([]*OrgMemberResponse, len(orgUsers))
|
res := make([]*csapitypes.OrgMemberResponse, len(orgUsers))
|
||||||
for i, orgUser := range orgUsers {
|
for i, orgUser := range orgUsers {
|
||||||
res[i] = orgMemberResponse(orgUser)
|
res[i] = orgMemberResponse(orgUser)
|
||||||
}
|
}
|
||||||
|
|
|
@ -24,27 +24,16 @@ import (
|
||||||
"agola.io/agola/internal/db"
|
"agola.io/agola/internal/db"
|
||||||
"agola.io/agola/internal/services/configstore/action"
|
"agola.io/agola/internal/services/configstore/action"
|
||||||
"agola.io/agola/internal/services/configstore/readdb"
|
"agola.io/agola/internal/services/configstore/readdb"
|
||||||
"agola.io/agola/internal/services/configstore/types"
|
|
||||||
"agola.io/agola/internal/util"
|
"agola.io/agola/internal/util"
|
||||||
errors "golang.org/x/xerrors"
|
csapitypes "agola.io/agola/services/configstore/api/types"
|
||||||
|
"agola.io/agola/services/configstore/types"
|
||||||
|
|
||||||
"github.com/gorilla/mux"
|
"github.com/gorilla/mux"
|
||||||
"go.uber.org/zap"
|
"go.uber.org/zap"
|
||||||
|
errors "golang.org/x/xerrors"
|
||||||
)
|
)
|
||||||
|
|
||||||
// Project augments types.Project with dynamic data
|
func projectResponse(ctx context.Context, readDB *readdb.ReadDB, project *types.Project) (*csapitypes.Project, error) {
|
||||||
type Project struct {
|
|
||||||
*types.Project
|
|
||||||
|
|
||||||
// dynamic data
|
|
||||||
OwnerType types.ConfigType
|
|
||||||
OwnerID string
|
|
||||||
Path string
|
|
||||||
ParentPath string
|
|
||||||
GlobalVisibility types.Visibility
|
|
||||||
}
|
|
||||||
|
|
||||||
func projectResponse(ctx context.Context, readDB *readdb.ReadDB, project *types.Project) (*Project, error) {
|
|
||||||
r, err := projectsResponse(ctx, readDB, []*types.Project{project})
|
r, err := projectsResponse(ctx, readDB, []*types.Project{project})
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, err
|
return nil, err
|
||||||
|
@ -52,8 +41,8 @@ func projectResponse(ctx context.Context, readDB *readdb.ReadDB, project *types.
|
||||||
return r[0], nil
|
return r[0], nil
|
||||||
}
|
}
|
||||||
|
|
||||||
func projectsResponse(ctx context.Context, readDB *readdb.ReadDB, projects []*types.Project) ([]*Project, error) {
|
func projectsResponse(ctx context.Context, readDB *readdb.ReadDB, projects []*types.Project) ([]*csapitypes.Project, error) {
|
||||||
resProjects := make([]*Project, len(projects))
|
resProjects := make([]*csapitypes.Project, len(projects))
|
||||||
|
|
||||||
err := readDB.Do(ctx, func(tx *db.Tx) error {
|
err := readDB.Do(ctx, func(tx *db.Tx) error {
|
||||||
for i, project := range projects {
|
for i, project := range projects {
|
||||||
|
@ -75,7 +64,7 @@ func projectsResponse(ctx context.Context, readDB *readdb.ReadDB, projects []*ty
|
||||||
|
|
||||||
// we calculate the path here from parent path since the db could not yet be
|
// we calculate the path here from parent path since the db could not yet be
|
||||||
// updated on create
|
// updated on create
|
||||||
resProjects[i] = &Project{
|
resProjects[i] = &csapitypes.Project{
|
||||||
Project: project,
|
Project: project,
|
||||||
OwnerType: ownerType,
|
OwnerType: ownerType,
|
||||||
OwnerID: ownerID,
|
OwnerID: ownerID,
|
||||||
|
|
|
@ -24,27 +24,16 @@ import (
|
||||||
"agola.io/agola/internal/db"
|
"agola.io/agola/internal/db"
|
||||||
"agola.io/agola/internal/services/configstore/action"
|
"agola.io/agola/internal/services/configstore/action"
|
||||||
"agola.io/agola/internal/services/configstore/readdb"
|
"agola.io/agola/internal/services/configstore/readdb"
|
||||||
"agola.io/agola/internal/services/configstore/types"
|
|
||||||
"agola.io/agola/internal/util"
|
"agola.io/agola/internal/util"
|
||||||
errors "golang.org/x/xerrors"
|
csapitypes "agola.io/agola/services/configstore/api/types"
|
||||||
|
"agola.io/agola/services/configstore/types"
|
||||||
|
|
||||||
"github.com/gorilla/mux"
|
"github.com/gorilla/mux"
|
||||||
"go.uber.org/zap"
|
"go.uber.org/zap"
|
||||||
|
errors "golang.org/x/xerrors"
|
||||||
)
|
)
|
||||||
|
|
||||||
// ProjectGroup augments types.ProjectGroup with dynamic data
|
func projectGroupResponse(ctx context.Context, readDB *readdb.ReadDB, projectGroup *types.ProjectGroup) (*csapitypes.ProjectGroup, error) {
|
||||||
type ProjectGroup struct {
|
|
||||||
*types.ProjectGroup
|
|
||||||
|
|
||||||
// dynamic data
|
|
||||||
OwnerType types.ConfigType
|
|
||||||
OwnerID string
|
|
||||||
Path string
|
|
||||||
ParentPath string
|
|
||||||
GlobalVisibility types.Visibility
|
|
||||||
}
|
|
||||||
|
|
||||||
func projectGroupResponse(ctx context.Context, readDB *readdb.ReadDB, projectGroup *types.ProjectGroup) (*ProjectGroup, error) {
|
|
||||||
r, err := projectGroupsResponse(ctx, readDB, []*types.ProjectGroup{projectGroup})
|
r, err := projectGroupsResponse(ctx, readDB, []*types.ProjectGroup{projectGroup})
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, err
|
return nil, err
|
||||||
|
@ -52,8 +41,8 @@ func projectGroupResponse(ctx context.Context, readDB *readdb.ReadDB, projectGro
|
||||||
return r[0], nil
|
return r[0], nil
|
||||||
}
|
}
|
||||||
|
|
||||||
func projectGroupsResponse(ctx context.Context, readDB *readdb.ReadDB, projectGroups []*types.ProjectGroup) ([]*ProjectGroup, error) {
|
func projectGroupsResponse(ctx context.Context, readDB *readdb.ReadDB, projectGroups []*types.ProjectGroup) ([]*csapitypes.ProjectGroup, error) {
|
||||||
resProjectGroups := make([]*ProjectGroup, len(projectGroups))
|
resProjectGroups := make([]*csapitypes.ProjectGroup, len(projectGroups))
|
||||||
|
|
||||||
err := readDB.Do(ctx, func(tx *db.Tx) error {
|
err := readDB.Do(ctx, func(tx *db.Tx) error {
|
||||||
for i, projectGroup := range projectGroups {
|
for i, projectGroup := range projectGroups {
|
||||||
|
@ -75,7 +64,7 @@ func projectGroupsResponse(ctx context.Context, readDB *readdb.ReadDB, projectGr
|
||||||
|
|
||||||
// we calculate the path here from parent path since the db could not yet be
|
// we calculate the path here from parent path since the db could not yet be
|
||||||
// updated on create
|
// updated on create
|
||||||
resProjectGroups[i] = &ProjectGroup{
|
resProjectGroups[i] = &csapitypes.ProjectGroup{
|
||||||
ProjectGroup: projectGroup,
|
ProjectGroup: projectGroup,
|
||||||
OwnerType: ownerType,
|
OwnerType: ownerType,
|
||||||
OwnerID: ownerID,
|
OwnerID: ownerID,
|
||||||
|
|
|
@ -22,12 +22,12 @@ import (
|
||||||
"agola.io/agola/internal/db"
|
"agola.io/agola/internal/db"
|
||||||
"agola.io/agola/internal/services/configstore/action"
|
"agola.io/agola/internal/services/configstore/action"
|
||||||
"agola.io/agola/internal/services/configstore/readdb"
|
"agola.io/agola/internal/services/configstore/readdb"
|
||||||
"agola.io/agola/internal/services/configstore/types"
|
|
||||||
"agola.io/agola/internal/util"
|
"agola.io/agola/internal/util"
|
||||||
errors "golang.org/x/xerrors"
|
"agola.io/agola/services/configstore/types"
|
||||||
|
|
||||||
"github.com/gorilla/mux"
|
"github.com/gorilla/mux"
|
||||||
"go.uber.org/zap"
|
"go.uber.org/zap"
|
||||||
|
errors "golang.org/x/xerrors"
|
||||||
)
|
)
|
||||||
|
|
||||||
type RemoteSourceHandler struct {
|
type RemoteSourceHandler struct {
|
||||||
|
|
|
@ -21,21 +21,14 @@ import (
|
||||||
"agola.io/agola/internal/db"
|
"agola.io/agola/internal/db"
|
||||||
"agola.io/agola/internal/services/configstore/action"
|
"agola.io/agola/internal/services/configstore/action"
|
||||||
"agola.io/agola/internal/services/configstore/readdb"
|
"agola.io/agola/internal/services/configstore/readdb"
|
||||||
"agola.io/agola/internal/services/configstore/types"
|
|
||||||
"agola.io/agola/internal/util"
|
"agola.io/agola/internal/util"
|
||||||
|
csapitypes "agola.io/agola/services/configstore/api/types"
|
||||||
|
"agola.io/agola/services/configstore/types"
|
||||||
|
|
||||||
"github.com/gorilla/mux"
|
"github.com/gorilla/mux"
|
||||||
"go.uber.org/zap"
|
"go.uber.org/zap"
|
||||||
)
|
)
|
||||||
|
|
||||||
// Secret augments types.Secret with dynamic data
|
|
||||||
type Secret struct {
|
|
||||||
*types.Secret
|
|
||||||
|
|
||||||
// dynamic data
|
|
||||||
ParentPath string
|
|
||||||
}
|
|
||||||
|
|
||||||
type SecretHandler struct {
|
type SecretHandler struct {
|
||||||
log *zap.SugaredLogger
|
log *zap.SugaredLogger
|
||||||
ah *action.ActionHandler
|
ah *action.ActionHandler
|
||||||
|
@ -89,9 +82,9 @@ func (h *SecretsHandler) ServeHTTP(w http.ResponseWriter, r *http.Request) {
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
resSecrets := make([]*Secret, len(secrets))
|
resSecrets := make([]*csapitypes.Secret, len(secrets))
|
||||||
for i, s := range secrets {
|
for i, s := range secrets {
|
||||||
resSecrets[i] = &Secret{Secret: s}
|
resSecrets[i] = &csapitypes.Secret{Secret: s}
|
||||||
}
|
}
|
||||||
|
|
||||||
err = h.readDB.Do(ctx, func(tx *db.Tx) error {
|
err = h.readDB.Do(ctx, func(tx *db.Tx) error {
|
||||||
|
|
|
@ -18,17 +18,17 @@ import (
|
||||||
"encoding/json"
|
"encoding/json"
|
||||||
"net/http"
|
"net/http"
|
||||||
"strconv"
|
"strconv"
|
||||||
"time"
|
|
||||||
|
|
||||||
"agola.io/agola/internal/db"
|
"agola.io/agola/internal/db"
|
||||||
action "agola.io/agola/internal/services/configstore/action"
|
action "agola.io/agola/internal/services/configstore/action"
|
||||||
"agola.io/agola/internal/services/configstore/readdb"
|
"agola.io/agola/internal/services/configstore/readdb"
|
||||||
"agola.io/agola/internal/services/configstore/types"
|
|
||||||
"agola.io/agola/internal/util"
|
"agola.io/agola/internal/util"
|
||||||
errors "golang.org/x/xerrors"
|
csapitypes "agola.io/agola/services/configstore/api/types"
|
||||||
|
"agola.io/agola/services/configstore/types"
|
||||||
|
|
||||||
"github.com/gorilla/mux"
|
"github.com/gorilla/mux"
|
||||||
"go.uber.org/zap"
|
"go.uber.org/zap"
|
||||||
|
errors "golang.org/x/xerrors"
|
||||||
)
|
)
|
||||||
|
|
||||||
type UserHandler struct {
|
type UserHandler struct {
|
||||||
|
@ -67,12 +67,6 @@ func (h *UserHandler) ServeHTTP(w http.ResponseWriter, r *http.Request) {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
type CreateUserRequest struct {
|
|
||||||
UserName string `json:"user_name"`
|
|
||||||
|
|
||||||
CreateUserLARequest *CreateUserLARequest `json:"create_user_la_request"`
|
|
||||||
}
|
|
||||||
|
|
||||||
type CreateUserHandler struct {
|
type CreateUserHandler struct {
|
||||||
log *zap.SugaredLogger
|
log *zap.SugaredLogger
|
||||||
ah *action.ActionHandler
|
ah *action.ActionHandler
|
||||||
|
@ -85,7 +79,7 @@ func NewCreateUserHandler(logger *zap.Logger, ah *action.ActionHandler) *CreateU
|
||||||
func (h *CreateUserHandler) ServeHTTP(w http.ResponseWriter, r *http.Request) {
|
func (h *CreateUserHandler) ServeHTTP(w http.ResponseWriter, r *http.Request) {
|
||||||
ctx := r.Context()
|
ctx := r.Context()
|
||||||
|
|
||||||
var req *CreateUserRequest
|
var req *csapitypes.CreateUserRequest
|
||||||
d := json.NewDecoder(r.Body)
|
d := json.NewDecoder(r.Body)
|
||||||
if err := d.Decode(&req); err != nil {
|
if err := d.Decode(&req); err != nil {
|
||||||
httpError(w, util.NewErrBadRequest(err))
|
httpError(w, util.NewErrBadRequest(err))
|
||||||
|
@ -118,10 +112,6 @@ func (h *CreateUserHandler) ServeHTTP(w http.ResponseWriter, r *http.Request) {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
type UpdateUserRequest struct {
|
|
||||||
UserName string `json:"user_name"`
|
|
||||||
}
|
|
||||||
|
|
||||||
type UpdateUserHandler struct {
|
type UpdateUserHandler struct {
|
||||||
log *zap.SugaredLogger
|
log *zap.SugaredLogger
|
||||||
ah *action.ActionHandler
|
ah *action.ActionHandler
|
||||||
|
@ -137,7 +127,7 @@ func (h *UpdateUserHandler) ServeHTTP(w http.ResponseWriter, r *http.Request) {
|
||||||
vars := mux.Vars(r)
|
vars := mux.Vars(r)
|
||||||
userRef := vars["userref"]
|
userRef := vars["userref"]
|
||||||
|
|
||||||
var req *UpdateUserRequest
|
var req *csapitypes.UpdateUserRequest
|
||||||
d := json.NewDecoder(r.Body)
|
d := json.NewDecoder(r.Body)
|
||||||
if err := d.Decode(&req); err != nil {
|
if err := d.Decode(&req); err != nil {
|
||||||
httpError(w, util.NewErrBadRequest(err))
|
httpError(w, util.NewErrBadRequest(err))
|
||||||
|
@ -305,16 +295,6 @@ func (h *UsersHandler) ServeHTTP(w http.ResponseWriter, r *http.Request) {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
type CreateUserLARequest struct {
|
|
||||||
RemoteSourceName string `json:"remote_source_name"`
|
|
||||||
RemoteUserID string `json:"remote_user_id"`
|
|
||||||
RemoteUserName string `json:"remote_user_name"`
|
|
||||||
UserAccessToken string `json:"user_access_token"`
|
|
||||||
Oauth2AccessToken string `json:"oauth2_access_token"`
|
|
||||||
Oauth2RefreshToken string `json:"oauth2_refresh_token"`
|
|
||||||
Oauth2AccessTokenExpiresAt time.Time `json:"oauth_2_access_token_expires_at"`
|
|
||||||
}
|
|
||||||
|
|
||||||
type CreateUserLAHandler struct {
|
type CreateUserLAHandler struct {
|
||||||
log *zap.SugaredLogger
|
log *zap.SugaredLogger
|
||||||
ah *action.ActionHandler
|
ah *action.ActionHandler
|
||||||
|
@ -329,7 +309,7 @@ func (h *CreateUserLAHandler) ServeHTTP(w http.ResponseWriter, r *http.Request)
|
||||||
vars := mux.Vars(r)
|
vars := mux.Vars(r)
|
||||||
userRef := vars["userref"]
|
userRef := vars["userref"]
|
||||||
|
|
||||||
var req CreateUserLARequest
|
var req csapitypes.CreateUserLARequest
|
||||||
d := json.NewDecoder(r.Body)
|
d := json.NewDecoder(r.Body)
|
||||||
if err := d.Decode(&req); err != nil {
|
if err := d.Decode(&req); err != nil {
|
||||||
httpError(w, util.NewErrBadRequest(err))
|
httpError(w, util.NewErrBadRequest(err))
|
||||||
|
@ -381,15 +361,6 @@ func (h *DeleteUserLAHandler) ServeHTTP(w http.ResponseWriter, r *http.Request)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
type UpdateUserLARequest struct {
|
|
||||||
RemoteUserID string `json:"remote_user_id"`
|
|
||||||
RemoteUserName string `json:"remote_user_name"`
|
|
||||||
UserAccessToken string `json:"user_access_token"`
|
|
||||||
Oauth2AccessToken string `json:"oauth2_access_token"`
|
|
||||||
Oauth2RefreshToken string `json:"oauth2_refresh_token"`
|
|
||||||
Oauth2AccessTokenExpiresAt time.Time `json:"oauth_2_access_token_expires_at"`
|
|
||||||
}
|
|
||||||
|
|
||||||
type UpdateUserLAHandler struct {
|
type UpdateUserLAHandler struct {
|
||||||
log *zap.SugaredLogger
|
log *zap.SugaredLogger
|
||||||
ah *action.ActionHandler
|
ah *action.ActionHandler
|
||||||
|
@ -405,7 +376,7 @@ func (h *UpdateUserLAHandler) ServeHTTP(w http.ResponseWriter, r *http.Request)
|
||||||
userRef := vars["userref"]
|
userRef := vars["userref"]
|
||||||
linkedAccountID := vars["laid"]
|
linkedAccountID := vars["laid"]
|
||||||
|
|
||||||
var req UpdateUserLARequest
|
var req csapitypes.UpdateUserLARequest
|
||||||
d := json.NewDecoder(r.Body)
|
d := json.NewDecoder(r.Body)
|
||||||
if err := d.Decode(&req); err != nil {
|
if err := d.Decode(&req); err != nil {
|
||||||
httpError(w, util.NewErrBadRequest(err))
|
httpError(w, util.NewErrBadRequest(err))
|
||||||
|
@ -433,14 +404,6 @@ func (h *UpdateUserLAHandler) ServeHTTP(w http.ResponseWriter, r *http.Request)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
type CreateUserTokenRequest struct {
|
|
||||||
TokenName string `json:"token_name"`
|
|
||||||
}
|
|
||||||
|
|
||||||
type CreateUserTokenResponse struct {
|
|
||||||
Token string `json:"token"`
|
|
||||||
}
|
|
||||||
|
|
||||||
type CreateUserTokenHandler struct {
|
type CreateUserTokenHandler struct {
|
||||||
log *zap.SugaredLogger
|
log *zap.SugaredLogger
|
||||||
ah *action.ActionHandler
|
ah *action.ActionHandler
|
||||||
|
@ -455,7 +418,7 @@ func (h *CreateUserTokenHandler) ServeHTTP(w http.ResponseWriter, r *http.Reques
|
||||||
vars := mux.Vars(r)
|
vars := mux.Vars(r)
|
||||||
userRef := vars["userref"]
|
userRef := vars["userref"]
|
||||||
|
|
||||||
var req CreateUserTokenRequest
|
var req csapitypes.CreateUserTokenRequest
|
||||||
d := json.NewDecoder(r.Body)
|
d := json.NewDecoder(r.Body)
|
||||||
if err := d.Decode(&req); err != nil {
|
if err := d.Decode(&req); err != nil {
|
||||||
httpError(w, util.NewErrBadRequest(err))
|
httpError(w, util.NewErrBadRequest(err))
|
||||||
|
@ -468,7 +431,7 @@ func (h *CreateUserTokenHandler) ServeHTTP(w http.ResponseWriter, r *http.Reques
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
resp := &CreateUserTokenResponse{
|
resp := &csapitypes.CreateUserTokenResponse{
|
||||||
Token: token,
|
Token: token,
|
||||||
}
|
}
|
||||||
if err := httpResponse(w, http.StatusCreated, resp); err != nil {
|
if err := httpResponse(w, http.StatusCreated, resp); err != nil {
|
||||||
|
@ -501,13 +464,8 @@ func (h *DeleteUserTokenHandler) ServeHTTP(w http.ResponseWriter, r *http.Reques
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
type UserOrgsResponse struct {
|
func userOrgsResponse(userOrg *action.UserOrgsResponse) *csapitypes.UserOrgsResponse {
|
||||||
Organization *types.Organization
|
return &csapitypes.UserOrgsResponse{
|
||||||
Role types.MemberRole
|
|
||||||
}
|
|
||||||
|
|
||||||
func userOrgsResponse(userOrg *action.UserOrgsResponse) *UserOrgsResponse {
|
|
||||||
return &UserOrgsResponse{
|
|
||||||
Organization: userOrg.Organization,
|
Organization: userOrg.Organization,
|
||||||
Role: userOrg.Role,
|
Role: userOrg.Role,
|
||||||
}
|
}
|
||||||
|
@ -533,7 +491,7 @@ func (h *UserOrgsHandler) ServeHTTP(w http.ResponseWriter, r *http.Request) {
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
res := make([]*UserOrgsResponse, len(userOrgs))
|
res := make([]*csapitypes.UserOrgsResponse, len(userOrgs))
|
||||||
for i, userOrg := range userOrgs {
|
for i, userOrg := range userOrgs {
|
||||||
res[i] = userOrgsResponse(userOrg)
|
res[i] = userOrgsResponse(userOrg)
|
||||||
}
|
}
|
||||||
|
|
|
@ -21,21 +21,14 @@ import (
|
||||||
"agola.io/agola/internal/db"
|
"agola.io/agola/internal/db"
|
||||||
"agola.io/agola/internal/services/configstore/action"
|
"agola.io/agola/internal/services/configstore/action"
|
||||||
"agola.io/agola/internal/services/configstore/readdb"
|
"agola.io/agola/internal/services/configstore/readdb"
|
||||||
"agola.io/agola/internal/services/configstore/types"
|
|
||||||
"agola.io/agola/internal/util"
|
"agola.io/agola/internal/util"
|
||||||
|
csapitypes "agola.io/agola/services/configstore/api/types"
|
||||||
|
"agola.io/agola/services/configstore/types"
|
||||||
|
|
||||||
"github.com/gorilla/mux"
|
"github.com/gorilla/mux"
|
||||||
"go.uber.org/zap"
|
"go.uber.org/zap"
|
||||||
)
|
)
|
||||||
|
|
||||||
// Variable augments types.Variable with dynamic data
|
|
||||||
type Variable struct {
|
|
||||||
*types.Variable
|
|
||||||
|
|
||||||
// dynamic data
|
|
||||||
ParentPath string
|
|
||||||
}
|
|
||||||
|
|
||||||
type VariablesHandler struct {
|
type VariablesHandler struct {
|
||||||
log *zap.SugaredLogger
|
log *zap.SugaredLogger
|
||||||
ah *action.ActionHandler
|
ah *action.ActionHandler
|
||||||
|
@ -63,9 +56,9 @@ func (h *VariablesHandler) ServeHTTP(w http.ResponseWriter, r *http.Request) {
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
resVariables := make([]*Variable, len(variables))
|
resVariables := make([]*csapitypes.Variable, len(variables))
|
||||||
for i, v := range variables {
|
for i, v := range variables {
|
||||||
resVariables[i] = &Variable{Variable: v}
|
resVariables[i] = &csapitypes.Variable{Variable: v}
|
||||||
}
|
}
|
||||||
err = h.readDB.Do(ctx, func(tx *db.Tx) error {
|
err = h.readDB.Do(ctx, func(tx *db.Tx) error {
|
||||||
// populate parent path
|
// populate parent path
|
||||||
|
|
|
@ -32,8 +32,8 @@ import (
|
||||||
"agola.io/agola/internal/services/configstore/api"
|
"agola.io/agola/internal/services/configstore/api"
|
||||||
"agola.io/agola/internal/services/configstore/common"
|
"agola.io/agola/internal/services/configstore/common"
|
||||||
"agola.io/agola/internal/services/configstore/readdb"
|
"agola.io/agola/internal/services/configstore/readdb"
|
||||||
"agola.io/agola/internal/services/configstore/types"
|
|
||||||
"agola.io/agola/internal/util"
|
"agola.io/agola/internal/util"
|
||||||
|
"agola.io/agola/services/configstore/types"
|
||||||
|
|
||||||
"github.com/gorilla/mux"
|
"github.com/gorilla/mux"
|
||||||
etcdclientv3 "go.etcd.io/etcd/clientv3"
|
etcdclientv3 "go.etcd.io/etcd/clientv3"
|
||||||
|
|
|
@ -30,9 +30,9 @@ import (
|
||||||
"agola.io/agola/internal/db"
|
"agola.io/agola/internal/db"
|
||||||
"agola.io/agola/internal/services/config"
|
"agola.io/agola/internal/services/config"
|
||||||
action "agola.io/agola/internal/services/configstore/action"
|
action "agola.io/agola/internal/services/configstore/action"
|
||||||
"agola.io/agola/internal/services/configstore/types"
|
|
||||||
"agola.io/agola/internal/testutil"
|
"agola.io/agola/internal/testutil"
|
||||||
"agola.io/agola/internal/util"
|
"agola.io/agola/internal/util"
|
||||||
|
"agola.io/agola/services/configstore/types"
|
||||||
|
|
||||||
"github.com/google/go-cmp/cmp"
|
"github.com/google/go-cmp/cmp"
|
||||||
)
|
)
|
||||||
|
|
|
@ -20,8 +20,8 @@ import (
|
||||||
|
|
||||||
"agola.io/agola/internal/db"
|
"agola.io/agola/internal/db"
|
||||||
"agola.io/agola/internal/services/configstore/common"
|
"agola.io/agola/internal/services/configstore/common"
|
||||||
"agola.io/agola/internal/services/configstore/types"
|
|
||||||
"agola.io/agola/internal/util"
|
"agola.io/agola/internal/util"
|
||||||
|
"agola.io/agola/services/configstore/types"
|
||||||
|
|
||||||
sq "github.com/Masterminds/squirrel"
|
sq "github.com/Masterminds/squirrel"
|
||||||
errors "golang.org/x/xerrors"
|
errors "golang.org/x/xerrors"
|
||||||
|
|
|
@ -22,8 +22,8 @@ import (
|
||||||
|
|
||||||
"agola.io/agola/internal/db"
|
"agola.io/agola/internal/db"
|
||||||
"agola.io/agola/internal/services/configstore/common"
|
"agola.io/agola/internal/services/configstore/common"
|
||||||
"agola.io/agola/internal/services/configstore/types"
|
|
||||||
"agola.io/agola/internal/util"
|
"agola.io/agola/internal/util"
|
||||||
|
"agola.io/agola/services/configstore/types"
|
||||||
|
|
||||||
sq "github.com/Masterminds/squirrel"
|
sq "github.com/Masterminds/squirrel"
|
||||||
errors "golang.org/x/xerrors"
|
errors "golang.org/x/xerrors"
|
||||||
|
|
|
@ -22,8 +22,8 @@ import (
|
||||||
|
|
||||||
"agola.io/agola/internal/db"
|
"agola.io/agola/internal/db"
|
||||||
"agola.io/agola/internal/services/configstore/common"
|
"agola.io/agola/internal/services/configstore/common"
|
||||||
"agola.io/agola/internal/services/configstore/types"
|
|
||||||
"agola.io/agola/internal/util"
|
"agola.io/agola/internal/util"
|
||||||
|
"agola.io/agola/services/configstore/types"
|
||||||
|
|
||||||
sq "github.com/Masterminds/squirrel"
|
sq "github.com/Masterminds/squirrel"
|
||||||
errors "golang.org/x/xerrors"
|
errors "golang.org/x/xerrors"
|
||||||
|
|
|
@ -30,8 +30,8 @@ import (
|
||||||
"agola.io/agola/internal/objectstorage"
|
"agola.io/agola/internal/objectstorage"
|
||||||
ostypes "agola.io/agola/internal/objectstorage/types"
|
ostypes "agola.io/agola/internal/objectstorage/types"
|
||||||
"agola.io/agola/internal/sequence"
|
"agola.io/agola/internal/sequence"
|
||||||
"agola.io/agola/internal/services/configstore/types"
|
|
||||||
"agola.io/agola/internal/util"
|
"agola.io/agola/internal/util"
|
||||||
|
"agola.io/agola/services/configstore/types"
|
||||||
|
|
||||||
sq "github.com/Masterminds/squirrel"
|
sq "github.com/Masterminds/squirrel"
|
||||||
"go.uber.org/zap"
|
"go.uber.org/zap"
|
||||||
|
|
|
@ -21,8 +21,8 @@ import (
|
||||||
|
|
||||||
"agola.io/agola/internal/db"
|
"agola.io/agola/internal/db"
|
||||||
"agola.io/agola/internal/services/configstore/common"
|
"agola.io/agola/internal/services/configstore/common"
|
||||||
"agola.io/agola/internal/services/configstore/types"
|
|
||||||
"agola.io/agola/internal/util"
|
"agola.io/agola/internal/util"
|
||||||
|
"agola.io/agola/services/configstore/types"
|
||||||
|
|
||||||
sq "github.com/Masterminds/squirrel"
|
sq "github.com/Masterminds/squirrel"
|
||||||
errors "golang.org/x/xerrors"
|
errors "golang.org/x/xerrors"
|
||||||
|
|
|
@ -18,8 +18,8 @@ import (
|
||||||
"path"
|
"path"
|
||||||
|
|
||||||
"agola.io/agola/internal/db"
|
"agola.io/agola/internal/db"
|
||||||
"agola.io/agola/internal/services/configstore/types"
|
|
||||||
"agola.io/agola/internal/util"
|
"agola.io/agola/internal/util"
|
||||||
|
"agola.io/agola/services/configstore/types"
|
||||||
errors "golang.org/x/xerrors"
|
errors "golang.org/x/xerrors"
|
||||||
)
|
)
|
||||||
|
|
||||||
|
|
|
@ -19,8 +19,8 @@ import (
|
||||||
"encoding/json"
|
"encoding/json"
|
||||||
|
|
||||||
"agola.io/agola/internal/db"
|
"agola.io/agola/internal/db"
|
||||||
"agola.io/agola/internal/services/configstore/types"
|
|
||||||
"agola.io/agola/internal/util"
|
"agola.io/agola/internal/util"
|
||||||
|
"agola.io/agola/services/configstore/types"
|
||||||
|
|
||||||
sq "github.com/Masterminds/squirrel"
|
sq "github.com/Masterminds/squirrel"
|
||||||
errors "golang.org/x/xerrors"
|
errors "golang.org/x/xerrors"
|
||||||
|
|
|
@ -20,8 +20,8 @@ import (
|
||||||
|
|
||||||
"agola.io/agola/internal/db"
|
"agola.io/agola/internal/db"
|
||||||
"agola.io/agola/internal/services/configstore/common"
|
"agola.io/agola/internal/services/configstore/common"
|
||||||
"agola.io/agola/internal/services/configstore/types"
|
|
||||||
"agola.io/agola/internal/util"
|
"agola.io/agola/internal/util"
|
||||||
|
"agola.io/agola/services/configstore/types"
|
||||||
|
|
||||||
sq "github.com/Masterminds/squirrel"
|
sq "github.com/Masterminds/squirrel"
|
||||||
errors "golang.org/x/xerrors"
|
errors "golang.org/x/xerrors"
|
||||||
|
|
|
@ -19,8 +19,8 @@ import (
|
||||||
"encoding/json"
|
"encoding/json"
|
||||||
|
|
||||||
"agola.io/agola/internal/db"
|
"agola.io/agola/internal/db"
|
||||||
"agola.io/agola/internal/services/configstore/types"
|
|
||||||
"agola.io/agola/internal/util"
|
"agola.io/agola/internal/util"
|
||||||
|
"agola.io/agola/services/configstore/types"
|
||||||
|
|
||||||
sq "github.com/Masterminds/squirrel"
|
sq "github.com/Masterminds/squirrel"
|
||||||
errors "golang.org/x/xerrors"
|
errors "golang.org/x/xerrors"
|
||||||
|
|
|
@ -23,7 +23,7 @@ import (
|
||||||
"strconv"
|
"strconv"
|
||||||
"time"
|
"time"
|
||||||
|
|
||||||
"agola.io/agola/internal/services/runservice/types"
|
"agola.io/agola/services/runservice/types"
|
||||||
"go.uber.org/zap"
|
"go.uber.org/zap"
|
||||||
errors "golang.org/x/xerrors"
|
errors "golang.org/x/xerrors"
|
||||||
)
|
)
|
||||||
|
|
|
@ -28,11 +28,11 @@ import (
|
||||||
"strings"
|
"strings"
|
||||||
"time"
|
"time"
|
||||||
|
|
||||||
"agola.io/agola/internal/common"
|
|
||||||
"agola.io/agola/internal/services/executor/registry"
|
"agola.io/agola/internal/services/executor/registry"
|
||||||
|
"agola.io/agola/services/types"
|
||||||
errors "golang.org/x/xerrors"
|
errors "golang.org/x/xerrors"
|
||||||
|
|
||||||
"github.com/docker/docker/api/types"
|
dockertypes "github.com/docker/docker/api/types"
|
||||||
"github.com/docker/docker/api/types/container"
|
"github.com/docker/docker/api/types/container"
|
||||||
"github.com/docker/docker/api/types/filters"
|
"github.com/docker/docker/api/types/filters"
|
||||||
"github.com/docker/docker/client"
|
"github.com/docker/docker/client"
|
||||||
|
@ -47,7 +47,7 @@ type DockerDriver struct {
|
||||||
initVolumeHostDir string
|
initVolumeHostDir string
|
||||||
toolboxPath string
|
toolboxPath string
|
||||||
executorID string
|
executorID string
|
||||||
arch common.Arch
|
arch types.Arch
|
||||||
}
|
}
|
||||||
|
|
||||||
func NewDockerDriver(logger *zap.Logger, executorID, initVolumeHostDir, toolboxPath string) (*DockerDriver, error) {
|
func NewDockerDriver(logger *zap.Logger, executorID, initVolumeHostDir, toolboxPath string) (*DockerDriver, error) {
|
||||||
|
@ -62,7 +62,7 @@ func NewDockerDriver(logger *zap.Logger, executorID, initVolumeHostDir, toolboxP
|
||||||
initVolumeHostDir: initVolumeHostDir,
|
initVolumeHostDir: initVolumeHostDir,
|
||||||
toolboxPath: toolboxPath,
|
toolboxPath: toolboxPath,
|
||||||
executorID: executorID,
|
executorID: executorID,
|
||||||
arch: common.ArchFromString(runtime.GOARCH),
|
arch: types.ArchFromString(runtime.GOARCH),
|
||||||
}, nil
|
}, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -76,7 +76,7 @@ func (d *DockerDriver) Setup(ctx context.Context) error {
|
||||||
func (d *DockerDriver) CopyToolbox(ctx context.Context) error {
|
func (d *DockerDriver) CopyToolbox(ctx context.Context) error {
|
||||||
// by default always try to pull the image so we are sure only authorized users can fetch them
|
// by default always try to pull the image so we are sure only authorized users can fetch them
|
||||||
// see https://kubernetes.io/docs/reference/access-authn-authz/admission-controllers/#alwayspullimages
|
// see https://kubernetes.io/docs/reference/access-authn-authz/admission-controllers/#alwayspullimages
|
||||||
reader, err := d.client.ImagePull(ctx, "busybox", types.ImagePullOptions{})
|
reader, err := d.client.ImagePull(ctx, "busybox", dockertypes.ImagePullOptions{})
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
|
@ -97,7 +97,7 @@ func (d *DockerDriver) CopyToolbox(ctx context.Context) error {
|
||||||
|
|
||||||
containerID := resp.ID
|
containerID := resp.ID
|
||||||
|
|
||||||
if err := d.client.ContainerStart(ctx, containerID, types.ContainerStartOptions{}); err != nil {
|
if err := d.client.ContainerStart(ctx, containerID, dockertypes.ContainerStartOptions{}); err != nil {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -117,7 +117,7 @@ func (d *DockerDriver) CopyToolbox(ctx context.Context) error {
|
||||||
}
|
}
|
||||||
defer srcArchive.Close()
|
defer srcArchive.Close()
|
||||||
|
|
||||||
options := types.CopyToContainerOptions{
|
options := dockertypes.CopyToContainerOptions{
|
||||||
AllowOverwriteDirWithFile: false,
|
AllowOverwriteDirWithFile: false,
|
||||||
CopyUIDGID: false,
|
CopyUIDGID: false,
|
||||||
}
|
}
|
||||||
|
@ -127,14 +127,14 @@ func (d *DockerDriver) CopyToolbox(ctx context.Context) error {
|
||||||
}
|
}
|
||||||
|
|
||||||
// ignore remove error
|
// ignore remove error
|
||||||
_ = d.client.ContainerRemove(ctx, containerID, types.ContainerRemoveOptions{Force: true})
|
_ = d.client.ContainerRemove(ctx, containerID, dockertypes.ContainerRemoveOptions{Force: true})
|
||||||
|
|
||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
|
|
||||||
func (d *DockerDriver) Archs(ctx context.Context) ([]common.Arch, error) {
|
func (d *DockerDriver) Archs(ctx context.Context) ([]types.Arch, error) {
|
||||||
// since we are using the local docker driver we can return our go arch information
|
// since we are using the local docker driver we can return our go arch information
|
||||||
return []common.Arch{d.arch}, nil
|
return []types.Arch{d.arch}, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
func (d *DockerDriver) NewPod(ctx context.Context, podConfig *PodConfig, out io.Writer) (Pod, error) {
|
func (d *DockerDriver) NewPod(ctx context.Context, podConfig *PodConfig, out io.Writer) (Pod, error) {
|
||||||
|
@ -155,7 +155,7 @@ func (d *DockerDriver) NewPod(ctx context.Context, podConfig *PodConfig, out io.
|
||||||
mainContainerID = containerID
|
mainContainerID = containerID
|
||||||
}
|
}
|
||||||
|
|
||||||
if err := d.client.ContainerStart(ctx, containerID, types.ContainerStartOptions{}); err != nil {
|
if err := d.client.ContainerStart(ctx, containerID, dockertypes.ContainerStartOptions{}); err != nil {
|
||||||
return nil, err
|
return nil, err
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -171,7 +171,7 @@ func (d *DockerDriver) NewPod(ctx context.Context, podConfig *PodConfig, out io.
|
||||||
}
|
}
|
||||||
|
|
||||||
containers, err := d.client.ContainerList(ctx,
|
containers, err := d.client.ContainerList(ctx,
|
||||||
types.ContainerListOptions{
|
dockertypes.ContainerListOptions{
|
||||||
Filters: args,
|
Filters: args,
|
||||||
})
|
})
|
||||||
if err != nil {
|
if err != nil {
|
||||||
|
@ -241,7 +241,7 @@ func (d *DockerDriver) fetchImage(ctx context.Context, image string, registryCon
|
||||||
|
|
||||||
// by default always try to pull the image so we are sure only authorized users can fetch them
|
// by default always try to pull the image so we are sure only authorized users can fetch them
|
||||||
// see https://kubernetes.io/docs/reference/access-authn-authz/admission-controllers/#alwayspullimages
|
// see https://kubernetes.io/docs/reference/access-authn-authz/admission-controllers/#alwayspullimages
|
||||||
reader, err := d.client.ImagePull(ctx, image, types.ImagePullOptions{RegistryAuth: registryAuthEnc})
|
reader, err := d.client.ImagePull(ctx, image, dockertypes.ImagePullOptions{RegistryAuth: registryAuthEnc})
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
|
@ -307,7 +307,7 @@ func (d *DockerDriver) GetPods(ctx context.Context, all bool) ([]Pod, error) {
|
||||||
args := filters.NewArgs()
|
args := filters.NewArgs()
|
||||||
|
|
||||||
containers, err := d.client.ContainerList(ctx,
|
containers, err := d.client.ContainerList(ctx,
|
||||||
types.ContainerListOptions{
|
dockertypes.ContainerListOptions{
|
||||||
Filters: args,
|
Filters: args,
|
||||||
All: all,
|
All: all,
|
||||||
})
|
})
|
||||||
|
@ -401,7 +401,7 @@ type DockerPod struct {
|
||||||
|
|
||||||
type DockerContainer struct {
|
type DockerContainer struct {
|
||||||
Index int
|
Index int
|
||||||
types.Container
|
dockertypes.Container
|
||||||
}
|
}
|
||||||
|
|
||||||
type ContainerSlice []*DockerContainer
|
type ContainerSlice []*DockerContainer
|
||||||
|
@ -439,7 +439,7 @@ func (dp *DockerPod) Stop(ctx context.Context) error {
|
||||||
func (dp *DockerPod) Remove(ctx context.Context) error {
|
func (dp *DockerPod) Remove(ctx context.Context) error {
|
||||||
errs := []error{}
|
errs := []error{}
|
||||||
for _, container := range dp.containers {
|
for _, container := range dp.containers {
|
||||||
if err := dp.client.ContainerRemove(ctx, container.ID, types.ContainerRemoveOptions{Force: true}); err != nil {
|
if err := dp.client.ContainerRemove(ctx, container.ID, dockertypes.ContainerRemoveOptions{Force: true}); err != nil {
|
||||||
errs = append(errs, err)
|
errs = append(errs, err)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -451,7 +451,7 @@ func (dp *DockerPod) Remove(ctx context.Context) error {
|
||||||
|
|
||||||
type DockerContainerExec struct {
|
type DockerContainerExec struct {
|
||||||
execID string
|
execID string
|
||||||
hresp *types.HijackedResponse
|
hresp *dockertypes.HijackedResponse
|
||||||
client *client.Client
|
client *client.Client
|
||||||
endCh chan error
|
endCh chan error
|
||||||
|
|
||||||
|
@ -461,7 +461,7 @@ type DockerContainerExec struct {
|
||||||
// Stdin is a wrapped HikackedResponse implementing io.WriteCloser so users can
|
// Stdin is a wrapped HikackedResponse implementing io.WriteCloser so users can
|
||||||
// easily close stdin. Internally it will close only the write side of the conn.
|
// easily close stdin. Internally it will close only the write side of the conn.
|
||||||
type Stdin struct {
|
type Stdin struct {
|
||||||
hresp *types.HijackedResponse
|
hresp *dockertypes.HijackedResponse
|
||||||
}
|
}
|
||||||
|
|
||||||
func (s *Stdin) Write(p []byte) (int, error) {
|
func (s *Stdin) Write(p []byte) (int, error) {
|
||||||
|
@ -475,7 +475,7 @@ func (s *Stdin) Close() error {
|
||||||
func (dp *DockerPod) Exec(ctx context.Context, execConfig *ExecConfig) (ContainerExec, error) {
|
func (dp *DockerPod) Exec(ctx context.Context, execConfig *ExecConfig) (ContainerExec, error) {
|
||||||
endCh := make(chan error)
|
endCh := make(chan error)
|
||||||
|
|
||||||
dockerExecConfig := types.ExecConfig{
|
dockerExecConfig := dockertypes.ExecConfig{
|
||||||
Cmd: execConfig.Cmd,
|
Cmd: execConfig.Cmd,
|
||||||
Env: makeEnvSlice(execConfig.Env),
|
Env: makeEnvSlice(execConfig.Env),
|
||||||
Tty: execConfig.Tty,
|
Tty: execConfig.Tty,
|
||||||
|
@ -490,7 +490,7 @@ func (dp *DockerPod) Exec(ctx context.Context, execConfig *ExecConfig) (Containe
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, err
|
return nil, err
|
||||||
}
|
}
|
||||||
execStartCheck := types.ExecStartCheck{
|
execStartCheck := dockertypes.ExecStartCheck{
|
||||||
Detach: dockerExecConfig.Detach,
|
Detach: dockerExecConfig.Detach,
|
||||||
Tty: dockerExecConfig.Tty,
|
Tty: dockerExecConfig.Tty,
|
||||||
}
|
}
|
||||||
|
|
|
@ -21,8 +21,8 @@ import (
|
||||||
"os"
|
"os"
|
||||||
"path/filepath"
|
"path/filepath"
|
||||||
|
|
||||||
"agola.io/agola/internal/common"
|
|
||||||
"agola.io/agola/internal/services/executor/registry"
|
"agola.io/agola/internal/services/executor/registry"
|
||||||
|
"agola.io/agola/services/types"
|
||||||
)
|
)
|
||||||
|
|
||||||
const (
|
const (
|
||||||
|
@ -53,7 +53,7 @@ type Driver interface {
|
||||||
GetPods(ctx context.Context, all bool) ([]Pod, error)
|
GetPods(ctx context.Context, all bool) ([]Pod, error)
|
||||||
ExecutorGroup(ctx context.Context) (string, error)
|
ExecutorGroup(ctx context.Context) (string, error)
|
||||||
GetExecutors(ctx context.Context) ([]string, error)
|
GetExecutors(ctx context.Context) ([]string, error)
|
||||||
Archs(ctx context.Context) ([]common.Arch, error)
|
Archs(ctx context.Context) ([]types.Arch, error)
|
||||||
}
|
}
|
||||||
|
|
||||||
type Pod interface {
|
type Pod interface {
|
||||||
|
@ -80,7 +80,7 @@ type PodConfig struct {
|
||||||
ID string
|
ID string
|
||||||
TaskID string
|
TaskID string
|
||||||
Containers []*ContainerConfig
|
Containers []*ContainerConfig
|
||||||
Arch common.Arch
|
Arch types.Arch
|
||||||
// The container dir where the init volume will be mounted
|
// The container dir where the init volume will be mounted
|
||||||
InitVolumeDir string
|
InitVolumeDir string
|
||||||
DockerConfig *registry.DockerConfig
|
DockerConfig *registry.DockerConfig
|
||||||
|
@ -106,7 +106,7 @@ type ExecConfig struct {
|
||||||
Tty bool
|
Tty bool
|
||||||
}
|
}
|
||||||
|
|
||||||
func toolboxExecPath(toolboxDir string, arch common.Arch) (string, error) {
|
func toolboxExecPath(toolboxDir string, arch types.Arch) (string, error) {
|
||||||
toolboxPath := filepath.Join(toolboxDir, fmt.Sprintf("%s-linux-%s", toolboxPrefix, arch))
|
toolboxPath := filepath.Join(toolboxDir, fmt.Sprintf("%s-linux-%s", toolboxPrefix, arch))
|
||||||
_, err := os.Stat(toolboxPath)
|
_, err := os.Stat(toolboxPath)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
|
|
|
@ -26,8 +26,8 @@ import (
|
||||||
"strings"
|
"strings"
|
||||||
"time"
|
"time"
|
||||||
|
|
||||||
"agola.io/agola/internal/common"
|
|
||||||
"agola.io/agola/internal/util"
|
"agola.io/agola/internal/util"
|
||||||
|
"agola.io/agola/services/types"
|
||||||
|
|
||||||
"github.com/docker/docker/pkg/archive"
|
"github.com/docker/docker/pkg/archive"
|
||||||
uuid "github.com/satori/go.uuid"
|
uuid "github.com/satori/go.uuid"
|
||||||
|
@ -248,16 +248,16 @@ func (d *K8sDriver) Setup(ctx context.Context) error {
|
||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
|
|
||||||
func (d *K8sDriver) Archs(ctx context.Context) ([]common.Arch, error) {
|
func (d *K8sDriver) Archs(ctx context.Context) ([]types.Arch, error) {
|
||||||
// TODO(sgotti) use go client listers instead of querying every time
|
// TODO(sgotti) use go client listers instead of querying every time
|
||||||
nodes, err := d.nodeLister.List(apilabels.SelectorFromSet(nil))
|
nodes, err := d.nodeLister.List(apilabels.SelectorFromSet(nil))
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, err
|
return nil, err
|
||||||
}
|
}
|
||||||
archsMap := map[common.Arch]struct{}{}
|
archsMap := map[types.Arch]struct{}{}
|
||||||
archs := []common.Arch{}
|
archs := []types.Arch{}
|
||||||
for _, node := range nodes {
|
for _, node := range nodes {
|
||||||
archsMap[common.ArchFromString(node.Status.NodeInfo.Architecture)] = struct{}{}
|
archsMap[types.ArchFromString(node.Status.NodeInfo.Architecture)] = struct{}{}
|
||||||
}
|
}
|
||||||
for arch := range archsMap {
|
for arch := range archsMap {
|
||||||
archs = append(archs, arch)
|
archs = append(archs, arch)
|
||||||
|
@ -489,12 +489,12 @@ func (d *K8sDriver) NewPod(ctx context.Context, podConfig *PodConfig, out io.Wri
|
||||||
}
|
}
|
||||||
osArch := strings.TrimSpace(stdout.String())
|
osArch := strings.TrimSpace(stdout.String())
|
||||||
|
|
||||||
var arch common.Arch
|
var arch types.Arch
|
||||||
switch osArch {
|
switch osArch {
|
||||||
case "x86_64":
|
case "x86_64":
|
||||||
arch = common.ArchAMD64
|
arch = types.ArchAMD64
|
||||||
case "aarch64":
|
case "aarch64":
|
||||||
arch = common.ArchARM64
|
arch = types.ArchARM64
|
||||||
default:
|
default:
|
||||||
return nil, errors.Errorf("unsupported pod arch %q", osArch)
|
return nil, errors.Errorf("unsupported pod arch %q", osArch)
|
||||||
}
|
}
|
||||||
|
|
|
@ -35,9 +35,9 @@ import (
|
||||||
"agola.io/agola/internal/services/config"
|
"agola.io/agola/internal/services/config"
|
||||||
"agola.io/agola/internal/services/executor/driver"
|
"agola.io/agola/internal/services/executor/driver"
|
||||||
"agola.io/agola/internal/services/executor/registry"
|
"agola.io/agola/internal/services/executor/registry"
|
||||||
rsapi "agola.io/agola/internal/services/runservice/api"
|
|
||||||
"agola.io/agola/internal/services/runservice/types"
|
|
||||||
"agola.io/agola/internal/util"
|
"agola.io/agola/internal/util"
|
||||||
|
rsclient "agola.io/agola/services/runservice/client"
|
||||||
|
"agola.io/agola/services/runservice/types"
|
||||||
uuid "github.com/satori/go.uuid"
|
uuid "github.com/satori/go.uuid"
|
||||||
|
|
||||||
"github.com/gorilla/mux"
|
"github.com/gorilla/mux"
|
||||||
|
@ -1304,7 +1304,7 @@ func (e *Executor) saveExecutorID(id string) error {
|
||||||
|
|
||||||
type Executor struct {
|
type Executor struct {
|
||||||
c *config.Executor
|
c *config.Executor
|
||||||
runserviceClient *rsapi.Client
|
runserviceClient *rsclient.Client
|
||||||
id string
|
id string
|
||||||
runningTasks *runningTasks
|
runningTasks *runningTasks
|
||||||
driver driver.Driver
|
driver driver.Driver
|
||||||
|
@ -1325,7 +1325,7 @@ func NewExecutor(c *config.Executor) (*Executor, error) {
|
||||||
|
|
||||||
e := &Executor{
|
e := &Executor{
|
||||||
c: c,
|
c: c,
|
||||||
runserviceClient: rsapi.NewClient(c.RunserviceURL),
|
runserviceClient: rsclient.NewClient(c.RunserviceURL),
|
||||||
runningTasks: &runningTasks{
|
runningTasks: &runningTasks{
|
||||||
tasks: make(map[string]*runningTask),
|
tasks: make(map[string]*runningTask),
|
||||||
},
|
},
|
||||||
|
|
|
@ -19,7 +19,7 @@ import (
|
||||||
"fmt"
|
"fmt"
|
||||||
"strings"
|
"strings"
|
||||||
|
|
||||||
"agola.io/agola/internal/services/runservice/types"
|
"agola.io/agola/services/runservice/types"
|
||||||
errors "golang.org/x/xerrors"
|
errors "golang.org/x/xerrors"
|
||||||
|
|
||||||
"github.com/google/go-containerregistry/pkg/name"
|
"github.com/google/go-containerregistry/pkg/name"
|
||||||
|
|
|
@ -18,9 +18,9 @@ import (
|
||||||
"net/http"
|
"net/http"
|
||||||
|
|
||||||
"agola.io/agola/internal/services/common"
|
"agola.io/agola/internal/services/common"
|
||||||
csapi "agola.io/agola/internal/services/configstore/api"
|
|
||||||
rsapi "agola.io/agola/internal/services/runservice/api"
|
|
||||||
"agola.io/agola/internal/util"
|
"agola.io/agola/internal/util"
|
||||||
|
csclient "agola.io/agola/services/configstore/client"
|
||||||
|
rsclient "agola.io/agola/services/runservice/client"
|
||||||
|
|
||||||
"go.uber.org/zap"
|
"go.uber.org/zap"
|
||||||
)
|
)
|
||||||
|
@ -28,14 +28,14 @@ import (
|
||||||
type ActionHandler struct {
|
type ActionHandler struct {
|
||||||
log *zap.SugaredLogger
|
log *zap.SugaredLogger
|
||||||
sd *common.TokenSigningData
|
sd *common.TokenSigningData
|
||||||
configstoreClient *csapi.Client
|
configstoreClient *csclient.Client
|
||||||
runserviceClient *rsapi.Client
|
runserviceClient *rsclient.Client
|
||||||
agolaID string
|
agolaID string
|
||||||
apiExposedURL string
|
apiExposedURL string
|
||||||
webExposedURL string
|
webExposedURL string
|
||||||
}
|
}
|
||||||
|
|
||||||
func NewActionHandler(logger *zap.Logger, sd *common.TokenSigningData, configstoreClient *csapi.Client, runserviceClient *rsapi.Client, agolaID, apiExposedURL, webExposedURL string) *ActionHandler {
|
func NewActionHandler(logger *zap.Logger, sd *common.TokenSigningData, configstoreClient *csclient.Client, runserviceClient *rsclient.Client, agolaID, apiExposedURL, webExposedURL string) *ActionHandler {
|
||||||
return &ActionHandler{
|
return &ActionHandler{
|
||||||
log: logger.Sugar(),
|
log: logger.Sugar(),
|
||||||
sd: sd,
|
sd: sd,
|
||||||
|
|
|
@ -18,7 +18,7 @@ import (
|
||||||
"context"
|
"context"
|
||||||
|
|
||||||
"agola.io/agola/internal/services/common"
|
"agola.io/agola/internal/services/common"
|
||||||
cstypes "agola.io/agola/internal/services/configstore/types"
|
cstypes "agola.io/agola/services/configstore/types"
|
||||||
|
|
||||||
errors "golang.org/x/xerrors"
|
errors "golang.org/x/xerrors"
|
||||||
)
|
)
|
||||||
|
|
|
@ -20,7 +20,7 @@ import (
|
||||||
"path"
|
"path"
|
||||||
|
|
||||||
"agola.io/agola/internal/services/common"
|
"agola.io/agola/internal/services/common"
|
||||||
rstypes "agola.io/agola/internal/services/runservice/types"
|
rstypes "agola.io/agola/services/runservice/types"
|
||||||
)
|
)
|
||||||
|
|
||||||
// GetBadge return a badge for a project branch
|
// GetBadge return a badge for a project branch
|
||||||
|
|
|
@ -17,8 +17,8 @@ package action
|
||||||
import (
|
import (
|
||||||
"context"
|
"context"
|
||||||
|
|
||||||
cstypes "agola.io/agola/internal/services/configstore/types"
|
|
||||||
"agola.io/agola/internal/util"
|
"agola.io/agola/internal/util"
|
||||||
|
cstypes "agola.io/agola/services/configstore/types"
|
||||||
|
|
||||||
errors "golang.org/x/xerrors"
|
errors "golang.org/x/xerrors"
|
||||||
)
|
)
|
||||||
|
|
|
@ -22,15 +22,15 @@ import (
|
||||||
"path"
|
"path"
|
||||||
|
|
||||||
gitsource "agola.io/agola/internal/gitsources"
|
gitsource "agola.io/agola/internal/gitsources"
|
||||||
csapi "agola.io/agola/internal/services/configstore/api"
|
|
||||||
cstypes "agola.io/agola/internal/services/configstore/types"
|
|
||||||
"agola.io/agola/internal/services/types"
|
"agola.io/agola/internal/services/types"
|
||||||
"agola.io/agola/internal/util"
|
"agola.io/agola/internal/util"
|
||||||
|
csapitypes "agola.io/agola/services/configstore/api/types"
|
||||||
|
cstypes "agola.io/agola/services/configstore/types"
|
||||||
|
|
||||||
errors "golang.org/x/xerrors"
|
errors "golang.org/x/xerrors"
|
||||||
)
|
)
|
||||||
|
|
||||||
func (h *ActionHandler) GetProject(ctx context.Context, projectRef string) (*csapi.Project, error) {
|
func (h *ActionHandler) GetProject(ctx context.Context, projectRef string) (*csapitypes.Project, error) {
|
||||||
project, resp, err := h.configstoreClient.GetProject(ctx, projectRef)
|
project, resp, err := h.configstoreClient.GetProject(ctx, projectRef)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, ErrFromRemote(resp, err)
|
return nil, ErrFromRemote(resp, err)
|
||||||
|
@ -59,7 +59,7 @@ type CreateProjectRequest struct {
|
||||||
SkipSSHHostKeyCheck bool
|
SkipSSHHostKeyCheck bool
|
||||||
}
|
}
|
||||||
|
|
||||||
func (h *ActionHandler) CreateProject(ctx context.Context, req *CreateProjectRequest) (*csapi.Project, error) {
|
func (h *ActionHandler) CreateProject(ctx context.Context, req *CreateProjectRequest) (*csapitypes.Project, error) {
|
||||||
curUserID := h.CurrentUserID(ctx)
|
curUserID := h.CurrentUserID(ctx)
|
||||||
|
|
||||||
user, resp, err := h.configstoreClient.GetUser(ctx, curUserID)
|
user, resp, err := h.configstoreClient.GetUser(ctx, curUserID)
|
||||||
|
@ -184,7 +184,7 @@ type UpdateProjectRequest struct {
|
||||||
Visibility cstypes.Visibility
|
Visibility cstypes.Visibility
|
||||||
}
|
}
|
||||||
|
|
||||||
func (h *ActionHandler) UpdateProject(ctx context.Context, projectRef string, req *UpdateProjectRequest) (*csapi.Project, error) {
|
func (h *ActionHandler) UpdateProject(ctx context.Context, projectRef string, req *UpdateProjectRequest) (*csapitypes.Project, error) {
|
||||||
p, resp, err := h.configstoreClient.GetProject(ctx, projectRef)
|
p, resp, err := h.configstoreClient.GetProject(ctx, projectRef)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, errors.Errorf("failed to get project %q: %w", projectRef, ErrFromRemote(resp, err))
|
return nil, errors.Errorf("failed to get project %q: %w", projectRef, ErrFromRemote(resp, err))
|
||||||
|
@ -211,7 +211,7 @@ func (h *ActionHandler) UpdateProject(ctx context.Context, projectRef string, re
|
||||||
return rp, nil
|
return rp, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
func (h *ActionHandler) ProjectUpdateRepoLinkedAccount(ctx context.Context, projectRef string) (*csapi.Project, error) {
|
func (h *ActionHandler) ProjectUpdateRepoLinkedAccount(ctx context.Context, projectRef string) (*csapitypes.Project, error) {
|
||||||
curUserID := h.CurrentUserID(ctx)
|
curUserID := h.CurrentUserID(ctx)
|
||||||
|
|
||||||
user, resp, err := h.configstoreClient.GetUser(ctx, curUserID)
|
user, resp, err := h.configstoreClient.GetUser(ctx, curUserID)
|
||||||
|
@ -270,7 +270,7 @@ func (h *ActionHandler) ProjectUpdateRepoLinkedAccount(ctx context.Context, proj
|
||||||
return rp, nil
|
return rp, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
func (h *ActionHandler) setupGitSourceRepo(ctx context.Context, rs *cstypes.RemoteSource, user *cstypes.User, la *cstypes.LinkedAccount, project *csapi.Project) error {
|
func (h *ActionHandler) setupGitSourceRepo(ctx context.Context, rs *cstypes.RemoteSource, user *cstypes.User, la *cstypes.LinkedAccount, project *csapitypes.Project) error {
|
||||||
gitsource, err := h.GetGitSource(ctx, rs, user.Name, la)
|
gitsource, err := h.GetGitSource(ctx, rs, user.Name, la)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return errors.Errorf("failed to create gitsource client: %w", err)
|
return errors.Errorf("failed to create gitsource client: %w", err)
|
||||||
|
@ -306,7 +306,7 @@ func (h *ActionHandler) setupGitSourceRepo(ctx context.Context, rs *cstypes.Remo
|
||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
|
|
||||||
func (h *ActionHandler) cleanupGitSourceRepo(ctx context.Context, rs *cstypes.RemoteSource, user *cstypes.User, la *cstypes.LinkedAccount, project *csapi.Project) error {
|
func (h *ActionHandler) cleanupGitSourceRepo(ctx context.Context, rs *cstypes.RemoteSource, user *cstypes.User, la *cstypes.LinkedAccount, project *csapitypes.Project) error {
|
||||||
gitsource, err := h.GetGitSource(ctx, rs, user.Name, la)
|
gitsource, err := h.GetGitSource(ctx, rs, user.Name, la)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return errors.Errorf("failed to create gitsource client: %w", err)
|
return errors.Errorf("failed to create gitsource client: %w", err)
|
||||||
|
@ -333,7 +333,7 @@ func (h *ActionHandler) cleanupGitSourceRepo(ctx context.Context, rs *cstypes.Re
|
||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
|
|
||||||
func (h *ActionHandler) genWebhookURL(project *csapi.Project) (string, error) {
|
func (h *ActionHandler) genWebhookURL(project *csapitypes.Project) (string, error) {
|
||||||
baseWebhookURL := fmt.Sprintf("%s/webhooks", h.apiExposedURL)
|
baseWebhookURL := fmt.Sprintf("%s/webhooks", h.apiExposedURL)
|
||||||
webhookURL, err := url.Parse(baseWebhookURL)
|
webhookURL, err := url.Parse(baseWebhookURL)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
|
|
|
@ -18,14 +18,14 @@ import (
|
||||||
"context"
|
"context"
|
||||||
"path"
|
"path"
|
||||||
|
|
||||||
csapi "agola.io/agola/internal/services/configstore/api"
|
|
||||||
cstypes "agola.io/agola/internal/services/configstore/types"
|
|
||||||
"agola.io/agola/internal/util"
|
"agola.io/agola/internal/util"
|
||||||
|
csapitypes "agola.io/agola/services/configstore/api/types"
|
||||||
|
cstypes "agola.io/agola/services/configstore/types"
|
||||||
|
|
||||||
errors "golang.org/x/xerrors"
|
errors "golang.org/x/xerrors"
|
||||||
)
|
)
|
||||||
|
|
||||||
func (h *ActionHandler) GetProjectGroup(ctx context.Context, projectGroupRef string) (*csapi.ProjectGroup, error) {
|
func (h *ActionHandler) GetProjectGroup(ctx context.Context, projectGroupRef string) (*csapitypes.ProjectGroup, error) {
|
||||||
projectGroup, resp, err := h.configstoreClient.GetProjectGroup(ctx, projectGroupRef)
|
projectGroup, resp, err := h.configstoreClient.GetProjectGroup(ctx, projectGroupRef)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, ErrFromRemote(resp, err)
|
return nil, ErrFromRemote(resp, err)
|
||||||
|
@ -33,7 +33,7 @@ func (h *ActionHandler) GetProjectGroup(ctx context.Context, projectGroupRef str
|
||||||
return projectGroup, nil
|
return projectGroup, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
func (h *ActionHandler) GetProjectGroupSubgroups(ctx context.Context, projectGroupRef string) ([]*csapi.ProjectGroup, error) {
|
func (h *ActionHandler) GetProjectGroupSubgroups(ctx context.Context, projectGroupRef string) ([]*csapitypes.ProjectGroup, error) {
|
||||||
projectGroups, resp, err := h.configstoreClient.GetProjectGroupSubgroups(ctx, projectGroupRef)
|
projectGroups, resp, err := h.configstoreClient.GetProjectGroupSubgroups(ctx, projectGroupRef)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, ErrFromRemote(resp, err)
|
return nil, ErrFromRemote(resp, err)
|
||||||
|
@ -41,7 +41,7 @@ func (h *ActionHandler) GetProjectGroupSubgroups(ctx context.Context, projectGro
|
||||||
return projectGroups, nil
|
return projectGroups, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
func (h *ActionHandler) GetProjectGroupProjects(ctx context.Context, projectGroupRef string) ([]*csapi.Project, error) {
|
func (h *ActionHandler) GetProjectGroupProjects(ctx context.Context, projectGroupRef string) ([]*csapitypes.Project, error) {
|
||||||
projects, resp, err := h.configstoreClient.GetProjectGroupProjects(ctx, projectGroupRef)
|
projects, resp, err := h.configstoreClient.GetProjectGroupProjects(ctx, projectGroupRef)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, ErrFromRemote(resp, err)
|
return nil, ErrFromRemote(resp, err)
|
||||||
|
@ -56,7 +56,7 @@ type CreateProjectGroupRequest struct {
|
||||||
Visibility cstypes.Visibility
|
Visibility cstypes.Visibility
|
||||||
}
|
}
|
||||||
|
|
||||||
func (h *ActionHandler) CreateProjectGroup(ctx context.Context, req *CreateProjectGroupRequest) (*csapi.ProjectGroup, error) {
|
func (h *ActionHandler) CreateProjectGroup(ctx context.Context, req *CreateProjectGroupRequest) (*csapitypes.ProjectGroup, error) {
|
||||||
if !util.ValidateName(req.Name) {
|
if !util.ValidateName(req.Name) {
|
||||||
return nil, util.NewErrBadRequest(errors.Errorf("invalid projectGroup name %q", req.Name))
|
return nil, util.NewErrBadRequest(errors.Errorf("invalid projectGroup name %q", req.Name))
|
||||||
}
|
}
|
||||||
|
@ -109,7 +109,7 @@ type UpdateProjectGroupRequest struct {
|
||||||
Visibility cstypes.Visibility
|
Visibility cstypes.Visibility
|
||||||
}
|
}
|
||||||
|
|
||||||
func (h *ActionHandler) UpdateProjectGroup(ctx context.Context, projectGroupRef string, req *UpdateProjectGroupRequest) (*csapi.ProjectGroup, error) {
|
func (h *ActionHandler) UpdateProjectGroup(ctx context.Context, projectGroupRef string, req *UpdateProjectGroupRequest) (*csapitypes.ProjectGroup, error) {
|
||||||
pg, resp, err := h.configstoreClient.GetProjectGroup(ctx, projectGroupRef)
|
pg, resp, err := h.configstoreClient.GetProjectGroup(ctx, projectGroupRef)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, errors.Errorf("failed to get project group %q: %w", projectGroupRef, ErrFromRemote(resp, err))
|
return nil, errors.Errorf("failed to get project group %q: %w", projectGroupRef, ErrFromRemote(resp, err))
|
||||||
|
|
|
@ -17,8 +17,8 @@ package action
|
||||||
import (
|
import (
|
||||||
"context"
|
"context"
|
||||||
|
|
||||||
cstypes "agola.io/agola/internal/services/configstore/types"
|
|
||||||
"agola.io/agola/internal/util"
|
"agola.io/agola/internal/util"
|
||||||
|
cstypes "agola.io/agola/services/configstore/types"
|
||||||
|
|
||||||
errors "golang.org/x/xerrors"
|
errors "golang.org/x/xerrors"
|
||||||
)
|
)
|
||||||
|
|
|
@ -24,11 +24,11 @@ import (
|
||||||
gitsource "agola.io/agola/internal/gitsources"
|
gitsource "agola.io/agola/internal/gitsources"
|
||||||
"agola.io/agola/internal/runconfig"
|
"agola.io/agola/internal/runconfig"
|
||||||
"agola.io/agola/internal/services/common"
|
"agola.io/agola/internal/services/common"
|
||||||
cstypes "agola.io/agola/internal/services/configstore/types"
|
|
||||||
rsapi "agola.io/agola/internal/services/runservice/api"
|
|
||||||
rstypes "agola.io/agola/internal/services/runservice/types"
|
|
||||||
"agola.io/agola/internal/services/types"
|
"agola.io/agola/internal/services/types"
|
||||||
"agola.io/agola/internal/util"
|
"agola.io/agola/internal/util"
|
||||||
|
cstypes "agola.io/agola/services/configstore/types"
|
||||||
|
rsapitypes "agola.io/agola/services/runservice/api/types"
|
||||||
|
rstypes "agola.io/agola/services/runservice/types"
|
||||||
|
|
||||||
errors "golang.org/x/xerrors"
|
errors "golang.org/x/xerrors"
|
||||||
)
|
)
|
||||||
|
@ -65,7 +65,7 @@ const (
|
||||||
AnnotationPullRequestLink = "pull_request_link"
|
AnnotationPullRequestLink = "pull_request_link"
|
||||||
)
|
)
|
||||||
|
|
||||||
func (h *ActionHandler) GetRun(ctx context.Context, runID string) (*rsapi.RunResponse, error) {
|
func (h *ActionHandler) GetRun(ctx context.Context, runID string) (*rsapitypes.RunResponse, error) {
|
||||||
runResp, resp, err := h.runserviceClient.GetRun(ctx, runID, nil)
|
runResp, resp, err := h.runserviceClient.GetRun(ctx, runID, nil)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, ErrFromRemote(resp, err)
|
return nil, ErrFromRemote(resp, err)
|
||||||
|
@ -92,7 +92,7 @@ type GetRunsRequest struct {
|
||||||
Asc bool
|
Asc bool
|
||||||
}
|
}
|
||||||
|
|
||||||
func (h *ActionHandler) GetRuns(ctx context.Context, req *GetRunsRequest) (*rsapi.GetRunsResponse, error) {
|
func (h *ActionHandler) GetRuns(ctx context.Context, req *GetRunsRequest) (*rsapitypes.GetRunsResponse, error) {
|
||||||
canGetRun, err := h.CanGetRun(ctx, req.Group)
|
canGetRun, err := h.CanGetRun(ctx, req.Group)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, errors.Errorf("failed to determine permissions: %w", err)
|
return nil, errors.Errorf("failed to determine permissions: %w", err)
|
||||||
|
@ -155,7 +155,7 @@ type RunActionsRequest struct {
|
||||||
FromStart bool
|
FromStart bool
|
||||||
}
|
}
|
||||||
|
|
||||||
func (h *ActionHandler) RunAction(ctx context.Context, req *RunActionsRequest) (*rsapi.RunResponse, error) {
|
func (h *ActionHandler) RunAction(ctx context.Context, req *RunActionsRequest) (*rsapitypes.RunResponse, error) {
|
||||||
runResp, resp, err := h.runserviceClient.GetRun(ctx, req.RunID, nil)
|
runResp, resp, err := h.runserviceClient.GetRun(ctx, req.RunID, nil)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, ErrFromRemote(resp, err)
|
return nil, ErrFromRemote(resp, err)
|
||||||
|
@ -170,7 +170,7 @@ func (h *ActionHandler) RunAction(ctx context.Context, req *RunActionsRequest) (
|
||||||
|
|
||||||
switch req.ActionType {
|
switch req.ActionType {
|
||||||
case RunActionTypeRestart:
|
case RunActionTypeRestart:
|
||||||
rsreq := &rsapi.RunCreateRequest{
|
rsreq := &rsapitypes.RunCreateRequest{
|
||||||
RunID: req.RunID,
|
RunID: req.RunID,
|
||||||
FromStart: req.FromStart,
|
FromStart: req.FromStart,
|
||||||
}
|
}
|
||||||
|
@ -181,8 +181,8 @@ func (h *ActionHandler) RunAction(ctx context.Context, req *RunActionsRequest) (
|
||||||
}
|
}
|
||||||
|
|
||||||
case RunActionTypeCancel:
|
case RunActionTypeCancel:
|
||||||
rsreq := &rsapi.RunActionsRequest{
|
rsreq := &rsapitypes.RunActionsRequest{
|
||||||
ActionType: rsapi.RunActionTypeChangePhase,
|
ActionType: rsapitypes.RunActionTypeChangePhase,
|
||||||
Phase: rstypes.RunPhaseCancelled,
|
Phase: rstypes.RunPhaseCancelled,
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -192,8 +192,8 @@ func (h *ActionHandler) RunAction(ctx context.Context, req *RunActionsRequest) (
|
||||||
}
|
}
|
||||||
|
|
||||||
case RunActionTypeStop:
|
case RunActionTypeStop:
|
||||||
rsreq := &rsapi.RunActionsRequest{
|
rsreq := &rsapitypes.RunActionsRequest{
|
||||||
ActionType: rsapi.RunActionTypeStop,
|
ActionType: rsapitypes.RunActionTypeStop,
|
||||||
}
|
}
|
||||||
|
|
||||||
resp, err = h.runserviceClient.RunActions(ctx, req.RunID, rsreq)
|
resp, err = h.runserviceClient.RunActions(ctx, req.RunID, rsreq)
|
||||||
|
@ -271,8 +271,8 @@ func (h *ActionHandler) RunTaskAction(ctx context.Context, req *RunTaskActionsRe
|
||||||
|
|
||||||
annotations[common.ApproversAnnotation] = string(approversj)
|
annotations[common.ApproversAnnotation] = string(approversj)
|
||||||
|
|
||||||
rsreq := &rsapi.RunTaskActionsRequest{
|
rsreq := &rsapitypes.RunTaskActionsRequest{
|
||||||
ActionType: rsapi.RunTaskActionTypeSetAnnotations,
|
ActionType: rsapitypes.RunTaskActionTypeSetAnnotations,
|
||||||
Annotations: annotations,
|
Annotations: annotations,
|
||||||
ChangeGroupsUpdateToken: runResp.ChangeGroupsUpdateToken,
|
ChangeGroupsUpdateToken: runResp.ChangeGroupsUpdateToken,
|
||||||
}
|
}
|
||||||
|
@ -461,7 +461,7 @@ func (h *ActionHandler) CreateRuns(ctx context.Context, req *CreateRunRequest) e
|
||||||
// create a run (per config file) with a generic error since we cannot parse
|
// create a run (per config file) with a generic error since we cannot parse
|
||||||
// it and know how many runs are defined
|
// it and know how many runs are defined
|
||||||
setupErrors = append(setupErrors, err.Error())
|
setupErrors = append(setupErrors, err.Error())
|
||||||
createRunReq := &rsapi.RunCreateRequest{
|
createRunReq := &rsapitypes.RunCreateRequest{
|
||||||
RunConfigTasks: nil,
|
RunConfigTasks: nil,
|
||||||
Group: runGroup,
|
Group: runGroup,
|
||||||
SetupErrors: setupErrors,
|
SetupErrors: setupErrors,
|
||||||
|
@ -480,7 +480,7 @@ func (h *ActionHandler) CreateRuns(ctx context.Context, req *CreateRunRequest) e
|
||||||
for _, run := range config.Runs {
|
for _, run := range config.Runs {
|
||||||
rcts := runconfig.GenRunConfigTasks(util.DefaultUUIDGenerator{}, config, run.Name, variables, req.Branch, req.Tag, req.Ref)
|
rcts := runconfig.GenRunConfigTasks(util.DefaultUUIDGenerator{}, config, run.Name, variables, req.Branch, req.Tag, req.Ref)
|
||||||
|
|
||||||
createRunReq := &rsapi.RunCreateRequest{
|
createRunReq := &rsapitypes.RunCreateRequest{
|
||||||
RunConfigTasks: rcts,
|
RunConfigTasks: rcts,
|
||||||
Group: runGroup,
|
Group: runGroup,
|
||||||
SetupErrors: setupErrors,
|
SetupErrors: setupErrors,
|
||||||
|
|
|
@ -18,9 +18,9 @@ import (
|
||||||
"context"
|
"context"
|
||||||
"net/http"
|
"net/http"
|
||||||
|
|
||||||
csapi "agola.io/agola/internal/services/configstore/api"
|
|
||||||
cstypes "agola.io/agola/internal/services/configstore/types"
|
|
||||||
"agola.io/agola/internal/util"
|
"agola.io/agola/internal/util"
|
||||||
|
csapitypes "agola.io/agola/services/configstore/api/types"
|
||||||
|
cstypes "agola.io/agola/services/configstore/types"
|
||||||
|
|
||||||
errors "golang.org/x/xerrors"
|
errors "golang.org/x/xerrors"
|
||||||
)
|
)
|
||||||
|
@ -32,8 +32,8 @@ type GetSecretsRequest struct {
|
||||||
Tree bool
|
Tree bool
|
||||||
}
|
}
|
||||||
|
|
||||||
func (h *ActionHandler) GetSecrets(ctx context.Context, req *GetSecretsRequest) ([]*csapi.Secret, error) {
|
func (h *ActionHandler) GetSecrets(ctx context.Context, req *GetSecretsRequest) ([]*csapitypes.Secret, error) {
|
||||||
var cssecrets []*csapi.Secret
|
var cssecrets []*csapitypes.Secret
|
||||||
var resp *http.Response
|
var resp *http.Response
|
||||||
var err error
|
var err error
|
||||||
switch req.ParentType {
|
switch req.ParentType {
|
||||||
|
@ -65,7 +65,7 @@ type CreateSecretRequest struct {
|
||||||
Path string
|
Path string
|
||||||
}
|
}
|
||||||
|
|
||||||
func (h *ActionHandler) CreateSecret(ctx context.Context, req *CreateSecretRequest) (*csapi.Secret, error) {
|
func (h *ActionHandler) CreateSecret(ctx context.Context, req *CreateSecretRequest) (*csapitypes.Secret, error) {
|
||||||
isVariableOwner, err := h.IsVariableOwner(ctx, req.ParentType, req.ParentRef)
|
isVariableOwner, err := h.IsVariableOwner(ctx, req.ParentType, req.ParentRef)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, errors.Errorf("failed to determine ownership: %w", err)
|
return nil, errors.Errorf("failed to determine ownership: %w", err)
|
||||||
|
@ -85,7 +85,7 @@ func (h *ActionHandler) CreateSecret(ctx context.Context, req *CreateSecretReque
|
||||||
}
|
}
|
||||||
|
|
||||||
var resp *http.Response
|
var resp *http.Response
|
||||||
var rs *csapi.Secret
|
var rs *csapitypes.Secret
|
||||||
switch req.ParentType {
|
switch req.ParentType {
|
||||||
case cstypes.ConfigTypeProjectGroup:
|
case cstypes.ConfigTypeProjectGroup:
|
||||||
h.log.Infof("creating project group secret")
|
h.log.Infof("creating project group secret")
|
||||||
|
@ -120,7 +120,7 @@ type UpdateSecretRequest struct {
|
||||||
Path string
|
Path string
|
||||||
}
|
}
|
||||||
|
|
||||||
func (h *ActionHandler) UpdateSecret(ctx context.Context, req *UpdateSecretRequest) (*csapi.Secret, error) {
|
func (h *ActionHandler) UpdateSecret(ctx context.Context, req *UpdateSecretRequest) (*csapitypes.Secret, error) {
|
||||||
isVariableOwner, err := h.IsVariableOwner(ctx, req.ParentType, req.ParentRef)
|
isVariableOwner, err := h.IsVariableOwner(ctx, req.ParentType, req.ParentRef)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, errors.Errorf("failed to determine ownership: %w", err)
|
return nil, errors.Errorf("failed to determine ownership: %w", err)
|
||||||
|
@ -140,7 +140,7 @@ func (h *ActionHandler) UpdateSecret(ctx context.Context, req *UpdateSecretReque
|
||||||
}
|
}
|
||||||
|
|
||||||
var resp *http.Response
|
var resp *http.Response
|
||||||
var rs *csapi.Secret
|
var rs *csapitypes.Secret
|
||||||
switch req.ParentType {
|
switch req.ParentType {
|
||||||
case cstypes.ConfigTypeProjectGroup:
|
case cstypes.ConfigTypeProjectGroup:
|
||||||
h.log.Infof("updating project group secret")
|
h.log.Infof("updating project group secret")
|
||||||
|
|
|
@ -24,10 +24,10 @@ import (
|
||||||
gitsource "agola.io/agola/internal/gitsources"
|
gitsource "agola.io/agola/internal/gitsources"
|
||||||
"agola.io/agola/internal/gitsources/agolagit"
|
"agola.io/agola/internal/gitsources/agolagit"
|
||||||
"agola.io/agola/internal/services/common"
|
"agola.io/agola/internal/services/common"
|
||||||
csapi "agola.io/agola/internal/services/configstore/api"
|
|
||||||
cstypes "agola.io/agola/internal/services/configstore/types"
|
|
||||||
"agola.io/agola/internal/services/types"
|
"agola.io/agola/internal/services/types"
|
||||||
"agola.io/agola/internal/util"
|
"agola.io/agola/internal/util"
|
||||||
|
csapitypes "agola.io/agola/services/configstore/api/types"
|
||||||
|
cstypes "agola.io/agola/services/configstore/types"
|
||||||
|
|
||||||
jwt "github.com/dgrijalva/jwt-go"
|
jwt "github.com/dgrijalva/jwt-go"
|
||||||
errors "golang.org/x/xerrors"
|
errors "golang.org/x/xerrors"
|
||||||
|
@ -90,7 +90,7 @@ func (h *ActionHandler) CreateUser(ctx context.Context, req *CreateUserRequest)
|
||||||
return nil, util.NewErrBadRequest(errors.Errorf("invalid user name %q", req.UserName))
|
return nil, util.NewErrBadRequest(errors.Errorf("invalid user name %q", req.UserName))
|
||||||
}
|
}
|
||||||
|
|
||||||
creq := &csapi.CreateUserRequest{
|
creq := &csapitypes.CreateUserRequest{
|
||||||
UserName: req.UserName,
|
UserName: req.UserName,
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -137,7 +137,7 @@ func (h *ActionHandler) CreateUserToken(ctx context.Context, req *CreateUserToke
|
||||||
}
|
}
|
||||||
|
|
||||||
h.log.Infof("creating user token")
|
h.log.Infof("creating user token")
|
||||||
creq := &csapi.CreateUserTokenRequest{
|
creq := &csapitypes.CreateUserTokenRequest{
|
||||||
TokenName: req.TokenName,
|
TokenName: req.TokenName,
|
||||||
}
|
}
|
||||||
res, resp, err := h.configstoreClient.CreateUserToken(ctx, userRef, creq)
|
res, resp, err := h.configstoreClient.CreateUserToken(ctx, userRef, creq)
|
||||||
|
@ -197,7 +197,7 @@ func (h *ActionHandler) CreateUserLA(ctx context.Context, req *CreateUserLAReque
|
||||||
return nil, errors.Errorf("empty remote user id for remote source %q", rs.ID)
|
return nil, errors.Errorf("empty remote user id for remote source %q", rs.ID)
|
||||||
}
|
}
|
||||||
|
|
||||||
creq := &csapi.CreateUserLARequest{
|
creq := &csapitypes.CreateUserLARequest{
|
||||||
RemoteSourceName: req.RemoteSourceName,
|
RemoteSourceName: req.RemoteSourceName,
|
||||||
RemoteUserID: remoteUserInfo.ID,
|
RemoteUserID: remoteUserInfo.ID,
|
||||||
RemoteUserName: remoteUserInfo.LoginName,
|
RemoteUserName: remoteUserInfo.LoginName,
|
||||||
|
@ -233,7 +233,7 @@ func (h *ActionHandler) UpdateUserLA(ctx context.Context, userRef string, la *cs
|
||||||
return util.NewErrBadRequest(errors.Errorf("user %q doesn't have a linked account with id %q", userRef, la.ID))
|
return util.NewErrBadRequest(errors.Errorf("user %q doesn't have a linked account with id %q", userRef, la.ID))
|
||||||
}
|
}
|
||||||
|
|
||||||
creq := &csapi.UpdateUserLARequest{
|
creq := &csapitypes.UpdateUserLARequest{
|
||||||
RemoteUserID: la.RemoteUserID,
|
RemoteUserID: la.RemoteUserID,
|
||||||
RemoteUserName: la.RemoteUserName,
|
RemoteUserName: la.RemoteUserName,
|
||||||
UserAccessToken: la.UserAccessToken,
|
UserAccessToken: la.UserAccessToken,
|
||||||
|
@ -333,9 +333,9 @@ func (h *ActionHandler) RegisterUser(ctx context.Context, req *RegisterUserReque
|
||||||
return nil, errors.Errorf("empty remote user id for remote source %q", rs.ID)
|
return nil, errors.Errorf("empty remote user id for remote source %q", rs.ID)
|
||||||
}
|
}
|
||||||
|
|
||||||
creq := &csapi.CreateUserRequest{
|
creq := &csapitypes.CreateUserRequest{
|
||||||
UserName: req.UserName,
|
UserName: req.UserName,
|
||||||
CreateUserLARequest: &csapi.CreateUserLARequest{
|
CreateUserLARequest: &csapitypes.CreateUserLARequest{
|
||||||
RemoteSourceName: req.RemoteSourceName,
|
RemoteSourceName: req.RemoteSourceName,
|
||||||
RemoteUserID: remoteUserInfo.ID,
|
RemoteUserID: remoteUserInfo.ID,
|
||||||
RemoteUserName: remoteUserInfo.LoginName,
|
RemoteUserName: remoteUserInfo.LoginName,
|
||||||
|
@ -420,7 +420,7 @@ func (h *ActionHandler) LoginUser(ctx context.Context, req *LoginUserRequest) (*
|
||||||
la.Oauth2RefreshToken = req.Oauth2RefreshToken
|
la.Oauth2RefreshToken = req.Oauth2RefreshToken
|
||||||
la.UserAccessToken = req.UserAccessToken
|
la.UserAccessToken = req.UserAccessToken
|
||||||
|
|
||||||
creq := &csapi.UpdateUserLARequest{
|
creq := &csapitypes.UpdateUserLARequest{
|
||||||
RemoteUserID: la.RemoteUserID,
|
RemoteUserID: la.RemoteUserID,
|
||||||
RemoteUserName: la.RemoteUserName,
|
RemoteUserName: la.RemoteUserName,
|
||||||
UserAccessToken: la.UserAccessToken,
|
UserAccessToken: la.UserAccessToken,
|
||||||
|
|
|
@ -19,9 +19,9 @@ import (
|
||||||
"net/http"
|
"net/http"
|
||||||
|
|
||||||
"agola.io/agola/internal/services/common"
|
"agola.io/agola/internal/services/common"
|
||||||
csapi "agola.io/agola/internal/services/configstore/api"
|
|
||||||
cstypes "agola.io/agola/internal/services/configstore/types"
|
|
||||||
"agola.io/agola/internal/util"
|
"agola.io/agola/internal/util"
|
||||||
|
csapitypes "agola.io/agola/services/configstore/api/types"
|
||||||
|
cstypes "agola.io/agola/services/configstore/types"
|
||||||
errors "golang.org/x/xerrors"
|
errors "golang.org/x/xerrors"
|
||||||
)
|
)
|
||||||
|
|
||||||
|
@ -33,9 +33,9 @@ type GetVariablesRequest struct {
|
||||||
RemoveOverridden bool
|
RemoveOverridden bool
|
||||||
}
|
}
|
||||||
|
|
||||||
func (h *ActionHandler) GetVariables(ctx context.Context, req *GetVariablesRequest) ([]*csapi.Variable, []*csapi.Secret, error) {
|
func (h *ActionHandler) GetVariables(ctx context.Context, req *GetVariablesRequest) ([]*csapitypes.Variable, []*csapitypes.Secret, error) {
|
||||||
var csvars []*csapi.Variable
|
var csvars []*csapitypes.Variable
|
||||||
var cssecrets []*csapi.Secret
|
var cssecrets []*csapitypes.Secret
|
||||||
|
|
||||||
switch req.ParentType {
|
switch req.ParentType {
|
||||||
case cstypes.ConfigTypeProjectGroup:
|
case cstypes.ConfigTypeProjectGroup:
|
||||||
|
@ -79,7 +79,7 @@ type CreateVariableRequest struct {
|
||||||
Values []cstypes.VariableValue
|
Values []cstypes.VariableValue
|
||||||
}
|
}
|
||||||
|
|
||||||
func (h *ActionHandler) CreateVariable(ctx context.Context, req *CreateVariableRequest) (*csapi.Variable, []*csapi.Secret, error) {
|
func (h *ActionHandler) CreateVariable(ctx context.Context, req *CreateVariableRequest) (*csapitypes.Variable, []*csapitypes.Secret, error) {
|
||||||
isVariableOwner, err := h.IsVariableOwner(ctx, req.ParentType, req.ParentRef)
|
isVariableOwner, err := h.IsVariableOwner(ctx, req.ParentType, req.ParentRef)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, nil, errors.Errorf("failed to determine ownership: %w", err)
|
return nil, nil, errors.Errorf("failed to determine ownership: %w", err)
|
||||||
|
@ -105,8 +105,8 @@ func (h *ActionHandler) CreateVariable(ctx context.Context, req *CreateVariableR
|
||||||
Values: req.Values,
|
Values: req.Values,
|
||||||
}
|
}
|
||||||
|
|
||||||
var cssecrets []*csapi.Secret
|
var cssecrets []*csapitypes.Secret
|
||||||
var rv *csapi.Variable
|
var rv *csapitypes.Variable
|
||||||
|
|
||||||
switch req.ParentType {
|
switch req.ParentType {
|
||||||
case cstypes.ConfigTypeProjectGroup:
|
case cstypes.ConfigTypeProjectGroup:
|
||||||
|
@ -152,7 +152,7 @@ type UpdateVariableRequest struct {
|
||||||
Values []cstypes.VariableValue
|
Values []cstypes.VariableValue
|
||||||
}
|
}
|
||||||
|
|
||||||
func (h *ActionHandler) UpdateVariable(ctx context.Context, req *UpdateVariableRequest) (*csapi.Variable, []*csapi.Secret, error) {
|
func (h *ActionHandler) UpdateVariable(ctx context.Context, req *UpdateVariableRequest) (*csapitypes.Variable, []*csapitypes.Secret, error) {
|
||||||
isVariableOwner, err := h.IsVariableOwner(ctx, req.ParentType, req.ParentRef)
|
isVariableOwner, err := h.IsVariableOwner(ctx, req.ParentType, req.ParentRef)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, nil, errors.Errorf("failed to determine ownership: %w", err)
|
return nil, nil, errors.Errorf("failed to determine ownership: %w", err)
|
||||||
|
@ -178,8 +178,8 @@ func (h *ActionHandler) UpdateVariable(ctx context.Context, req *UpdateVariableR
|
||||||
Values: req.Values,
|
Values: req.Values,
|
||||||
}
|
}
|
||||||
|
|
||||||
var cssecrets []*csapi.Secret
|
var cssecrets []*csapitypes.Secret
|
||||||
var rv *csapi.Variable
|
var rv *csapitypes.Variable
|
||||||
|
|
||||||
switch req.ParentType {
|
switch req.ParentType {
|
||||||
case cstypes.ConfigTypeProjectGroup:
|
case cstypes.ConfigTypeProjectGroup:
|
||||||
|
|
|
@ -19,8 +19,8 @@ import (
|
||||||
"net/http"
|
"net/http"
|
||||||
"net/url"
|
"net/url"
|
||||||
|
|
||||||
cstypes "agola.io/agola/internal/services/configstore/types"
|
util "agola.io/agola/internal/util"
|
||||||
"agola.io/agola/internal/util"
|
cstypes "agola.io/agola/services/configstore/types"
|
||||||
|
|
||||||
"github.com/gorilla/mux"
|
"github.com/gorilla/mux"
|
||||||
errors "golang.org/x/xerrors"
|
errors "golang.org/x/xerrors"
|
||||||
|
|
|
@ -24,10 +24,6 @@ import (
|
||||||
"go.uber.org/zap"
|
"go.uber.org/zap"
|
||||||
)
|
)
|
||||||
|
|
||||||
type BadgeRequest struct {
|
|
||||||
Name string `json:"name"`
|
|
||||||
}
|
|
||||||
|
|
||||||
type BadgeHandler struct {
|
type BadgeHandler struct {
|
||||||
log *zap.SugaredLogger
|
log *zap.SugaredLogger
|
||||||
ah *action.ActionHandler
|
ah *action.ActionHandler
|
||||||
|
|
|
@ -19,6 +19,7 @@ import (
|
||||||
|
|
||||||
"agola.io/agola/internal/services/gateway/action"
|
"agola.io/agola/internal/services/gateway/action"
|
||||||
"agola.io/agola/internal/util"
|
"agola.io/agola/internal/util"
|
||||||
|
gwapitypes "agola.io/agola/services/gateway/api/types"
|
||||||
|
|
||||||
"go.uber.org/zap"
|
"go.uber.org/zap"
|
||||||
)
|
)
|
||||||
|
@ -28,11 +29,6 @@ type OAuth2CallbackHandler struct {
|
||||||
ah *action.ActionHandler
|
ah *action.ActionHandler
|
||||||
}
|
}
|
||||||
|
|
||||||
type RemoteSourceAuthResult struct {
|
|
||||||
RequestType string `json:"request_type,omitempty"`
|
|
||||||
Response interface{} `json:"response,omitempty"`
|
|
||||||
}
|
|
||||||
|
|
||||||
func NewOAuth2CallbackHandler(logger *zap.Logger, ah *action.ActionHandler) *OAuth2CallbackHandler {
|
func NewOAuth2CallbackHandler(logger *zap.Logger, ah *action.ActionHandler) *OAuth2CallbackHandler {
|
||||||
return &OAuth2CallbackHandler{log: logger.Sugar(), ah: ah}
|
return &OAuth2CallbackHandler{log: logger.Sugar(), ah: ah}
|
||||||
}
|
}
|
||||||
|
@ -54,29 +50,39 @@ func (h *OAuth2CallbackHandler) ServeHTTP(w http.ResponseWriter, r *http.Request
|
||||||
switch cresp.RequestType {
|
switch cresp.RequestType {
|
||||||
case action.RemoteSourceRequestTypeCreateUserLA:
|
case action.RemoteSourceRequestTypeCreateUserLA:
|
||||||
authresp := cresp.Response.(*action.CreateUserLAResponse)
|
authresp := cresp.Response.(*action.CreateUserLAResponse)
|
||||||
response = &CreateUserLAResponse{
|
response = &gwapitypes.CreateUserLAResponse{
|
||||||
LinkedAccount: authresp.LinkedAccount,
|
LinkedAccount: &gwapitypes.LinkedAccount{
|
||||||
|
ID: authresp.LinkedAccount.ID,
|
||||||
|
RemoteUserID: authresp.LinkedAccount.RemoteUserID,
|
||||||
|
RemoteUserName: authresp.LinkedAccount.RemoteUserName,
|
||||||
|
RemoteUserAvatarURL: authresp.LinkedAccount.RemoteUserAvatarURL,
|
||||||
|
RemoteSourceID: authresp.LinkedAccount.RemoteUserID,
|
||||||
|
},
|
||||||
}
|
}
|
||||||
|
|
||||||
case action.RemoteSourceRequestTypeLoginUser:
|
case action.RemoteSourceRequestTypeLoginUser:
|
||||||
authresp := cresp.Response.(*action.LoginUserResponse)
|
authresp := cresp.Response.(*action.LoginUserResponse)
|
||||||
response = &LoginUserResponse{
|
response = &gwapitypes.LoginUserResponse{
|
||||||
Token: authresp.Token,
|
Token: authresp.Token,
|
||||||
User: createUserResponse(authresp.User),
|
User: createUserResponse(authresp.User),
|
||||||
}
|
}
|
||||||
|
|
||||||
case action.RemoteSourceRequestTypeAuthorize:
|
case action.RemoteSourceRequestTypeAuthorize:
|
||||||
authresp := cresp.Response.(*action.AuthorizeResponse)
|
authresp := cresp.Response.(*action.AuthorizeResponse)
|
||||||
response = &AuthorizeResponse{
|
response = &gwapitypes.AuthorizeResponse{
|
||||||
RemoteUserInfo: authresp.RemoteUserInfo,
|
RemoteUserInfo: &gwapitypes.UserInfo{
|
||||||
|
ID: authresp.RemoteUserInfo.ID,
|
||||||
|
LoginName: authresp.RemoteUserInfo.LoginName,
|
||||||
|
Email: authresp.RemoteUserInfo.Email,
|
||||||
|
},
|
||||||
RemoteSourceName: authresp.RemoteSourceName,
|
RemoteSourceName: authresp.RemoteSourceName,
|
||||||
}
|
}
|
||||||
|
|
||||||
case action.RemoteSourceRequestTypeRegisterUser:
|
case action.RemoteSourceRequestTypeRegisterUser:
|
||||||
response = &RegisterUserResponse{}
|
response = &gwapitypes.RegisterUserResponse{}
|
||||||
}
|
}
|
||||||
|
|
||||||
res := RemoteSourceAuthResult{
|
res := gwapitypes.RemoteSourceAuthResult{
|
||||||
RequestType: string(cresp.RequestType),
|
RequestType: string(cresp.RequestType),
|
||||||
Response: response,
|
Response: response,
|
||||||
}
|
}
|
||||||
|
|
|
@ -19,20 +19,16 @@ import (
|
||||||
"net/http"
|
"net/http"
|
||||||
"strconv"
|
"strconv"
|
||||||
|
|
||||||
cstypes "agola.io/agola/internal/services/configstore/types"
|
|
||||||
"agola.io/agola/internal/services/gateway/action"
|
"agola.io/agola/internal/services/gateway/action"
|
||||||
"agola.io/agola/internal/util"
|
"agola.io/agola/internal/util"
|
||||||
|
cstypes "agola.io/agola/services/configstore/types"
|
||||||
|
gwapitypes "agola.io/agola/services/gateway/api/types"
|
||||||
"go.uber.org/zap"
|
"go.uber.org/zap"
|
||||||
errors "golang.org/x/xerrors"
|
errors "golang.org/x/xerrors"
|
||||||
|
|
||||||
"github.com/gorilla/mux"
|
"github.com/gorilla/mux"
|
||||||
)
|
)
|
||||||
|
|
||||||
type CreateOrgRequest struct {
|
|
||||||
Name string `json:"name"`
|
|
||||||
Visibility cstypes.Visibility `json:"visibility"`
|
|
||||||
}
|
|
||||||
|
|
||||||
type CreateOrgHandler struct {
|
type CreateOrgHandler struct {
|
||||||
log *zap.SugaredLogger
|
log *zap.SugaredLogger
|
||||||
ah *action.ActionHandler
|
ah *action.ActionHandler
|
||||||
|
@ -51,7 +47,7 @@ func (h *CreateOrgHandler) ServeHTTP(w http.ResponseWriter, r *http.Request) {
|
||||||
userID = userIDVal.(string)
|
userID = userIDVal.(string)
|
||||||
}
|
}
|
||||||
|
|
||||||
var req CreateOrgRequest
|
var req gwapitypes.CreateOrgRequest
|
||||||
d := json.NewDecoder(r.Body)
|
d := json.NewDecoder(r.Body)
|
||||||
if err := d.Decode(&req); err != nil {
|
if err := d.Decode(&req); err != nil {
|
||||||
httpError(w, util.NewErrBadRequest(err))
|
httpError(w, util.NewErrBadRequest(err))
|
||||||
|
@ -60,7 +56,7 @@ func (h *CreateOrgHandler) ServeHTTP(w http.ResponseWriter, r *http.Request) {
|
||||||
|
|
||||||
creq := &action.CreateOrgRequest{
|
creq := &action.CreateOrgRequest{
|
||||||
Name: req.Name,
|
Name: req.Name,
|
||||||
Visibility: req.Visibility,
|
Visibility: cstypes.Visibility(req.Visibility),
|
||||||
CreatorUserID: userID,
|
CreatorUserID: userID,
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -127,17 +123,11 @@ func (h *OrgHandler) ServeHTTP(w http.ResponseWriter, r *http.Request) {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
type OrgResponse struct {
|
func createOrgResponse(o *cstypes.Organization) *gwapitypes.OrgResponse {
|
||||||
ID string `json:"id"`
|
org := &gwapitypes.OrgResponse{
|
||||||
Name string `json:"name"`
|
|
||||||
Visibility cstypes.Visibility `json:"visibility,omitempty"`
|
|
||||||
}
|
|
||||||
|
|
||||||
func createOrgResponse(o *cstypes.Organization) *OrgResponse {
|
|
||||||
org := &OrgResponse{
|
|
||||||
ID: o.ID,
|
ID: o.ID,
|
||||||
Name: o.Name,
|
Name: o.Name,
|
||||||
Visibility: o.Visibility,
|
Visibility: gwapitypes.Visibility(o.Visibility),
|
||||||
}
|
}
|
||||||
return org
|
return org
|
||||||
}
|
}
|
||||||
|
@ -190,7 +180,7 @@ func (h *OrgsHandler) ServeHTTP(w http.ResponseWriter, r *http.Request) {
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
orgs := make([]*OrgResponse, len(csorgs))
|
orgs := make([]*gwapitypes.OrgResponse, len(csorgs))
|
||||||
for i, p := range csorgs {
|
for i, p := range csorgs {
|
||||||
orgs[i] = createOrgResponse(p)
|
orgs[i] = createOrgResponse(p)
|
||||||
}
|
}
|
||||||
|
@ -199,20 +189,10 @@ func (h *OrgsHandler) ServeHTTP(w http.ResponseWriter, r *http.Request) {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
type OrgMembersResponse struct {
|
func createOrgMemberResponse(user *cstypes.User, role cstypes.MemberRole) *gwapitypes.OrgMemberResponse {
|
||||||
Organization *OrgResponse `json:"organization"`
|
return &gwapitypes.OrgMemberResponse{
|
||||||
Members []*OrgMemberResponse `json:"members"`
|
|
||||||
}
|
|
||||||
|
|
||||||
type OrgMemberResponse struct {
|
|
||||||
User *UserResponse `json:"user"`
|
|
||||||
Role cstypes.MemberRole `json:"role"`
|
|
||||||
}
|
|
||||||
|
|
||||||
func createOrgMemberResponse(user *cstypes.User, role cstypes.MemberRole) *OrgMemberResponse {
|
|
||||||
return &OrgMemberResponse{
|
|
||||||
User: createUserResponse(user),
|
User: createUserResponse(user),
|
||||||
Role: role,
|
Role: gwapitypes.MemberRole(role),
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -237,9 +217,9 @@ func (h *OrgMembersHandler) ServeHTTP(w http.ResponseWriter, r *http.Request) {
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
res := &OrgMembersResponse{
|
res := &gwapitypes.OrgMembersResponse{
|
||||||
Organization: createOrgResponse(ares.Organization),
|
Organization: createOrgResponse(ares.Organization),
|
||||||
Members: make([]*OrgMemberResponse, len(ares.Members)),
|
Members: make([]*gwapitypes.OrgMemberResponse, len(ares.Members)),
|
||||||
}
|
}
|
||||||
for i, m := range ares.Members {
|
for i, m := range ares.Members {
|
||||||
res.Members[i] = createOrgMemberResponse(m.User, m.Role)
|
res.Members[i] = createOrgMemberResponse(m.User, m.Role)
|
||||||
|
@ -249,25 +229,16 @@ func (h *OrgMembersHandler) ServeHTTP(w http.ResponseWriter, r *http.Request) {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
type AddOrgMemberResponse struct {
|
func createAddOrgMemberResponse(org *cstypes.Organization, user *cstypes.User, role cstypes.MemberRole) *gwapitypes.AddOrgMemberResponse {
|
||||||
Organization *OrgResponse `json:"organization"`
|
return &gwapitypes.AddOrgMemberResponse{
|
||||||
OrgMemberResponse
|
|
||||||
}
|
|
||||||
|
|
||||||
func createAddOrgMemberResponse(org *cstypes.Organization, user *cstypes.User, role cstypes.MemberRole) *AddOrgMemberResponse {
|
|
||||||
return &AddOrgMemberResponse{
|
|
||||||
Organization: createOrgResponse(org),
|
Organization: createOrgResponse(org),
|
||||||
OrgMemberResponse: OrgMemberResponse{
|
OrgMemberResponse: gwapitypes.OrgMemberResponse{
|
||||||
User: createUserResponse(user),
|
User: createUserResponse(user),
|
||||||
Role: role,
|
Role: gwapitypes.MemberRole(role),
|
||||||
},
|
},
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
type AddOrgMemberRequest struct {
|
|
||||||
Role cstypes.MemberRole `json:"role"`
|
|
||||||
}
|
|
||||||
|
|
||||||
type AddOrgMemberHandler struct {
|
type AddOrgMemberHandler struct {
|
||||||
log *zap.SugaredLogger
|
log *zap.SugaredLogger
|
||||||
ah *action.ActionHandler
|
ah *action.ActionHandler
|
||||||
|
@ -284,14 +255,14 @@ func (h *AddOrgMemberHandler) ServeHTTP(w http.ResponseWriter, r *http.Request)
|
||||||
orgRef := vars["orgref"]
|
orgRef := vars["orgref"]
|
||||||
userRef := vars["userref"]
|
userRef := vars["userref"]
|
||||||
|
|
||||||
var req AddOrgMemberRequest
|
var req gwapitypes.AddOrgMemberRequest
|
||||||
d := json.NewDecoder(r.Body)
|
d := json.NewDecoder(r.Body)
|
||||||
if err := d.Decode(&req); err != nil {
|
if err := d.Decode(&req); err != nil {
|
||||||
httpError(w, util.NewErrBadRequest(err))
|
httpError(w, util.NewErrBadRequest(err))
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
ares, err := h.ah.AddOrgMember(ctx, orgRef, userRef, req.Role)
|
ares, err := h.ah.AddOrgMember(ctx, orgRef, userRef, cstypes.MemberRole(req.Role))
|
||||||
if httpError(w, err) {
|
if httpError(w, err) {
|
||||||
h.log.Errorf("err: %+v", err)
|
h.log.Errorf("err: %+v", err)
|
||||||
return
|
return
|
||||||
|
|
|
@ -19,24 +19,16 @@ import (
|
||||||
"net/http"
|
"net/http"
|
||||||
"net/url"
|
"net/url"
|
||||||
|
|
||||||
csapi "agola.io/agola/internal/services/configstore/api"
|
|
||||||
cstypes "agola.io/agola/internal/services/configstore/types"
|
|
||||||
"agola.io/agola/internal/services/gateway/action"
|
"agola.io/agola/internal/services/gateway/action"
|
||||||
"agola.io/agola/internal/util"
|
"agola.io/agola/internal/util"
|
||||||
|
csapitypes "agola.io/agola/services/configstore/api/types"
|
||||||
|
cstypes "agola.io/agola/services/configstore/types"
|
||||||
|
gwapitypes "agola.io/agola/services/gateway/api/types"
|
||||||
|
|
||||||
"github.com/gorilla/mux"
|
"github.com/gorilla/mux"
|
||||||
"go.uber.org/zap"
|
"go.uber.org/zap"
|
||||||
)
|
)
|
||||||
|
|
||||||
type CreateProjectRequest struct {
|
|
||||||
Name string `json:"name,omitempty"`
|
|
||||||
ParentRef string `json:"parent_ref,omitempty"`
|
|
||||||
Visibility cstypes.Visibility `json:"visibility,omitempty"`
|
|
||||||
RepoPath string `json:"repo_path,omitempty"`
|
|
||||||
RemoteSourceName string `json:"remote_source_name,omitempty"`
|
|
||||||
SkipSSHHostKeyCheck bool `json:"skip_ssh_host_key_check,omitempty"`
|
|
||||||
}
|
|
||||||
|
|
||||||
type CreateProjectHandler struct {
|
type CreateProjectHandler struct {
|
||||||
log *zap.SugaredLogger
|
log *zap.SugaredLogger
|
||||||
ah *action.ActionHandler
|
ah *action.ActionHandler
|
||||||
|
@ -49,7 +41,7 @@ func NewCreateProjectHandler(logger *zap.Logger, ah *action.ActionHandler) *Crea
|
||||||
func (h *CreateProjectHandler) ServeHTTP(w http.ResponseWriter, r *http.Request) {
|
func (h *CreateProjectHandler) ServeHTTP(w http.ResponseWriter, r *http.Request) {
|
||||||
ctx := r.Context()
|
ctx := r.Context()
|
||||||
|
|
||||||
var req CreateProjectRequest
|
var req gwapitypes.CreateProjectRequest
|
||||||
d := json.NewDecoder(r.Body)
|
d := json.NewDecoder(r.Body)
|
||||||
if err := d.Decode(&req); err != nil {
|
if err := d.Decode(&req); err != nil {
|
||||||
httpError(w, util.NewErrBadRequest(err))
|
httpError(w, util.NewErrBadRequest(err))
|
||||||
|
@ -59,7 +51,7 @@ func (h *CreateProjectHandler) ServeHTTP(w http.ResponseWriter, r *http.Request)
|
||||||
areq := &action.CreateProjectRequest{
|
areq := &action.CreateProjectRequest{
|
||||||
Name: req.Name,
|
Name: req.Name,
|
||||||
ParentRef: req.ParentRef,
|
ParentRef: req.ParentRef,
|
||||||
Visibility: req.Visibility,
|
Visibility: cstypes.Visibility(req.Visibility),
|
||||||
RepoPath: req.RepoPath,
|
RepoPath: req.RepoPath,
|
||||||
RemoteSourceName: req.RemoteSourceName,
|
RemoteSourceName: req.RemoteSourceName,
|
||||||
SkipSSHHostKeyCheck: req.SkipSSHHostKeyCheck,
|
SkipSSHHostKeyCheck: req.SkipSSHHostKeyCheck,
|
||||||
|
@ -77,11 +69,6 @@ func (h *CreateProjectHandler) ServeHTTP(w http.ResponseWriter, r *http.Request)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
type UpdateProjectRequest struct {
|
|
||||||
Name string `json:"name,omitempty"`
|
|
||||||
Visibility cstypes.Visibility `json:"visibility,omitempty"`
|
|
||||||
}
|
|
||||||
|
|
||||||
type UpdateProjectHandler struct {
|
type UpdateProjectHandler struct {
|
||||||
log *zap.SugaredLogger
|
log *zap.SugaredLogger
|
||||||
ah *action.ActionHandler
|
ah *action.ActionHandler
|
||||||
|
@ -100,7 +87,7 @@ func (h *UpdateProjectHandler) ServeHTTP(w http.ResponseWriter, r *http.Request)
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
var req UpdateProjectRequest
|
var req gwapitypes.UpdateProjectRequest
|
||||||
d := json.NewDecoder(r.Body)
|
d := json.NewDecoder(r.Body)
|
||||||
if err := d.Decode(&req); err != nil {
|
if err := d.Decode(&req); err != nil {
|
||||||
httpError(w, util.NewErrBadRequest(err))
|
httpError(w, util.NewErrBadRequest(err))
|
||||||
|
@ -109,7 +96,7 @@ func (h *UpdateProjectHandler) ServeHTTP(w http.ResponseWriter, r *http.Request)
|
||||||
|
|
||||||
areq := &action.UpdateProjectRequest{
|
areq := &action.UpdateProjectRequest{
|
||||||
Name: req.Name,
|
Name: req.Name,
|
||||||
Visibility: req.Visibility,
|
Visibility: cstypes.Visibility(req.Visibility),
|
||||||
}
|
}
|
||||||
project, err := h.ah.UpdateProject(ctx, projectRef, areq)
|
project, err := h.ah.UpdateProject(ctx, projectRef, areq)
|
||||||
if httpError(w, err) {
|
if httpError(w, err) {
|
||||||
|
@ -239,35 +226,19 @@ func (h *ProjectHandler) ServeHTTP(w http.ResponseWriter, r *http.Request) {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
type ProjectResponse struct {
|
func createProjectResponse(r *csapitypes.Project) *gwapitypes.ProjectResponse {
|
||||||
ID string `json:"id,omitempty"`
|
res := &gwapitypes.ProjectResponse{
|
||||||
Name string `json:"name,omitempty"`
|
|
||||||
Path string `json:"path,omitempty"`
|
|
||||||
ParentPath string `json:"parent_path,omitempty"`
|
|
||||||
Visibility cstypes.Visibility `json:"visibility,omitempty"`
|
|
||||||
GlobalVisibility string `json:"global_visibility,omitempty"`
|
|
||||||
}
|
|
||||||
|
|
||||||
func createProjectResponse(r *csapi.Project) *ProjectResponse {
|
|
||||||
res := &ProjectResponse{
|
|
||||||
ID: r.ID,
|
ID: r.ID,
|
||||||
Name: r.Name,
|
Name: r.Name,
|
||||||
Path: r.Path,
|
Path: r.Path,
|
||||||
ParentPath: r.ParentPath,
|
ParentPath: r.ParentPath,
|
||||||
Visibility: r.Visibility,
|
Visibility: gwapitypes.Visibility(r.Visibility),
|
||||||
GlobalVisibility: string(r.GlobalVisibility),
|
GlobalVisibility: string(r.GlobalVisibility),
|
||||||
}
|
}
|
||||||
|
|
||||||
return res
|
return res
|
||||||
}
|
}
|
||||||
|
|
||||||
type ProjectCreateRunRequest struct {
|
|
||||||
Branch string `json:"branch,omitempty"`
|
|
||||||
Tag string `json:"tag,omitempty"`
|
|
||||||
Ref string `json:"ref,omitempty"`
|
|
||||||
CommitSHA string `json:"commit_sha,omitempty"`
|
|
||||||
}
|
|
||||||
|
|
||||||
type ProjectCreateRunHandler struct {
|
type ProjectCreateRunHandler struct {
|
||||||
log *zap.SugaredLogger
|
log *zap.SugaredLogger
|
||||||
ah *action.ActionHandler
|
ah *action.ActionHandler
|
||||||
|
@ -286,7 +257,7 @@ func (h *ProjectCreateRunHandler) ServeHTTP(w http.ResponseWriter, r *http.Reque
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
var req ProjectCreateRunRequest
|
var req gwapitypes.ProjectCreateRunRequest
|
||||||
d := json.NewDecoder(r.Body)
|
d := json.NewDecoder(r.Body)
|
||||||
if err := d.Decode(&req); err != nil {
|
if err := d.Decode(&req); err != nil {
|
||||||
httpError(w, util.NewErrBadRequest(err))
|
httpError(w, util.NewErrBadRequest(err))
|
||||||
|
|
|
@ -19,22 +19,17 @@ import (
|
||||||
"net/http"
|
"net/http"
|
||||||
"net/url"
|
"net/url"
|
||||||
|
|
||||||
csapi "agola.io/agola/internal/services/configstore/api"
|
|
||||||
cstypes "agola.io/agola/internal/services/configstore/types"
|
|
||||||
"agola.io/agola/internal/services/gateway/action"
|
"agola.io/agola/internal/services/gateway/action"
|
||||||
"agola.io/agola/internal/util"
|
"agola.io/agola/internal/util"
|
||||||
|
csapitypes "agola.io/agola/services/configstore/api/types"
|
||||||
|
cstypes "agola.io/agola/services/configstore/types"
|
||||||
|
gwapitypes "agola.io/agola/services/gateway/api/types"
|
||||||
errors "golang.org/x/xerrors"
|
errors "golang.org/x/xerrors"
|
||||||
|
|
||||||
"github.com/gorilla/mux"
|
"github.com/gorilla/mux"
|
||||||
"go.uber.org/zap"
|
"go.uber.org/zap"
|
||||||
)
|
)
|
||||||
|
|
||||||
type CreateProjectGroupRequest struct {
|
|
||||||
Name string `json:"name"`
|
|
||||||
ParentRef string `json:"parent_ref"`
|
|
||||||
Visibility cstypes.Visibility `json:"visibility"`
|
|
||||||
}
|
|
||||||
|
|
||||||
type CreateProjectGroupHandler struct {
|
type CreateProjectGroupHandler struct {
|
||||||
log *zap.SugaredLogger
|
log *zap.SugaredLogger
|
||||||
ah *action.ActionHandler
|
ah *action.ActionHandler
|
||||||
|
@ -47,7 +42,7 @@ func NewCreateProjectGroupHandler(logger *zap.Logger, ah *action.ActionHandler)
|
||||||
func (h *CreateProjectGroupHandler) ServeHTTP(w http.ResponseWriter, r *http.Request) {
|
func (h *CreateProjectGroupHandler) ServeHTTP(w http.ResponseWriter, r *http.Request) {
|
||||||
ctx := r.Context()
|
ctx := r.Context()
|
||||||
|
|
||||||
var req CreateProjectGroupRequest
|
var req gwapitypes.CreateProjectGroupRequest
|
||||||
d := json.NewDecoder(r.Body)
|
d := json.NewDecoder(r.Body)
|
||||||
if err := d.Decode(&req); err != nil {
|
if err := d.Decode(&req); err != nil {
|
||||||
httpError(w, util.NewErrBadRequest(err))
|
httpError(w, util.NewErrBadRequest(err))
|
||||||
|
@ -64,7 +59,7 @@ func (h *CreateProjectGroupHandler) ServeHTTP(w http.ResponseWriter, r *http.Req
|
||||||
creq := &action.CreateProjectGroupRequest{
|
creq := &action.CreateProjectGroupRequest{
|
||||||
Name: req.Name,
|
Name: req.Name,
|
||||||
ParentRef: req.ParentRef,
|
ParentRef: req.ParentRef,
|
||||||
Visibility: req.Visibility,
|
Visibility: cstypes.Visibility(req.Visibility),
|
||||||
CurrentUserID: userID,
|
CurrentUserID: userID,
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -80,11 +75,6 @@ func (h *CreateProjectGroupHandler) ServeHTTP(w http.ResponseWriter, r *http.Req
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
type UpdateProjectGroupRequest struct {
|
|
||||||
Name string `json:"name,omitempty"`
|
|
||||||
Visibility cstypes.Visibility `json:"visibility,omitempty"`
|
|
||||||
}
|
|
||||||
|
|
||||||
type UpdateProjectGroupHandler struct {
|
type UpdateProjectGroupHandler struct {
|
||||||
log *zap.SugaredLogger
|
log *zap.SugaredLogger
|
||||||
ah *action.ActionHandler
|
ah *action.ActionHandler
|
||||||
|
@ -103,7 +93,7 @@ func (h *UpdateProjectGroupHandler) ServeHTTP(w http.ResponseWriter, r *http.Req
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
var req UpdateProjectGroupRequest
|
var req gwapitypes.UpdateProjectGroupRequest
|
||||||
d := json.NewDecoder(r.Body)
|
d := json.NewDecoder(r.Body)
|
||||||
if err := d.Decode(&req); err != nil {
|
if err := d.Decode(&req); err != nil {
|
||||||
httpError(w, util.NewErrBadRequest(err))
|
httpError(w, util.NewErrBadRequest(err))
|
||||||
|
@ -112,7 +102,7 @@ func (h *UpdateProjectGroupHandler) ServeHTTP(w http.ResponseWriter, r *http.Req
|
||||||
|
|
||||||
areq := &action.UpdateProjectGroupRequest{
|
areq := &action.UpdateProjectGroupRequest{
|
||||||
Name: req.Name,
|
Name: req.Name,
|
||||||
Visibility: req.Visibility,
|
Visibility: cstypes.Visibility(req.Visibility),
|
||||||
}
|
}
|
||||||
projectGroup, err := h.ah.UpdateProjectGroup(ctx, projectGroupRef, areq)
|
projectGroup, err := h.ah.UpdateProjectGroup(ctx, projectGroupRef, areq)
|
||||||
if httpError(w, err) {
|
if httpError(w, err) {
|
||||||
|
@ -209,7 +199,7 @@ func (h *ProjectGroupProjectsHandler) ServeHTTP(w http.ResponseWriter, r *http.R
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
projects := make([]*ProjectResponse, len(csprojects))
|
projects := make([]*gwapitypes.ProjectResponse, len(csprojects))
|
||||||
for i, p := range csprojects {
|
for i, p := range csprojects {
|
||||||
projects[i] = createProjectResponse(p)
|
projects[i] = createProjectResponse(p)
|
||||||
}
|
}
|
||||||
|
@ -243,7 +233,7 @@ func (h *ProjectGroupSubgroupsHandler) ServeHTTP(w http.ResponseWriter, r *http.
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
subgroups := make([]*ProjectGroupResponse, len(cssubgroups))
|
subgroups := make([]*gwapitypes.ProjectGroupResponse, len(cssubgroups))
|
||||||
for i, g := range cssubgroups {
|
for i, g := range cssubgroups {
|
||||||
subgroups[i] = createProjectGroupResponse(g)
|
subgroups[i] = createProjectGroupResponse(g)
|
||||||
}
|
}
|
||||||
|
@ -253,22 +243,13 @@ func (h *ProjectGroupSubgroupsHandler) ServeHTTP(w http.ResponseWriter, r *http.
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
type ProjectGroupResponse struct {
|
func createProjectGroupResponse(r *csapitypes.ProjectGroup) *gwapitypes.ProjectGroupResponse {
|
||||||
ID string `json:"id"`
|
run := &gwapitypes.ProjectGroupResponse{
|
||||||
Name string `json:"name"`
|
|
||||||
Path string `json:"path"`
|
|
||||||
ParentPath string `json:"parent_path"`
|
|
||||||
Visibility cstypes.Visibility `json:"visibility"`
|
|
||||||
GlobalVisibility string `json:"global_visibility"`
|
|
||||||
}
|
|
||||||
|
|
||||||
func createProjectGroupResponse(r *csapi.ProjectGroup) *ProjectGroupResponse {
|
|
||||||
run := &ProjectGroupResponse{
|
|
||||||
ID: r.ID,
|
ID: r.ID,
|
||||||
Name: r.Name,
|
Name: r.Name,
|
||||||
Path: r.Path,
|
Path: r.Path,
|
||||||
ParentPath: r.ParentPath,
|
ParentPath: r.ParentPath,
|
||||||
Visibility: r.Visibility,
|
Visibility: gwapitypes.Visibility(r.Visibility),
|
||||||
GlobalVisibility: string(r.GlobalVisibility),
|
GlobalVisibility: string(r.GlobalVisibility),
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -18,23 +18,19 @@ import (
|
||||||
"net/http"
|
"net/http"
|
||||||
|
|
||||||
gitsource "agola.io/agola/internal/gitsources"
|
gitsource "agola.io/agola/internal/gitsources"
|
||||||
csapi "agola.io/agola/internal/services/configstore/api"
|
|
||||||
cstypes "agola.io/agola/internal/services/configstore/types"
|
|
||||||
"agola.io/agola/internal/services/gateway/action"
|
"agola.io/agola/internal/services/gateway/action"
|
||||||
"agola.io/agola/internal/util"
|
"agola.io/agola/internal/util"
|
||||||
|
csclient "agola.io/agola/services/configstore/client"
|
||||||
|
cstypes "agola.io/agola/services/configstore/types"
|
||||||
|
gwapitypes "agola.io/agola/services/gateway/api/types"
|
||||||
|
|
||||||
"github.com/gorilla/mux"
|
"github.com/gorilla/mux"
|
||||||
"go.uber.org/zap"
|
"go.uber.org/zap"
|
||||||
errors "golang.org/x/xerrors"
|
errors "golang.org/x/xerrors"
|
||||||
)
|
)
|
||||||
|
|
||||||
type RemoteRepoResponse struct {
|
func createRemoteRepoResponse(r *gitsource.RepoInfo) *gwapitypes.RemoteRepoResponse {
|
||||||
ID string `json:"id,omitempty"`
|
rr := &gwapitypes.RemoteRepoResponse{
|
||||||
Path string `json:"path,omitempty"`
|
|
||||||
}
|
|
||||||
|
|
||||||
func createRemoteRepoResponse(r *gitsource.RepoInfo) *RemoteRepoResponse {
|
|
||||||
rr := &RemoteRepoResponse{
|
|
||||||
ID: r.ID,
|
ID: r.ID,
|
||||||
Path: r.Path,
|
Path: r.Path,
|
||||||
}
|
}
|
||||||
|
@ -45,10 +41,10 @@ func createRemoteRepoResponse(r *gitsource.RepoInfo) *RemoteRepoResponse {
|
||||||
type UserRemoteReposHandler struct {
|
type UserRemoteReposHandler struct {
|
||||||
log *zap.SugaredLogger
|
log *zap.SugaredLogger
|
||||||
ah *action.ActionHandler
|
ah *action.ActionHandler
|
||||||
configstoreClient *csapi.Client
|
configstoreClient *csclient.Client
|
||||||
}
|
}
|
||||||
|
|
||||||
func NewUserRemoteReposHandler(logger *zap.Logger, ah *action.ActionHandler, configstoreClient *csapi.Client) *UserRemoteReposHandler {
|
func NewUserRemoteReposHandler(logger *zap.Logger, ah *action.ActionHandler, configstoreClient *csclient.Client) *UserRemoteReposHandler {
|
||||||
return &UserRemoteReposHandler{log: logger.Sugar(), ah: ah, configstoreClient: configstoreClient}
|
return &UserRemoteReposHandler{log: logger.Sugar(), ah: ah, configstoreClient: configstoreClient}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -105,7 +101,7 @@ func (h *UserRemoteReposHandler) ServeHTTP(w http.ResponseWriter, r *http.Reques
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
repos := make([]*RemoteRepoResponse, len(remoteRepos))
|
repos := make([]*gwapitypes.RemoteRepoResponse, len(remoteRepos))
|
||||||
for i, r := range remoteRepos {
|
for i, r := range remoteRepos {
|
||||||
repos[i] = createRemoteRepoResponse(r)
|
repos[i] = createRemoteRepoResponse(r)
|
||||||
}
|
}
|
||||||
|
|
|
@ -19,29 +19,16 @@ import (
|
||||||
"net/http"
|
"net/http"
|
||||||
"strconv"
|
"strconv"
|
||||||
|
|
||||||
cstypes "agola.io/agola/internal/services/configstore/types"
|
|
||||||
"agola.io/agola/internal/services/gateway/action"
|
"agola.io/agola/internal/services/gateway/action"
|
||||||
"agola.io/agola/internal/util"
|
"agola.io/agola/internal/util"
|
||||||
|
cstypes "agola.io/agola/services/configstore/types"
|
||||||
|
gwapitypes "agola.io/agola/services/gateway/api/types"
|
||||||
"go.uber.org/zap"
|
"go.uber.org/zap"
|
||||||
|
|
||||||
"github.com/gorilla/mux"
|
"github.com/gorilla/mux"
|
||||||
errors "golang.org/x/xerrors"
|
errors "golang.org/x/xerrors"
|
||||||
)
|
)
|
||||||
|
|
||||||
type CreateRemoteSourceRequest struct {
|
|
||||||
Name string `json:"name"`
|
|
||||||
APIURL string `json:"apiurl"`
|
|
||||||
Type string `json:"type"`
|
|
||||||
AuthType string `json:"auth_type"`
|
|
||||||
SkipVerify bool `json:"skip_verify"`
|
|
||||||
Oauth2ClientID string `json:"oauth_2_client_id"`
|
|
||||||
Oauth2ClientSecret string `json:"oauth_2_client_secret"`
|
|
||||||
SSHHostKey string `json:"ssh_host_key"`
|
|
||||||
SkipSSHHostKeyCheck bool `json:"skip_ssh_host_key_check"`
|
|
||||||
RegistrationEnabled *bool `json:"registration_enabled"`
|
|
||||||
LoginEnabled *bool `json:"login_enabled"`
|
|
||||||
}
|
|
||||||
|
|
||||||
type CreateRemoteSourceHandler struct {
|
type CreateRemoteSourceHandler struct {
|
||||||
log *zap.SugaredLogger
|
log *zap.SugaredLogger
|
||||||
ah *action.ActionHandler
|
ah *action.ActionHandler
|
||||||
|
@ -54,7 +41,7 @@ func NewCreateRemoteSourceHandler(logger *zap.Logger, ah *action.ActionHandler)
|
||||||
func (h *CreateRemoteSourceHandler) ServeHTTP(w http.ResponseWriter, r *http.Request) {
|
func (h *CreateRemoteSourceHandler) ServeHTTP(w http.ResponseWriter, r *http.Request) {
|
||||||
ctx := r.Context()
|
ctx := r.Context()
|
||||||
|
|
||||||
var req CreateRemoteSourceRequest
|
var req gwapitypes.CreateRemoteSourceRequest
|
||||||
d := json.NewDecoder(r.Body)
|
d := json.NewDecoder(r.Body)
|
||||||
if err := d.Decode(&req); err != nil {
|
if err := d.Decode(&req); err != nil {
|
||||||
httpError(w, util.NewErrBadRequest(err))
|
httpError(w, util.NewErrBadRequest(err))
|
||||||
|
@ -86,18 +73,6 @@ func (h *CreateRemoteSourceHandler) ServeHTTP(w http.ResponseWriter, r *http.Req
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
type UpdateRemoteSourceRequest struct {
|
|
||||||
Name *string `json:"name"`
|
|
||||||
APIURL *string `json:"apiurl"`
|
|
||||||
SkipVerify *bool `json:"skip_verify"`
|
|
||||||
Oauth2ClientID *string `json:"oauth_2_client_id"`
|
|
||||||
Oauth2ClientSecret *string `json:"oauth_2_client_secret"`
|
|
||||||
SSHHostKey *string `json:"ssh_host_key"`
|
|
||||||
SkipSSHHostKeyCheck *bool `json:"skip_ssh_host_key_check"`
|
|
||||||
RegistrationEnabled *bool `json:"registration_enabled"`
|
|
||||||
LoginEnabled *bool `json:"login_enabled"`
|
|
||||||
}
|
|
||||||
|
|
||||||
type UpdateRemoteSourceHandler struct {
|
type UpdateRemoteSourceHandler struct {
|
||||||
log *zap.SugaredLogger
|
log *zap.SugaredLogger
|
||||||
ah *action.ActionHandler
|
ah *action.ActionHandler
|
||||||
|
@ -112,7 +87,7 @@ func (h *UpdateRemoteSourceHandler) ServeHTTP(w http.ResponseWriter, r *http.Req
|
||||||
vars := mux.Vars(r)
|
vars := mux.Vars(r)
|
||||||
rsRef := vars["remotesourceref"]
|
rsRef := vars["remotesourceref"]
|
||||||
|
|
||||||
var req UpdateRemoteSourceRequest
|
var req gwapitypes.UpdateRemoteSourceRequest
|
||||||
d := json.NewDecoder(r.Body)
|
d := json.NewDecoder(r.Body)
|
||||||
if err := d.Decode(&req); err != nil {
|
if err := d.Decode(&req); err != nil {
|
||||||
httpError(w, util.NewErrBadRequest(err))
|
httpError(w, util.NewErrBadRequest(err))
|
||||||
|
@ -144,16 +119,8 @@ func (h *UpdateRemoteSourceHandler) ServeHTTP(w http.ResponseWriter, r *http.Req
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
type RemoteSourceResponse struct {
|
func createRemoteSourceResponse(r *cstypes.RemoteSource) *gwapitypes.RemoteSourceResponse {
|
||||||
ID string `json:"id"`
|
rs := &gwapitypes.RemoteSourceResponse{
|
||||||
Name string `json:"name"`
|
|
||||||
AuthType string `json:"auth_type"`
|
|
||||||
RegistrationEnabled bool `json:"registration_enabled"`
|
|
||||||
LoginEnabled bool `json:"login_enabled"`
|
|
||||||
}
|
|
||||||
|
|
||||||
func createRemoteSourceResponse(r *cstypes.RemoteSource) *RemoteSourceResponse {
|
|
||||||
rs := &RemoteSourceResponse{
|
|
||||||
ID: r.ID,
|
ID: r.ID,
|
||||||
Name: r.Name,
|
Name: r.Name,
|
||||||
AuthType: string(r.AuthType),
|
AuthType: string(r.AuthType),
|
||||||
|
@ -237,7 +204,7 @@ func (h *RemoteSourcesHandler) ServeHTTP(w http.ResponseWriter, r *http.Request)
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
remoteSources := make([]*RemoteSourceResponse, len(csRemoteSources))
|
remoteSources := make([]*gwapitypes.RemoteSourceResponse, len(csRemoteSources))
|
||||||
for i, rs := range csRemoteSources {
|
for i, rs := range csRemoteSources {
|
||||||
remoteSources[i] = createRemoteSourceResponse(rs)
|
remoteSources[i] = createRemoteSourceResponse(rs)
|
||||||
}
|
}
|
||||||
|
|
|
@ -19,103 +19,19 @@ import (
|
||||||
"io"
|
"io"
|
||||||
"net/http"
|
"net/http"
|
||||||
"strconv"
|
"strconv"
|
||||||
"time"
|
|
||||||
|
|
||||||
"agola.io/agola/internal/services/gateway/action"
|
"agola.io/agola/internal/services/gateway/action"
|
||||||
rstypes "agola.io/agola/internal/services/runservice/types"
|
|
||||||
"agola.io/agola/internal/util"
|
"agola.io/agola/internal/util"
|
||||||
"go.uber.org/zap"
|
gwapitypes "agola.io/agola/services/gateway/api/types"
|
||||||
errors "golang.org/x/xerrors"
|
rstypes "agola.io/agola/services/runservice/types"
|
||||||
|
|
||||||
"github.com/gorilla/mux"
|
"github.com/gorilla/mux"
|
||||||
|
"go.uber.org/zap"
|
||||||
|
errors "golang.org/x/xerrors"
|
||||||
)
|
)
|
||||||
|
|
||||||
type RunsResponse struct {
|
func createRunResponse(r *rstypes.Run, rc *rstypes.RunConfig) *gwapitypes.RunResponse {
|
||||||
ID string `json:"id"`
|
run := &gwapitypes.RunResponse{
|
||||||
Counter uint64 `json:"counter"`
|
|
||||||
Name string `json:"name"`
|
|
||||||
Annotations map[string]string `json:"annotations"`
|
|
||||||
Phase rstypes.RunPhase `json:"phase"`
|
|
||||||
Result rstypes.RunResult `json:"result"`
|
|
||||||
|
|
||||||
TasksWaitingApproval []string `json:"tasks_waiting_approval"`
|
|
||||||
|
|
||||||
EnqueueTime *time.Time `json:"enqueue_time"`
|
|
||||||
StartTime *time.Time `json:"start_time"`
|
|
||||||
EndTime *time.Time `json:"end_time"`
|
|
||||||
}
|
|
||||||
|
|
||||||
type RunResponse struct {
|
|
||||||
ID string `json:"id"`
|
|
||||||
Counter uint64 `json:"counter"`
|
|
||||||
Name string `json:"name"`
|
|
||||||
Annotations map[string]string `json:"annotations"`
|
|
||||||
Phase rstypes.RunPhase `json:"phase"`
|
|
||||||
Result rstypes.RunResult `json:"result"`
|
|
||||||
SetupErrors []string `json:"setup_errors"`
|
|
||||||
Stopping bool `json:"stopping"`
|
|
||||||
|
|
||||||
Tasks map[string]*RunResponseTask `json:"tasks"`
|
|
||||||
TasksWaitingApproval []string `json:"tasks_waiting_approval"`
|
|
||||||
|
|
||||||
EnqueueTime *time.Time `json:"enqueue_time"`
|
|
||||||
StartTime *time.Time `json:"start_time"`
|
|
||||||
EndTime *time.Time `json:"end_time"`
|
|
||||||
|
|
||||||
CanRestartFromScratch bool `json:"can_restart_from_scratch"`
|
|
||||||
CanRestartFromFailedTasks bool `json:"can_restart_from_failed_tasks"`
|
|
||||||
}
|
|
||||||
|
|
||||||
type RunResponseTask struct {
|
|
||||||
ID string `json:"id"`
|
|
||||||
Name string `json:"name"`
|
|
||||||
Status rstypes.RunTaskStatus `json:"status"`
|
|
||||||
Level int `json:"level"`
|
|
||||||
Depends map[string]*rstypes.RunConfigTaskDepend `json:"depends"`
|
|
||||||
|
|
||||||
WaitingApproval bool `json:"waiting_approval"`
|
|
||||||
Approved bool `json:"approved"`
|
|
||||||
ApprovalAnnotations map[string]string `json:"approval_annotations"`
|
|
||||||
|
|
||||||
StartTime *time.Time `json:"start_time"`
|
|
||||||
EndTime *time.Time `json:"end_time"`
|
|
||||||
}
|
|
||||||
|
|
||||||
type RunTaskResponse struct {
|
|
||||||
ID string `json:"id"`
|
|
||||||
Name string `json:"name"`
|
|
||||||
Status rstypes.RunTaskStatus `json:"status"`
|
|
||||||
|
|
||||||
WaitingApproval bool `json:"waiting_approval"`
|
|
||||||
Approved bool `json:"approved"`
|
|
||||||
ApprovalAnnotations map[string]string `json:"approval_annotations"`
|
|
||||||
|
|
||||||
SetupStep *RunTaskResponseSetupStep `json:"setup_step"`
|
|
||||||
Steps []*RunTaskResponseStep `json:"steps"`
|
|
||||||
|
|
||||||
StartTime *time.Time `json:"start_time"`
|
|
||||||
EndTime *time.Time `json:"end_time"`
|
|
||||||
}
|
|
||||||
|
|
||||||
type RunTaskResponseSetupStep struct {
|
|
||||||
Phase rstypes.ExecutorTaskPhase `json:"phase"`
|
|
||||||
Name string `json:"name"`
|
|
||||||
|
|
||||||
StartTime *time.Time `json:"start_time"`
|
|
||||||
EndTime *time.Time `json:"end_time"`
|
|
||||||
}
|
|
||||||
|
|
||||||
type RunTaskResponseStep struct {
|
|
||||||
Phase rstypes.ExecutorTaskPhase `json:"phase"`
|
|
||||||
Name string `json:"name"`
|
|
||||||
Command string `json:"command"`
|
|
||||||
|
|
||||||
StartTime *time.Time `json:"start_time"`
|
|
||||||
EndTime *time.Time `json:"end_time"`
|
|
||||||
}
|
|
||||||
|
|
||||||
func createRunResponse(r *rstypes.Run, rc *rstypes.RunConfig) *RunResponse {
|
|
||||||
run := &RunResponse{
|
|
||||||
ID: r.ID,
|
ID: r.ID,
|
||||||
Counter: r.Counter,
|
Counter: r.Counter,
|
||||||
Name: r.Name,
|
Name: r.Name,
|
||||||
|
@ -125,7 +41,7 @@ func createRunResponse(r *rstypes.Run, rc *rstypes.RunConfig) *RunResponse {
|
||||||
Stopping: r.Stop,
|
Stopping: r.Stop,
|
||||||
SetupErrors: rc.SetupErrors,
|
SetupErrors: rc.SetupErrors,
|
||||||
|
|
||||||
Tasks: make(map[string]*RunResponseTask),
|
Tasks: make(map[string]*gwapitypes.RunResponseTask),
|
||||||
TasksWaitingApproval: r.TasksWaitingApproval(),
|
TasksWaitingApproval: r.TasksWaitingApproval(),
|
||||||
|
|
||||||
EnqueueTime: r.EnqueueTime,
|
EnqueueTime: r.EnqueueTime,
|
||||||
|
@ -144,8 +60,8 @@ func createRunResponse(r *rstypes.Run, rc *rstypes.RunConfig) *RunResponse {
|
||||||
return run
|
return run
|
||||||
}
|
}
|
||||||
|
|
||||||
func createRunResponseTask(r *rstypes.Run, rt *rstypes.RunTask, rct *rstypes.RunConfigTask) *RunResponseTask {
|
func createRunResponseTask(r *rstypes.Run, rt *rstypes.RunTask, rct *rstypes.RunConfigTask) *gwapitypes.RunResponseTask {
|
||||||
t := &RunResponseTask{
|
t := &gwapitypes.RunResponseTask{
|
||||||
ID: rt.ID,
|
ID: rt.ID,
|
||||||
Name: rct.Name,
|
Name: rct.Name,
|
||||||
Status: rt.Status,
|
Status: rt.Status,
|
||||||
|
@ -164,8 +80,8 @@ func createRunResponseTask(r *rstypes.Run, rt *rstypes.RunTask, rct *rstypes.Run
|
||||||
return t
|
return t
|
||||||
}
|
}
|
||||||
|
|
||||||
func createRunTaskResponse(rt *rstypes.RunTask, rct *rstypes.RunConfigTask) *RunTaskResponse {
|
func createRunTaskResponse(rt *rstypes.RunTask, rct *rstypes.RunConfigTask) *gwapitypes.RunTaskResponse {
|
||||||
t := &RunTaskResponse{
|
t := &gwapitypes.RunTaskResponse{
|
||||||
ID: rt.ID,
|
ID: rt.ID,
|
||||||
Name: rct.Name,
|
Name: rct.Name,
|
||||||
Status: rt.Status,
|
Status: rt.Status,
|
||||||
|
@ -174,13 +90,13 @@ func createRunTaskResponse(rt *rstypes.RunTask, rct *rstypes.RunConfigTask) *Run
|
||||||
Approved: rt.Approved,
|
Approved: rt.Approved,
|
||||||
ApprovalAnnotations: rt.Annotations,
|
ApprovalAnnotations: rt.Annotations,
|
||||||
|
|
||||||
Steps: make([]*RunTaskResponseStep, len(rt.Steps)),
|
Steps: make([]*gwapitypes.RunTaskResponseStep, len(rt.Steps)),
|
||||||
|
|
||||||
StartTime: rt.StartTime,
|
StartTime: rt.StartTime,
|
||||||
EndTime: rt.EndTime,
|
EndTime: rt.EndTime,
|
||||||
}
|
}
|
||||||
|
|
||||||
t.SetupStep = &RunTaskResponseSetupStep{
|
t.SetupStep = &gwapitypes.RunTaskResponseSetupStep{
|
||||||
Name: "Task setup",
|
Name: "Task setup",
|
||||||
Phase: rt.SetupStep.Phase,
|
Phase: rt.SetupStep.Phase,
|
||||||
StartTime: rt.SetupStep.StartTime,
|
StartTime: rt.SetupStep.StartTime,
|
||||||
|
@ -188,7 +104,7 @@ func createRunTaskResponse(rt *rstypes.RunTask, rct *rstypes.RunConfigTask) *Run
|
||||||
}
|
}
|
||||||
|
|
||||||
for i := 0; i < len(t.Steps); i++ {
|
for i := 0; i < len(t.Steps); i++ {
|
||||||
s := &RunTaskResponseStep{
|
s := &gwapitypes.RunTaskResponseStep{
|
||||||
Phase: rt.Steps[i].Phase,
|
Phase: rt.Steps[i].Phase,
|
||||||
StartTime: rt.Steps[i].StartTime,
|
StartTime: rt.Steps[i].StartTime,
|
||||||
EndTime: rt.Steps[i].EndTime,
|
EndTime: rt.Steps[i].EndTime,
|
||||||
|
@ -282,8 +198,8 @@ const (
|
||||||
MaxRunsLimit = 40
|
MaxRunsLimit = 40
|
||||||
)
|
)
|
||||||
|
|
||||||
func createRunsResponse(r *rstypes.Run) *RunsResponse {
|
func createRunsResponse(r *rstypes.Run) *gwapitypes.RunsResponse {
|
||||||
run := &RunsResponse{
|
run := &gwapitypes.RunsResponse{
|
||||||
ID: r.ID,
|
ID: r.ID,
|
||||||
Counter: r.Counter,
|
Counter: r.Counter,
|
||||||
Name: r.Name,
|
Name: r.Name,
|
||||||
|
@ -368,7 +284,7 @@ func (h *RunsHandler) ServeHTTP(w http.ResponseWriter, r *http.Request) {
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
runs := make([]*RunsResponse, len(runsResp.Runs))
|
runs := make([]*gwapitypes.RunsResponse, len(runsResp.Runs))
|
||||||
for i, r := range runsResp.Runs {
|
for i, r := range runsResp.Runs {
|
||||||
runs[i] = createRunsResponse(r)
|
runs[i] = createRunsResponse(r)
|
||||||
}
|
}
|
||||||
|
@ -377,13 +293,6 @@ func (h *RunsHandler) ServeHTTP(w http.ResponseWriter, r *http.Request) {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
type RunActionsRequest struct {
|
|
||||||
ActionType action.RunActionType `json:"action_type"`
|
|
||||||
|
|
||||||
// Restart
|
|
||||||
FromStart bool `json:"from_start"`
|
|
||||||
}
|
|
||||||
|
|
||||||
type RunActionsHandler struct {
|
type RunActionsHandler struct {
|
||||||
log *zap.SugaredLogger
|
log *zap.SugaredLogger
|
||||||
ah *action.ActionHandler
|
ah *action.ActionHandler
|
||||||
|
@ -398,7 +307,7 @@ func (h *RunActionsHandler) ServeHTTP(w http.ResponseWriter, r *http.Request) {
|
||||||
vars := mux.Vars(r)
|
vars := mux.Vars(r)
|
||||||
runID := vars["runid"]
|
runID := vars["runid"]
|
||||||
|
|
||||||
var req RunActionsRequest
|
var req gwapitypes.RunActionsRequest
|
||||||
d := json.NewDecoder(r.Body)
|
d := json.NewDecoder(r.Body)
|
||||||
if err := d.Decode(&req); err != nil {
|
if err := d.Decode(&req); err != nil {
|
||||||
httpError(w, util.NewErrBadRequest(err))
|
httpError(w, util.NewErrBadRequest(err))
|
||||||
|
@ -407,7 +316,7 @@ func (h *RunActionsHandler) ServeHTTP(w http.ResponseWriter, r *http.Request) {
|
||||||
|
|
||||||
areq := &action.RunActionsRequest{
|
areq := &action.RunActionsRequest{
|
||||||
RunID: runID,
|
RunID: runID,
|
||||||
ActionType: req.ActionType,
|
ActionType: action.RunActionType(req.ActionType),
|
||||||
FromStart: req.FromStart,
|
FromStart: req.FromStart,
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -423,10 +332,6 @@ func (h *RunActionsHandler) ServeHTTP(w http.ResponseWriter, r *http.Request) {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
type RunTaskActionsRequest struct {
|
|
||||||
ActionType action.RunTaskActionType `json:"action_type"`
|
|
||||||
}
|
|
||||||
|
|
||||||
type RunTaskActionsHandler struct {
|
type RunTaskActionsHandler struct {
|
||||||
log *zap.SugaredLogger
|
log *zap.SugaredLogger
|
||||||
ah *action.ActionHandler
|
ah *action.ActionHandler
|
||||||
|
@ -442,7 +347,7 @@ func (h *RunTaskActionsHandler) ServeHTTP(w http.ResponseWriter, r *http.Request
|
||||||
runID := vars["runid"]
|
runID := vars["runid"]
|
||||||
taskID := vars["taskid"]
|
taskID := vars["taskid"]
|
||||||
|
|
||||||
var req RunTaskActionsRequest
|
var req gwapitypes.RunTaskActionsRequest
|
||||||
d := json.NewDecoder(r.Body)
|
d := json.NewDecoder(r.Body)
|
||||||
if err := d.Decode(&req); err != nil {
|
if err := d.Decode(&req); err != nil {
|
||||||
httpError(w, util.NewErrBadRequest(err))
|
httpError(w, util.NewErrBadRequest(err))
|
||||||
|
@ -452,7 +357,7 @@ func (h *RunTaskActionsHandler) ServeHTTP(w http.ResponseWriter, r *http.Request
|
||||||
areq := &action.RunTaskActionsRequest{
|
areq := &action.RunTaskActionsRequest{
|
||||||
RunID: runID,
|
RunID: runID,
|
||||||
TaskID: taskID,
|
TaskID: taskID,
|
||||||
ActionType: req.ActionType,
|
ActionType: action.RunTaskActionType(req.ActionType),
|
||||||
}
|
}
|
||||||
|
|
||||||
err := h.ah.RunTaskAction(ctx, areq)
|
err := h.ah.RunTaskAction(ctx, areq)
|
||||||
|
|
|
@ -18,23 +18,18 @@ import (
|
||||||
"encoding/json"
|
"encoding/json"
|
||||||
"net/http"
|
"net/http"
|
||||||
|
|
||||||
csapi "agola.io/agola/internal/services/configstore/api"
|
|
||||||
cstypes "agola.io/agola/internal/services/configstore/types"
|
|
||||||
"agola.io/agola/internal/services/gateway/action"
|
"agola.io/agola/internal/services/gateway/action"
|
||||||
"agola.io/agola/internal/util"
|
"agola.io/agola/internal/util"
|
||||||
|
csapitypes "agola.io/agola/services/configstore/api/types"
|
||||||
|
cstypes "agola.io/agola/services/configstore/types"
|
||||||
|
gwapitypes "agola.io/agola/services/gateway/api/types"
|
||||||
|
|
||||||
"github.com/gorilla/mux"
|
"github.com/gorilla/mux"
|
||||||
"go.uber.org/zap"
|
"go.uber.org/zap"
|
||||||
)
|
)
|
||||||
|
|
||||||
type SecretResponse struct {
|
func createSecretResponse(s *csapitypes.Secret) *gwapitypes.SecretResponse {
|
||||||
ID string `json:"id"`
|
return &gwapitypes.SecretResponse{
|
||||||
Name string `json:"name"`
|
|
||||||
ParentPath string `json:"parent_path"`
|
|
||||||
}
|
|
||||||
|
|
||||||
func createSecretResponse(s *csapi.Secret) *SecretResponse {
|
|
||||||
return &SecretResponse{
|
|
||||||
ID: s.ID,
|
ID: s.ID,
|
||||||
Name: s.Name,
|
Name: s.Name,
|
||||||
ParentPath: s.ParentPath,
|
ParentPath: s.ParentPath,
|
||||||
|
@ -72,7 +67,7 @@ func (h *SecretHandler) ServeHTTP(w http.ResponseWriter, r *http.Request) {
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
secrets := make([]*SecretResponse, len(cssecrets))
|
secrets := make([]*gwapitypes.SecretResponse, len(cssecrets))
|
||||||
for i, s := range cssecrets {
|
for i, s := range cssecrets {
|
||||||
secrets[i] = createSecretResponse(s)
|
secrets[i] = createSecretResponse(s)
|
||||||
}
|
}
|
||||||
|
@ -82,19 +77,6 @@ func (h *SecretHandler) ServeHTTP(w http.ResponseWriter, r *http.Request) {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
type CreateSecretRequest struct {
|
|
||||||
Name string `json:"name,omitempty"`
|
|
||||||
|
|
||||||
Type cstypes.SecretType `json:"type,omitempty"`
|
|
||||||
|
|
||||||
// internal secret
|
|
||||||
Data map[string]string `json:"data,omitempty"`
|
|
||||||
|
|
||||||
// external secret
|
|
||||||
SecretProviderID string `json:"secret_provider_id,omitempty"`
|
|
||||||
Path string `json:"path,omitempty"`
|
|
||||||
}
|
|
||||||
|
|
||||||
type CreateSecretHandler struct {
|
type CreateSecretHandler struct {
|
||||||
log *zap.SugaredLogger
|
log *zap.SugaredLogger
|
||||||
ah *action.ActionHandler
|
ah *action.ActionHandler
|
||||||
|
@ -111,7 +93,7 @@ func (h *CreateSecretHandler) ServeHTTP(w http.ResponseWriter, r *http.Request)
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
var req CreateSecretRequest
|
var req gwapitypes.CreateSecretRequest
|
||||||
d := json.NewDecoder(r.Body)
|
d := json.NewDecoder(r.Body)
|
||||||
if err := d.Decode(&req); err != nil {
|
if err := d.Decode(&req); err != nil {
|
||||||
httpError(w, util.NewErrBadRequest(err))
|
httpError(w, util.NewErrBadRequest(err))
|
||||||
|
@ -122,7 +104,7 @@ func (h *CreateSecretHandler) ServeHTTP(w http.ResponseWriter, r *http.Request)
|
||||||
Name: req.Name,
|
Name: req.Name,
|
||||||
ParentType: parentType,
|
ParentType: parentType,
|
||||||
ParentRef: parentRef,
|
ParentRef: parentRef,
|
||||||
Type: req.Type,
|
Type: cstypes.SecretType(req.Type),
|
||||||
Data: req.Data,
|
Data: req.Data,
|
||||||
SecretProviderID: req.SecretProviderID,
|
SecretProviderID: req.SecretProviderID,
|
||||||
Path: req.Path,
|
Path: req.Path,
|
||||||
|
@ -139,19 +121,6 @@ func (h *CreateSecretHandler) ServeHTTP(w http.ResponseWriter, r *http.Request)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
type UpdateSecretRequest struct {
|
|
||||||
Name string `json:"name,omitempty"`
|
|
||||||
|
|
||||||
Type cstypes.SecretType `json:"type,omitempty"`
|
|
||||||
|
|
||||||
// internal secret
|
|
||||||
Data map[string]string `json:"data,omitempty"`
|
|
||||||
|
|
||||||
// external secret
|
|
||||||
SecretProviderID string `json:"secret_provider_id,omitempty"`
|
|
||||||
Path string `json:"path,omitempty"`
|
|
||||||
}
|
|
||||||
|
|
||||||
type UpdateSecretHandler struct {
|
type UpdateSecretHandler struct {
|
||||||
log *zap.SugaredLogger
|
log *zap.SugaredLogger
|
||||||
ah *action.ActionHandler
|
ah *action.ActionHandler
|
||||||
|
@ -172,7 +141,7 @@ func (h *UpdateSecretHandler) ServeHTTP(w http.ResponseWriter, r *http.Request)
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
var req UpdateSecretRequest
|
var req gwapitypes.UpdateSecretRequest
|
||||||
d := json.NewDecoder(r.Body)
|
d := json.NewDecoder(r.Body)
|
||||||
if err := d.Decode(&req); err != nil {
|
if err := d.Decode(&req); err != nil {
|
||||||
httpError(w, util.NewErrBadRequest(err))
|
httpError(w, util.NewErrBadRequest(err))
|
||||||
|
@ -184,7 +153,7 @@ func (h *UpdateSecretHandler) ServeHTTP(w http.ResponseWriter, r *http.Request)
|
||||||
Name: req.Name,
|
Name: req.Name,
|
||||||
ParentType: parentType,
|
ParentType: parentType,
|
||||||
ParentRef: parentRef,
|
ParentRef: parentRef,
|
||||||
Type: req.Type,
|
Type: cstypes.SecretType(req.Type),
|
||||||
Data: req.Data,
|
Data: req.Data,
|
||||||
SecretProviderID: req.SecretProviderID,
|
SecretProviderID: req.SecretProviderID,
|
||||||
Path: req.Path,
|
Path: req.Path,
|
||||||
|
|
|
@ -21,20 +21,16 @@ import (
|
||||||
"sort"
|
"sort"
|
||||||
"strconv"
|
"strconv"
|
||||||
|
|
||||||
gitsource "agola.io/agola/internal/gitsources"
|
|
||||||
cstypes "agola.io/agola/internal/services/configstore/types"
|
|
||||||
"agola.io/agola/internal/services/gateway/action"
|
"agola.io/agola/internal/services/gateway/action"
|
||||||
"agola.io/agola/internal/util"
|
"agola.io/agola/internal/util"
|
||||||
|
cstypes "agola.io/agola/services/configstore/types"
|
||||||
|
gwapitypes "agola.io/agola/services/gateway/api/types"
|
||||||
|
|
||||||
"github.com/gorilla/mux"
|
"github.com/gorilla/mux"
|
||||||
"go.uber.org/zap"
|
"go.uber.org/zap"
|
||||||
errors "golang.org/x/xerrors"
|
errors "golang.org/x/xerrors"
|
||||||
)
|
)
|
||||||
|
|
||||||
type CreateUserRequest struct {
|
|
||||||
UserName string `json:"username"`
|
|
||||||
}
|
|
||||||
|
|
||||||
type CreateUserHandler struct {
|
type CreateUserHandler struct {
|
||||||
log *zap.SugaredLogger
|
log *zap.SugaredLogger
|
||||||
ah *action.ActionHandler
|
ah *action.ActionHandler
|
||||||
|
@ -47,7 +43,7 @@ func NewCreateUserHandler(logger *zap.Logger, ah *action.ActionHandler) *CreateU
|
||||||
func (h *CreateUserHandler) ServeHTTP(w http.ResponseWriter, r *http.Request) {
|
func (h *CreateUserHandler) ServeHTTP(w http.ResponseWriter, r *http.Request) {
|
||||||
ctx := r.Context()
|
ctx := r.Context()
|
||||||
|
|
||||||
var req CreateUserRequest
|
var req gwapitypes.CreateUserRequest
|
||||||
d := json.NewDecoder(r.Body)
|
d := json.NewDecoder(r.Body)
|
||||||
if err := d.Decode(&req); err != nil {
|
if err := d.Decode(&req); err != nil {
|
||||||
httpError(w, util.NewErrBadRequest(err))
|
httpError(w, util.NewErrBadRequest(err))
|
||||||
|
@ -152,26 +148,12 @@ func (h *UserHandler) ServeHTTP(w http.ResponseWriter, r *http.Request) {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
type UserResponse struct {
|
func createUserResponse(u *cstypes.User) *gwapitypes.UserResponse {
|
||||||
ID string `json:"id"`
|
user := &gwapitypes.UserResponse{
|
||||||
UserName string `json:"username"`
|
|
||||||
Tokens []string `json:"tokens"`
|
|
||||||
LinkedAccounts []*LinkedAccountResponse `json:"linked_accounts"`
|
|
||||||
}
|
|
||||||
|
|
||||||
type LinkedAccountResponse struct {
|
|
||||||
ID string `json:"id"`
|
|
||||||
RemoteSourceID string `json:"remote_source_id"`
|
|
||||||
RemoteUserName string `json:"remote_user_name"`
|
|
||||||
RemoteUserAvatarURL string `json:"remote_user_avatar_url"`
|
|
||||||
}
|
|
||||||
|
|
||||||
func createUserResponse(u *cstypes.User) *UserResponse {
|
|
||||||
user := &UserResponse{
|
|
||||||
ID: u.ID,
|
ID: u.ID,
|
||||||
UserName: u.Name,
|
UserName: u.Name,
|
||||||
Tokens: make([]string, 0, len(u.Tokens)),
|
Tokens: make([]string, 0, len(u.Tokens)),
|
||||||
LinkedAccounts: make([]*LinkedAccountResponse, 0, len(u.LinkedAccounts)),
|
LinkedAccounts: make([]*gwapitypes.LinkedAccountResponse, 0, len(u.LinkedAccounts)),
|
||||||
}
|
}
|
||||||
for tokenName := range u.Tokens {
|
for tokenName := range u.Tokens {
|
||||||
user.Tokens = append(user.Tokens, tokenName)
|
user.Tokens = append(user.Tokens, tokenName)
|
||||||
|
@ -179,7 +161,7 @@ func createUserResponse(u *cstypes.User) *UserResponse {
|
||||||
sort.Strings(user.Tokens)
|
sort.Strings(user.Tokens)
|
||||||
|
|
||||||
for _, la := range u.LinkedAccounts {
|
for _, la := range u.LinkedAccounts {
|
||||||
user.LinkedAccounts = append(user.LinkedAccounts, &LinkedAccountResponse{
|
user.LinkedAccounts = append(user.LinkedAccounts, &gwapitypes.LinkedAccountResponse{
|
||||||
ID: la.ID,
|
ID: la.ID,
|
||||||
RemoteSourceID: la.RemoteSourceID,
|
RemoteSourceID: la.RemoteSourceID,
|
||||||
RemoteUserName: la.RemoteUserName,
|
RemoteUserName: la.RemoteUserName,
|
||||||
|
@ -239,7 +221,7 @@ func (h *UsersHandler) ServeHTTP(w http.ResponseWriter, r *http.Request) {
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
users := make([]*UserResponse, len(csusers))
|
users := make([]*gwapitypes.UserResponse, len(csusers))
|
||||||
for i, p := range csusers {
|
for i, p := range csusers {
|
||||||
users[i] = createUserResponse(p)
|
users[i] = createUserResponse(p)
|
||||||
}
|
}
|
||||||
|
@ -249,17 +231,6 @@ func (h *UsersHandler) ServeHTTP(w http.ResponseWriter, r *http.Request) {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
type CreateUserLARequest struct {
|
|
||||||
RemoteSourceName string `json:"remote_source_name"`
|
|
||||||
RemoteSourceLoginName string `json:"remote_source_login_name"`
|
|
||||||
RemoteSourceLoginPassword string `json:"remote_source_login_password"`
|
|
||||||
}
|
|
||||||
|
|
||||||
type CreateUserLAResponse struct {
|
|
||||||
LinkedAccount *cstypes.LinkedAccount `json:"linked_account"`
|
|
||||||
Oauth2Redirect string `json:"oauth2_redirect"`
|
|
||||||
}
|
|
||||||
|
|
||||||
type CreateUserLAHandler struct {
|
type CreateUserLAHandler struct {
|
||||||
log *zap.SugaredLogger
|
log *zap.SugaredLogger
|
||||||
ah *action.ActionHandler
|
ah *action.ActionHandler
|
||||||
|
@ -274,7 +245,7 @@ func (h *CreateUserLAHandler) ServeHTTP(w http.ResponseWriter, r *http.Request)
|
||||||
vars := mux.Vars(r)
|
vars := mux.Vars(r)
|
||||||
userRef := vars["userref"]
|
userRef := vars["userref"]
|
||||||
|
|
||||||
var req *CreateUserLARequest
|
var req *gwapitypes.CreateUserLARequest
|
||||||
d := json.NewDecoder(r.Body)
|
d := json.NewDecoder(r.Body)
|
||||||
if err := d.Decode(&req); err != nil {
|
if err := d.Decode(&req); err != nil {
|
||||||
httpError(w, util.NewErrBadRequest(err))
|
httpError(w, util.NewErrBadRequest(err))
|
||||||
|
@ -292,7 +263,7 @@ func (h *CreateUserLAHandler) ServeHTTP(w http.ResponseWriter, r *http.Request)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
func (h *CreateUserLAHandler) createUserLA(ctx context.Context, userRef string, req *CreateUserLARequest) (*CreateUserLAResponse, error) {
|
func (h *CreateUserLAHandler) createUserLA(ctx context.Context, userRef string, req *gwapitypes.CreateUserLARequest) (*gwapitypes.CreateUserLAResponse, error) {
|
||||||
creq := &action.CreateUserLARequest{
|
creq := &action.CreateUserLARequest{
|
||||||
UserRef: userRef,
|
UserRef: userRef,
|
||||||
RemoteSourceName: req.RemoteSourceName,
|
RemoteSourceName: req.RemoteSourceName,
|
||||||
|
@ -304,14 +275,20 @@ func (h *CreateUserLAHandler) createUserLA(ctx context.Context, userRef string,
|
||||||
return nil, err
|
return nil, err
|
||||||
}
|
}
|
||||||
if cresp.Oauth2Redirect != "" {
|
if cresp.Oauth2Redirect != "" {
|
||||||
return &CreateUserLAResponse{
|
return &gwapitypes.CreateUserLAResponse{
|
||||||
Oauth2Redirect: cresp.Oauth2Redirect,
|
Oauth2Redirect: cresp.Oauth2Redirect,
|
||||||
}, nil
|
}, nil
|
||||||
}
|
}
|
||||||
authresp := cresp.Response.(*action.CreateUserLAResponse)
|
authresp := cresp.Response.(*action.CreateUserLAResponse)
|
||||||
|
|
||||||
resp := &CreateUserLAResponse{
|
resp := &gwapitypes.CreateUserLAResponse{
|
||||||
LinkedAccount: authresp.LinkedAccount,
|
LinkedAccount: &gwapitypes.LinkedAccount{
|
||||||
|
ID: authresp.LinkedAccount.ID,
|
||||||
|
RemoteUserID: authresp.LinkedAccount.RemoteUserID,
|
||||||
|
RemoteUserName: authresp.LinkedAccount.RemoteUserName,
|
||||||
|
RemoteUserAvatarURL: authresp.LinkedAccount.RemoteUserAvatarURL,
|
||||||
|
RemoteSourceID: authresp.LinkedAccount.RemoteUserID,
|
||||||
|
},
|
||||||
}
|
}
|
||||||
h.log.Infof("linked account %q for user %q created", resp.LinkedAccount.ID, userRef)
|
h.log.Infof("linked account %q for user %q created", resp.LinkedAccount.ID, userRef)
|
||||||
return resp, nil
|
return resp, nil
|
||||||
|
@ -343,14 +320,6 @@ func (h *DeleteUserLAHandler) ServeHTTP(w http.ResponseWriter, r *http.Request)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
type CreateUserTokenRequest struct {
|
|
||||||
TokenName string `json:"token_name"`
|
|
||||||
}
|
|
||||||
|
|
||||||
type CreateUserTokenResponse struct {
|
|
||||||
Token string `json:"token"`
|
|
||||||
}
|
|
||||||
|
|
||||||
type CreateUserTokenHandler struct {
|
type CreateUserTokenHandler struct {
|
||||||
log *zap.SugaredLogger
|
log *zap.SugaredLogger
|
||||||
ah *action.ActionHandler
|
ah *action.ActionHandler
|
||||||
|
@ -365,7 +334,7 @@ func (h *CreateUserTokenHandler) ServeHTTP(w http.ResponseWriter, r *http.Reques
|
||||||
vars := mux.Vars(r)
|
vars := mux.Vars(r)
|
||||||
userRef := vars["userref"]
|
userRef := vars["userref"]
|
||||||
|
|
||||||
var req CreateUserTokenRequest
|
var req gwapitypes.CreateUserTokenRequest
|
||||||
d := json.NewDecoder(r.Body)
|
d := json.NewDecoder(r.Body)
|
||||||
if err := d.Decode(&req); err != nil {
|
if err := d.Decode(&req); err != nil {
|
||||||
httpError(w, util.NewErrBadRequest(err))
|
httpError(w, util.NewErrBadRequest(err))
|
||||||
|
@ -383,7 +352,7 @@ func (h *CreateUserTokenHandler) ServeHTTP(w http.ResponseWriter, r *http.Reques
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
res := &CreateUserTokenResponse{
|
res := &gwapitypes.CreateUserTokenResponse{
|
||||||
Token: token,
|
Token: token,
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -419,20 +388,11 @@ func (h *DeleteUserTokenHandler) ServeHTTP(w http.ResponseWriter, r *http.Reques
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
type RegisterUserRequest struct {
|
|
||||||
CreateUserRequest
|
|
||||||
CreateUserLARequest
|
|
||||||
}
|
|
||||||
|
|
||||||
type RegisterUserHandler struct {
|
type RegisterUserHandler struct {
|
||||||
log *zap.SugaredLogger
|
log *zap.SugaredLogger
|
||||||
ah *action.ActionHandler
|
ah *action.ActionHandler
|
||||||
}
|
}
|
||||||
|
|
||||||
type RegisterUserResponse struct {
|
|
||||||
Oauth2Redirect string `json:"oauth2_redirect"`
|
|
||||||
}
|
|
||||||
|
|
||||||
func NewRegisterUserHandler(logger *zap.Logger, ah *action.ActionHandler) *RegisterUserHandler {
|
func NewRegisterUserHandler(logger *zap.Logger, ah *action.ActionHandler) *RegisterUserHandler {
|
||||||
return &RegisterUserHandler{log: logger.Sugar(), ah: ah}
|
return &RegisterUserHandler{log: logger.Sugar(), ah: ah}
|
||||||
}
|
}
|
||||||
|
@ -440,7 +400,7 @@ func NewRegisterUserHandler(logger *zap.Logger, ah *action.ActionHandler) *Regis
|
||||||
func (h *RegisterUserHandler) ServeHTTP(w http.ResponseWriter, r *http.Request) {
|
func (h *RegisterUserHandler) ServeHTTP(w http.ResponseWriter, r *http.Request) {
|
||||||
ctx := r.Context()
|
ctx := r.Context()
|
||||||
|
|
||||||
var req *RegisterUserRequest
|
var req *gwapitypes.RegisterUserRequest
|
||||||
d := json.NewDecoder(r.Body)
|
d := json.NewDecoder(r.Body)
|
||||||
if err := d.Decode(&req); err != nil {
|
if err := d.Decode(&req); err != nil {
|
||||||
httpError(w, util.NewErrBadRequest(err))
|
httpError(w, util.NewErrBadRequest(err))
|
||||||
|
@ -458,7 +418,7 @@ func (h *RegisterUserHandler) ServeHTTP(w http.ResponseWriter, r *http.Request)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
func (h *RegisterUserHandler) registerUser(ctx context.Context, req *RegisterUserRequest) (*RegisterUserResponse, error) {
|
func (h *RegisterUserHandler) registerUser(ctx context.Context, req *gwapitypes.RegisterUserRequest) (*gwapitypes.RegisterUserResponse, error) {
|
||||||
creq := &action.RegisterUserRequest{
|
creq := &action.RegisterUserRequest{
|
||||||
UserName: req.CreateUserRequest.UserName,
|
UserName: req.CreateUserRequest.UserName,
|
||||||
RemoteSourceName: req.CreateUserLARequest.RemoteSourceName,
|
RemoteSourceName: req.CreateUserLARequest.RemoteSourceName,
|
||||||
|
@ -469,13 +429,13 @@ func (h *RegisterUserHandler) registerUser(ctx context.Context, req *RegisterUse
|
||||||
return nil, err
|
return nil, err
|
||||||
}
|
}
|
||||||
if cresp.Oauth2Redirect != "" {
|
if cresp.Oauth2Redirect != "" {
|
||||||
return &RegisterUserResponse{
|
return &gwapitypes.RegisterUserResponse{
|
||||||
Oauth2Redirect: cresp.Oauth2Redirect,
|
Oauth2Redirect: cresp.Oauth2Redirect,
|
||||||
}, nil
|
}, nil
|
||||||
}
|
}
|
||||||
//authresp := cresp.Response.(*action.RegisterUserResponse)
|
//authresp := cresp.Response.(*action.RegisterUserResponse)
|
||||||
|
|
||||||
resp := &RegisterUserResponse{}
|
resp := &gwapitypes.RegisterUserResponse{}
|
||||||
return resp, nil
|
return resp, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -484,12 +444,6 @@ type AuthorizeHandler struct {
|
||||||
ah *action.ActionHandler
|
ah *action.ActionHandler
|
||||||
}
|
}
|
||||||
|
|
||||||
type AuthorizeResponse struct {
|
|
||||||
Oauth2Redirect string `json:"oauth2_redirect"`
|
|
||||||
RemoteUserInfo *gitsource.UserInfo `json:"remote_user_info"`
|
|
||||||
RemoteSourceName string `json:"remote_source_name"`
|
|
||||||
}
|
|
||||||
|
|
||||||
func NewAuthorizeHandler(logger *zap.Logger, ah *action.ActionHandler) *AuthorizeHandler {
|
func NewAuthorizeHandler(logger *zap.Logger, ah *action.ActionHandler) *AuthorizeHandler {
|
||||||
return &AuthorizeHandler{log: logger.Sugar(), ah: ah}
|
return &AuthorizeHandler{log: logger.Sugar(), ah: ah}
|
||||||
}
|
}
|
||||||
|
@ -497,7 +451,7 @@ func NewAuthorizeHandler(logger *zap.Logger, ah *action.ActionHandler) *Authoriz
|
||||||
func (h *AuthorizeHandler) ServeHTTP(w http.ResponseWriter, r *http.Request) {
|
func (h *AuthorizeHandler) ServeHTTP(w http.ResponseWriter, r *http.Request) {
|
||||||
ctx := r.Context()
|
ctx := r.Context()
|
||||||
|
|
||||||
var req *LoginUserRequest
|
var req *gwapitypes.LoginUserRequest
|
||||||
d := json.NewDecoder(r.Body)
|
d := json.NewDecoder(r.Body)
|
||||||
if err := d.Decode(&req); err != nil {
|
if err := d.Decode(&req); err != nil {
|
||||||
httpError(w, util.NewErrBadRequest(err))
|
httpError(w, util.NewErrBadRequest(err))
|
||||||
|
@ -515,7 +469,7 @@ func (h *AuthorizeHandler) ServeHTTP(w http.ResponseWriter, r *http.Request) {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
func (h *AuthorizeHandler) authorize(ctx context.Context, req *LoginUserRequest) (*AuthorizeResponse, error) {
|
func (h *AuthorizeHandler) authorize(ctx context.Context, req *gwapitypes.LoginUserRequest) (*gwapitypes.AuthorizeResponse, error) {
|
||||||
creq := &action.LoginUserRequest{
|
creq := &action.LoginUserRequest{
|
||||||
RemoteSourceName: req.RemoteSourceName,
|
RemoteSourceName: req.RemoteSourceName,
|
||||||
}
|
}
|
||||||
|
@ -525,31 +479,23 @@ func (h *AuthorizeHandler) authorize(ctx context.Context, req *LoginUserRequest)
|
||||||
return nil, err
|
return nil, err
|
||||||
}
|
}
|
||||||
if cresp.Oauth2Redirect != "" {
|
if cresp.Oauth2Redirect != "" {
|
||||||
return &AuthorizeResponse{
|
return &gwapitypes.AuthorizeResponse{
|
||||||
Oauth2Redirect: cresp.Oauth2Redirect,
|
Oauth2Redirect: cresp.Oauth2Redirect,
|
||||||
}, nil
|
}, nil
|
||||||
}
|
}
|
||||||
authresp := cresp.Response.(*action.AuthorizeResponse)
|
authresp := cresp.Response.(*action.AuthorizeResponse)
|
||||||
|
|
||||||
resp := &AuthorizeResponse{
|
resp := &gwapitypes.AuthorizeResponse{
|
||||||
RemoteUserInfo: authresp.RemoteUserInfo,
|
RemoteUserInfo: &gwapitypes.UserInfo{
|
||||||
|
ID: authresp.RemoteUserInfo.ID,
|
||||||
|
LoginName: authresp.RemoteUserInfo.LoginName,
|
||||||
|
Email: authresp.RemoteUserInfo.Email,
|
||||||
|
},
|
||||||
RemoteSourceName: authresp.RemoteSourceName,
|
RemoteSourceName: authresp.RemoteSourceName,
|
||||||
}
|
}
|
||||||
return resp, nil
|
return resp, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
type LoginUserRequest struct {
|
|
||||||
RemoteSourceName string `json:"remote_source_name"`
|
|
||||||
LoginName string `json:"login_name"`
|
|
||||||
LoginPassword string `json:"password"`
|
|
||||||
}
|
|
||||||
|
|
||||||
type LoginUserResponse struct {
|
|
||||||
Oauth2Redirect string `json:"oauth2_redirect"`
|
|
||||||
Token string `json:"token"`
|
|
||||||
User *UserResponse `json:"user"`
|
|
||||||
}
|
|
||||||
|
|
||||||
type LoginUserHandler struct {
|
type LoginUserHandler struct {
|
||||||
log *zap.SugaredLogger
|
log *zap.SugaredLogger
|
||||||
ah *action.ActionHandler
|
ah *action.ActionHandler
|
||||||
|
@ -562,7 +508,7 @@ func NewLoginUserHandler(logger *zap.Logger, ah *action.ActionHandler) *LoginUse
|
||||||
func (h *LoginUserHandler) ServeHTTP(w http.ResponseWriter, r *http.Request) {
|
func (h *LoginUserHandler) ServeHTTP(w http.ResponseWriter, r *http.Request) {
|
||||||
ctx := r.Context()
|
ctx := r.Context()
|
||||||
|
|
||||||
var req *LoginUserRequest
|
var req *gwapitypes.LoginUserRequest
|
||||||
d := json.NewDecoder(r.Body)
|
d := json.NewDecoder(r.Body)
|
||||||
if err := d.Decode(&req); err != nil {
|
if err := d.Decode(&req); err != nil {
|
||||||
httpError(w, util.NewErrBadRequest(err))
|
httpError(w, util.NewErrBadRequest(err))
|
||||||
|
@ -580,7 +526,7 @@ func (h *LoginUserHandler) ServeHTTP(w http.ResponseWriter, r *http.Request) {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
func (h *LoginUserHandler) loginUser(ctx context.Context, req *LoginUserRequest) (*LoginUserResponse, error) {
|
func (h *LoginUserHandler) loginUser(ctx context.Context, req *gwapitypes.LoginUserRequest) (*gwapitypes.LoginUserResponse, error) {
|
||||||
creq := &action.LoginUserRequest{
|
creq := &action.LoginUserRequest{
|
||||||
RemoteSourceName: req.RemoteSourceName,
|
RemoteSourceName: req.RemoteSourceName,
|
||||||
}
|
}
|
||||||
|
@ -591,27 +537,19 @@ func (h *LoginUserHandler) loginUser(ctx context.Context, req *LoginUserRequest)
|
||||||
return nil, err
|
return nil, err
|
||||||
}
|
}
|
||||||
if cresp.Oauth2Redirect != "" {
|
if cresp.Oauth2Redirect != "" {
|
||||||
return &LoginUserResponse{
|
return &gwapitypes.LoginUserResponse{
|
||||||
Oauth2Redirect: cresp.Oauth2Redirect,
|
Oauth2Redirect: cresp.Oauth2Redirect,
|
||||||
}, nil
|
}, nil
|
||||||
}
|
}
|
||||||
authresp := cresp.Response.(*action.LoginUserResponse)
|
authresp := cresp.Response.(*action.LoginUserResponse)
|
||||||
|
|
||||||
resp := &LoginUserResponse{
|
resp := &gwapitypes.LoginUserResponse{
|
||||||
Token: authresp.Token,
|
Token: authresp.Token,
|
||||||
User: createUserResponse(authresp.User),
|
User: createUserResponse(authresp.User),
|
||||||
}
|
}
|
||||||
return resp, nil
|
return resp, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
type UserCreateRunRequest struct {
|
|
||||||
RepoUUID string `json:"repo_uuid,omitempty"`
|
|
||||||
RepoPath string `json:"repo_path,omitempty"`
|
|
||||||
Branch string `json:"branch,omitempty"`
|
|
||||||
CommitSHA string `json:"commit_sha,omitempty"`
|
|
||||||
Message string `json:"message,omitempty"`
|
|
||||||
}
|
|
||||||
|
|
||||||
type UserCreateRunHandler struct {
|
type UserCreateRunHandler struct {
|
||||||
log *zap.SugaredLogger
|
log *zap.SugaredLogger
|
||||||
ah *action.ActionHandler
|
ah *action.ActionHandler
|
||||||
|
@ -624,7 +562,7 @@ func NewUserCreateRunHandler(logger *zap.Logger, ah *action.ActionHandler) *User
|
||||||
func (h *UserCreateRunHandler) ServeHTTP(w http.ResponseWriter, r *http.Request) {
|
func (h *UserCreateRunHandler) ServeHTTP(w http.ResponseWriter, r *http.Request) {
|
||||||
ctx := r.Context()
|
ctx := r.Context()
|
||||||
|
|
||||||
var req UserCreateRunRequest
|
var req gwapitypes.UserCreateRunRequest
|
||||||
d := json.NewDecoder(r.Body)
|
d := json.NewDecoder(r.Body)
|
||||||
if err := d.Decode(&req); err != nil {
|
if err := d.Decode(&req); err != nil {
|
||||||
httpError(w, util.NewErrBadRequest(err))
|
httpError(w, util.NewErrBadRequest(err))
|
||||||
|
|
|
@ -19,43 +19,29 @@ import (
|
||||||
"net/http"
|
"net/http"
|
||||||
|
|
||||||
"agola.io/agola/internal/services/common"
|
"agola.io/agola/internal/services/common"
|
||||||
csapi "agola.io/agola/internal/services/configstore/api"
|
|
||||||
cstypes "agola.io/agola/internal/services/configstore/types"
|
|
||||||
"agola.io/agola/internal/services/gateway/action"
|
"agola.io/agola/internal/services/gateway/action"
|
||||||
"agola.io/agola/internal/util"
|
"agola.io/agola/internal/util"
|
||||||
"go.uber.org/zap"
|
csapitypes "agola.io/agola/services/configstore/api/types"
|
||||||
|
cstypes "agola.io/agola/services/configstore/types"
|
||||||
|
gwapitypes "agola.io/agola/services/gateway/api/types"
|
||||||
|
|
||||||
"github.com/gorilla/mux"
|
"github.com/gorilla/mux"
|
||||||
|
"go.uber.org/zap"
|
||||||
)
|
)
|
||||||
|
|
||||||
type VariableValue struct {
|
func createVariableResponse(v *csapitypes.Variable, secrets []*csapitypes.Secret) *gwapitypes.VariableResponse {
|
||||||
SecretName string `json:"secret_name"`
|
nv := &gwapitypes.VariableResponse{
|
||||||
SecretVar string `json:"secret_var"`
|
|
||||||
MatchingSecretParentPath string `json:"matching_secret_parent_path"`
|
|
||||||
|
|
||||||
When *cstypes.When `json:"when"`
|
|
||||||
}
|
|
||||||
|
|
||||||
type VariableResponse struct {
|
|
||||||
ID string `json:"id"`
|
|
||||||
Name string `json:"name"`
|
|
||||||
Values []VariableValue `json:"values"`
|
|
||||||
ParentPath string `json:"parent_path"`
|
|
||||||
}
|
|
||||||
|
|
||||||
func createVariableResponse(v *csapi.Variable, secrets []*csapi.Secret) *VariableResponse {
|
|
||||||
nv := &VariableResponse{
|
|
||||||
ID: v.ID,
|
ID: v.ID,
|
||||||
Name: v.Name,
|
Name: v.Name,
|
||||||
Values: make([]VariableValue, len(v.Values)),
|
Values: make([]gwapitypes.VariableValue, len(v.Values)),
|
||||||
ParentPath: v.ParentPath,
|
ParentPath: v.ParentPath,
|
||||||
}
|
}
|
||||||
|
|
||||||
for i, varvalue := range v.Values {
|
for i, varvalue := range v.Values {
|
||||||
nv.Values[i] = VariableValue{
|
nv.Values[i] = gwapitypes.VariableValue{
|
||||||
SecretName: varvalue.SecretName,
|
SecretName: varvalue.SecretName,
|
||||||
SecretVar: varvalue.SecretVar,
|
SecretVar: varvalue.SecretVar,
|
||||||
When: varvalue.When,
|
When: fromCsWhen(varvalue.When),
|
||||||
}
|
}
|
||||||
// get matching secret for var value
|
// get matching secret for var value
|
||||||
secret := common.GetVarValueMatchingSecret(varvalue, v.ParentPath, secrets)
|
secret := common.GetVarValueMatchingSecret(varvalue, v.ParentPath, secrets)
|
||||||
|
@ -100,7 +86,7 @@ func (h *VariableHandler) ServeHTTP(w http.ResponseWriter, r *http.Request) {
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
variables := make([]*VariableResponse, len(csvars))
|
variables := make([]*gwapitypes.VariableResponse, len(csvars))
|
||||||
for i, v := range csvars {
|
for i, v := range csvars {
|
||||||
variables[i] = createVariableResponse(v, cssecrets)
|
variables[i] = createVariableResponse(v, cssecrets)
|
||||||
}
|
}
|
||||||
|
@ -110,12 +96,6 @@ func (h *VariableHandler) ServeHTTP(w http.ResponseWriter, r *http.Request) {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
type CreateVariableRequest struct {
|
|
||||||
Name string `json:"name,omitempty"`
|
|
||||||
|
|
||||||
Values []cstypes.VariableValue `json:"values,omitempty"`
|
|
||||||
}
|
|
||||||
|
|
||||||
type CreateVariableHandler struct {
|
type CreateVariableHandler struct {
|
||||||
log *zap.SugaredLogger
|
log *zap.SugaredLogger
|
||||||
ah *action.ActionHandler
|
ah *action.ActionHandler
|
||||||
|
@ -133,7 +113,7 @@ func (h *CreateVariableHandler) ServeHTTP(w http.ResponseWriter, r *http.Request
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
var req CreateVariableRequest
|
var req gwapitypes.CreateVariableRequest
|
||||||
d := json.NewDecoder(r.Body)
|
d := json.NewDecoder(r.Body)
|
||||||
if err := d.Decode(&req); err != nil {
|
if err := d.Decode(&req); err != nil {
|
||||||
httpError(w, util.NewErrBadRequest(err))
|
httpError(w, util.NewErrBadRequest(err))
|
||||||
|
@ -143,7 +123,7 @@ func (h *CreateVariableHandler) ServeHTTP(w http.ResponseWriter, r *http.Request
|
||||||
Name: req.Name,
|
Name: req.Name,
|
||||||
ParentType: parentType,
|
ParentType: parentType,
|
||||||
ParentRef: parentRef,
|
ParentRef: parentRef,
|
||||||
Values: req.Values,
|
Values: fromApiVariableValues(req.Values),
|
||||||
}
|
}
|
||||||
csvar, cssecrets, err := h.ah.CreateVariable(ctx, areq)
|
csvar, cssecrets, err := h.ah.CreateVariable(ctx, areq)
|
||||||
if httpError(w, err) {
|
if httpError(w, err) {
|
||||||
|
@ -157,12 +137,6 @@ func (h *CreateVariableHandler) ServeHTTP(w http.ResponseWriter, r *http.Request
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
type UpdateVariableRequest struct {
|
|
||||||
Name string `json:"name,omitempty"`
|
|
||||||
|
|
||||||
Values []cstypes.VariableValue `json:"values,omitempty"`
|
|
||||||
}
|
|
||||||
|
|
||||||
type UpdateVariableHandler struct {
|
type UpdateVariableHandler struct {
|
||||||
log *zap.SugaredLogger
|
log *zap.SugaredLogger
|
||||||
ah *action.ActionHandler
|
ah *action.ActionHandler
|
||||||
|
@ -183,19 +157,20 @@ func (h *UpdateVariableHandler) ServeHTTP(w http.ResponseWriter, r *http.Request
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
var req UpdateVariableRequest
|
var req gwapitypes.UpdateVariableRequest
|
||||||
d := json.NewDecoder(r.Body)
|
d := json.NewDecoder(r.Body)
|
||||||
if err := d.Decode(&req); err != nil {
|
if err := d.Decode(&req); err != nil {
|
||||||
httpError(w, util.NewErrBadRequest(err))
|
httpError(w, util.NewErrBadRequest(err))
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
areq := &action.UpdateVariableRequest{
|
areq := &action.UpdateVariableRequest{
|
||||||
VariableName: variableName,
|
VariableName: variableName,
|
||||||
|
|
||||||
Name: req.Name,
|
Name: req.Name,
|
||||||
ParentType: parentType,
|
ParentType: parentType,
|
||||||
ParentRef: parentRef,
|
ParentRef: parentRef,
|
||||||
Values: req.Values,
|
Values: fromApiVariableValues(req.Values),
|
||||||
}
|
}
|
||||||
csvar, cssecrets, err := h.ah.UpdateVariable(ctx, areq)
|
csvar, cssecrets, err := h.ah.UpdateVariable(ctx, areq)
|
||||||
if httpError(w, err) {
|
if httpError(w, err) {
|
||||||
|
@ -239,3 +214,75 @@ func (h *DeleteVariableHandler) ServeHTTP(w http.ResponseWriter, r *http.Request
|
||||||
h.log.Errorf("err: %+v", err)
|
h.log.Errorf("err: %+v", err)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func fromApiVariableValues(apivalues []gwapitypes.VariableValueRequest) []cstypes.VariableValue {
|
||||||
|
values := make([]cstypes.VariableValue, len(apivalues))
|
||||||
|
for i, v := range apivalues {
|
||||||
|
values[i] = cstypes.VariableValue{
|
||||||
|
SecretName: v.SecretName,
|
||||||
|
SecretVar: v.SecretVar,
|
||||||
|
When: fromApiWhen(v.When),
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return values
|
||||||
|
}
|
||||||
|
|
||||||
|
func fromApiWhenCondition(apiwc gwapitypes.WhenCondition) cstypes.WhenCondition {
|
||||||
|
return cstypes.WhenCondition{
|
||||||
|
Type: cstypes.WhenConditionType(apiwc.Type),
|
||||||
|
Match: apiwc.Match,
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
func fromApiWhenConditions(apiwcs *gwapitypes.WhenConditions) *cstypes.WhenConditions {
|
||||||
|
wcs := &cstypes.WhenConditions{
|
||||||
|
Include: make([]cstypes.WhenCondition, len(apiwcs.Include)),
|
||||||
|
Exclude: make([]cstypes.WhenCondition, len(apiwcs.Exclude)),
|
||||||
|
}
|
||||||
|
for i, include := range apiwcs.Include {
|
||||||
|
wcs.Include[i] = fromApiWhenCondition(include)
|
||||||
|
}
|
||||||
|
for i, exclude := range apiwcs.Exclude {
|
||||||
|
wcs.Exclude[i] = fromApiWhenCondition(exclude)
|
||||||
|
}
|
||||||
|
|
||||||
|
return wcs
|
||||||
|
}
|
||||||
|
|
||||||
|
func fromApiWhen(apiwhen *gwapitypes.When) *cstypes.When {
|
||||||
|
return &cstypes.When{
|
||||||
|
Branch: fromApiWhenConditions(apiwhen.Branch),
|
||||||
|
Tag: fromApiWhenConditions(apiwhen.Tag),
|
||||||
|
Ref: fromApiWhenConditions(apiwhen.Ref),
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
func fromCsWhenCondition(apiwc cstypes.WhenCondition) gwapitypes.WhenCondition {
|
||||||
|
return gwapitypes.WhenCondition{
|
||||||
|
Type: gwapitypes.WhenConditionType(apiwc.Type),
|
||||||
|
Match: apiwc.Match,
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
func fromCsWhenConditions(apiwcs *cstypes.WhenConditions) *gwapitypes.WhenConditions {
|
||||||
|
wcs := &gwapitypes.WhenConditions{
|
||||||
|
Include: make([]gwapitypes.WhenCondition, len(apiwcs.Include)),
|
||||||
|
Exclude: make([]gwapitypes.WhenCondition, len(apiwcs.Exclude)),
|
||||||
|
}
|
||||||
|
for i, include := range apiwcs.Include {
|
||||||
|
wcs.Include[i] = fromCsWhenCondition(include)
|
||||||
|
}
|
||||||
|
for i, exclude := range apiwcs.Exclude {
|
||||||
|
wcs.Exclude[i] = fromCsWhenCondition(exclude)
|
||||||
|
}
|
||||||
|
|
||||||
|
return wcs
|
||||||
|
}
|
||||||
|
|
||||||
|
func fromCsWhen(apiwhen *cstypes.When) *gwapitypes.When {
|
||||||
|
return &gwapitypes.When{
|
||||||
|
Branch: fromCsWhenConditions(apiwhen.Branch),
|
||||||
|
Tag: fromCsWhenConditions(apiwhen.Tag),
|
||||||
|
Ref: fromCsWhenConditions(apiwhen.Ref),
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
|
@ -18,11 +18,11 @@ import (
|
||||||
"net/http"
|
"net/http"
|
||||||
|
|
||||||
"agola.io/agola/internal/services/common"
|
"agola.io/agola/internal/services/common"
|
||||||
csapi "agola.io/agola/internal/services/configstore/api"
|
|
||||||
"agola.io/agola/internal/services/gateway/action"
|
"agola.io/agola/internal/services/gateway/action"
|
||||||
rsapi "agola.io/agola/internal/services/runservice/api"
|
|
||||||
"agola.io/agola/internal/services/types"
|
"agola.io/agola/internal/services/types"
|
||||||
"agola.io/agola/internal/util"
|
"agola.io/agola/internal/util"
|
||||||
|
csclient "agola.io/agola/services/configstore/client"
|
||||||
|
rsclient "agola.io/agola/services/runservice/client"
|
||||||
|
|
||||||
"go.uber.org/zap"
|
"go.uber.org/zap"
|
||||||
errors "golang.org/x/xerrors"
|
errors "golang.org/x/xerrors"
|
||||||
|
@ -31,12 +31,12 @@ import (
|
||||||
type webhooksHandler struct {
|
type webhooksHandler struct {
|
||||||
log *zap.SugaredLogger
|
log *zap.SugaredLogger
|
||||||
ah *action.ActionHandler
|
ah *action.ActionHandler
|
||||||
configstoreClient *csapi.Client
|
configstoreClient *csclient.Client
|
||||||
runserviceClient *rsapi.Client
|
runserviceClient *rsclient.Client
|
||||||
apiExposedURL string
|
apiExposedURL string
|
||||||
}
|
}
|
||||||
|
|
||||||
func NewWebhooksHandler(logger *zap.Logger, ah *action.ActionHandler, configstoreClient *csapi.Client, runserviceClient *rsapi.Client, apiExposedURL string) *webhooksHandler {
|
func NewWebhooksHandler(logger *zap.Logger, ah *action.ActionHandler, configstoreClient *csclient.Client, runserviceClient *rsclient.Client, apiExposedURL string) *webhooksHandler {
|
||||||
return &webhooksHandler{
|
return &webhooksHandler{
|
||||||
log: logger.Sugar(),
|
log: logger.Sugar(),
|
||||||
ah: ah,
|
ah: ah,
|
||||||
|
|
|
@ -25,12 +25,12 @@ import (
|
||||||
"agola.io/agola/internal/objectstorage"
|
"agola.io/agola/internal/objectstorage"
|
||||||
"agola.io/agola/internal/services/common"
|
"agola.io/agola/internal/services/common"
|
||||||
"agola.io/agola/internal/services/config"
|
"agola.io/agola/internal/services/config"
|
||||||
csapi "agola.io/agola/internal/services/configstore/api"
|
|
||||||
"agola.io/agola/internal/services/gateway/action"
|
"agola.io/agola/internal/services/gateway/action"
|
||||||
"agola.io/agola/internal/services/gateway/api"
|
"agola.io/agola/internal/services/gateway/api"
|
||||||
"agola.io/agola/internal/services/gateway/handlers"
|
"agola.io/agola/internal/services/gateway/handlers"
|
||||||
rsapi "agola.io/agola/internal/services/runservice/api"
|
|
||||||
"agola.io/agola/internal/util"
|
"agola.io/agola/internal/util"
|
||||||
|
csclient "agola.io/agola/services/configstore/client"
|
||||||
|
rsclient "agola.io/agola/services/runservice/client"
|
||||||
|
|
||||||
jwt "github.com/dgrijalva/jwt-go"
|
jwt "github.com/dgrijalva/jwt-go"
|
||||||
ghandlers "github.com/gorilla/handlers"
|
ghandlers "github.com/gorilla/handlers"
|
||||||
|
@ -52,8 +52,8 @@ type Gateway struct {
|
||||||
c *config.Gateway
|
c *config.Gateway
|
||||||
|
|
||||||
ost *objectstorage.ObjStorage
|
ost *objectstorage.ObjStorage
|
||||||
runserviceClient *rsapi.Client
|
runserviceClient *rsclient.Client
|
||||||
configstoreClient *csapi.Client
|
configstoreClient *csclient.Client
|
||||||
ah *action.ActionHandler
|
ah *action.ActionHandler
|
||||||
sd *common.TokenSigningData
|
sd *common.TokenSigningData
|
||||||
}
|
}
|
||||||
|
@ -121,8 +121,8 @@ func NewGateway(gc *config.Config) (*Gateway, error) {
|
||||||
return nil, err
|
return nil, err
|
||||||
}
|
}
|
||||||
|
|
||||||
configstoreClient := csapi.NewClient(c.ConfigstoreURL)
|
configstoreClient := csclient.NewClient(c.ConfigstoreURL)
|
||||||
runserviceClient := rsapi.NewClient(c.RunserviceURL)
|
runserviceClient := rsclient.NewClient(c.RunserviceURL)
|
||||||
|
|
||||||
ah := action.NewActionHandler(logger, sd, configstoreClient, runserviceClient, gc.ID, c.APIExposedURL, c.WebExposedURL)
|
ah := action.NewActionHandler(logger, sd, configstoreClient, runserviceClient, gc.ID, c.APIExposedURL, c.WebExposedURL)
|
||||||
|
|
||||||
|
|
|
@ -20,7 +20,7 @@ import (
|
||||||
"strings"
|
"strings"
|
||||||
|
|
||||||
"agola.io/agola/internal/services/common"
|
"agola.io/agola/internal/services/common"
|
||||||
csapi "agola.io/agola/internal/services/configstore/api"
|
csclient "agola.io/agola/services/configstore/client"
|
||||||
|
|
||||||
jwt "github.com/dgrijalva/jwt-go"
|
jwt "github.com/dgrijalva/jwt-go"
|
||||||
jwtrequest "github.com/dgrijalva/jwt-go/request"
|
jwtrequest "github.com/dgrijalva/jwt-go/request"
|
||||||
|
@ -32,7 +32,7 @@ type AuthHandler struct {
|
||||||
log *zap.SugaredLogger
|
log *zap.SugaredLogger
|
||||||
next http.Handler
|
next http.Handler
|
||||||
|
|
||||||
configstoreClient *csapi.Client
|
configstoreClient *csclient.Client
|
||||||
adminToken string
|
adminToken string
|
||||||
|
|
||||||
sd *common.TokenSigningData
|
sd *common.TokenSigningData
|
||||||
|
@ -40,7 +40,7 @@ type AuthHandler struct {
|
||||||
required bool
|
required bool
|
||||||
}
|
}
|
||||||
|
|
||||||
func NewAuthHandler(logger *zap.Logger, configstoreClient *csapi.Client, adminToken string, sd *common.TokenSigningData, required bool) func(http.Handler) http.Handler {
|
func NewAuthHandler(logger *zap.Logger, configstoreClient *csclient.Client, adminToken string, sd *common.TokenSigningData, required bool) func(http.Handler) http.Handler {
|
||||||
return func(h http.Handler) http.Handler {
|
return func(h http.Handler) http.Handler {
|
||||||
return &AuthHandler{
|
return &AuthHandler{
|
||||||
log: logger.Sugar(),
|
log: logger.Sugar(),
|
||||||
|
|
|
@ -22,7 +22,7 @@ import (
|
||||||
gitsource "agola.io/agola/internal/gitsources"
|
gitsource "agola.io/agola/internal/gitsources"
|
||||||
"agola.io/agola/internal/services/common"
|
"agola.io/agola/internal/services/common"
|
||||||
"agola.io/agola/internal/services/gateway/action"
|
"agola.io/agola/internal/services/gateway/action"
|
||||||
rstypes "agola.io/agola/internal/services/runservice/types"
|
rstypes "agola.io/agola/services/runservice/types"
|
||||||
|
|
||||||
errors "golang.org/x/xerrors"
|
errors "golang.org/x/xerrors"
|
||||||
)
|
)
|
||||||
|
|
|
@ -21,8 +21,8 @@ import (
|
||||||
"agola.io/agola/internal/etcd"
|
"agola.io/agola/internal/etcd"
|
||||||
slog "agola.io/agola/internal/log"
|
slog "agola.io/agola/internal/log"
|
||||||
"agola.io/agola/internal/services/config"
|
"agola.io/agola/internal/services/config"
|
||||||
csapi "agola.io/agola/internal/services/configstore/api"
|
csclient "agola.io/agola/services/configstore/client"
|
||||||
rsapi "agola.io/agola/internal/services/runservice/api"
|
rsclient "agola.io/agola/services/runservice/client"
|
||||||
|
|
||||||
"go.uber.org/zap"
|
"go.uber.org/zap"
|
||||||
"go.uber.org/zap/zapcore"
|
"go.uber.org/zap/zapcore"
|
||||||
|
@ -38,8 +38,8 @@ type NotificationService struct {
|
||||||
|
|
||||||
e *etcd.Store
|
e *etcd.Store
|
||||||
|
|
||||||
runserviceClient *rsapi.Client
|
runserviceClient *rsclient.Client
|
||||||
configstoreClient *csapi.Client
|
configstoreClient *csclient.Client
|
||||||
}
|
}
|
||||||
|
|
||||||
func NewNotificationService(gc *config.Config) (*NotificationService, error) {
|
func NewNotificationService(gc *config.Config) (*NotificationService, error) {
|
||||||
|
@ -53,8 +53,8 @@ func NewNotificationService(gc *config.Config) (*NotificationService, error) {
|
||||||
return nil, err
|
return nil, err
|
||||||
}
|
}
|
||||||
|
|
||||||
configstoreClient := csapi.NewClient(c.ConfigstoreURL)
|
configstoreClient := csclient.NewClient(c.ConfigstoreURL)
|
||||||
runserviceClient := rsapi.NewClient(c.RunserviceURL)
|
runserviceClient := rsclient.NewClient(c.RunserviceURL)
|
||||||
|
|
||||||
return &NotificationService{
|
return &NotificationService{
|
||||||
gc: gc,
|
gc: gc,
|
||||||
|
|
|
@ -24,7 +24,7 @@ import (
|
||||||
"path"
|
"path"
|
||||||
"time"
|
"time"
|
||||||
|
|
||||||
rstypes "agola.io/agola/internal/services/runservice/types"
|
rstypes "agola.io/agola/services/runservice/types"
|
||||||
|
|
||||||
"go.etcd.io/etcd/clientv3/concurrency"
|
"go.etcd.io/etcd/clientv3/concurrency"
|
||||||
errors "golang.org/x/xerrors"
|
errors "golang.org/x/xerrors"
|
||||||
|
|
|
@ -29,8 +29,8 @@ import (
|
||||||
"agola.io/agola/internal/services/runservice/common"
|
"agola.io/agola/internal/services/runservice/common"
|
||||||
"agola.io/agola/internal/services/runservice/readdb"
|
"agola.io/agola/internal/services/runservice/readdb"
|
||||||
"agola.io/agola/internal/services/runservice/store"
|
"agola.io/agola/internal/services/runservice/store"
|
||||||
"agola.io/agola/internal/services/runservice/types"
|
|
||||||
"agola.io/agola/internal/util"
|
"agola.io/agola/internal/util"
|
||||||
|
"agola.io/agola/services/runservice/types"
|
||||||
|
|
||||||
"go.uber.org/zap"
|
"go.uber.org/zap"
|
||||||
errors "golang.org/x/xerrors"
|
errors "golang.org/x/xerrors"
|
||||||
|
|
|
@ -17,8 +17,8 @@ package action
|
||||||
import (
|
import (
|
||||||
"testing"
|
"testing"
|
||||||
|
|
||||||
"agola.io/agola/internal/services/runservice/types"
|
|
||||||
"agola.io/agola/internal/util"
|
"agola.io/agola/internal/util"
|
||||||
|
"agola.io/agola/services/runservice/types"
|
||||||
"github.com/google/go-cmp/cmp"
|
"github.com/google/go-cmp/cmp"
|
||||||
)
|
)
|
||||||
|
|
||||||
|
|
Some files were not shown because too many files have changed in this diff Show More
Loading…
Reference in New Issue