Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

feat: resource groups and domain endpoints #469

Open
wants to merge 3 commits into
base: main
Choose a base branch
from
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
27 changes: 8 additions & 19 deletions go.sum
Original file line number Diff line number Diff line change
Expand Up @@ -69,6 +69,12 @@ github.com/Azure/azure-sdk-for-go/sdk/internal v1.10.0 h1:ywEEhmNahHBihViHepv3xP
github.com/Azure/azure-sdk-for-go/sdk/internal v1.10.0/go.mod h1:iZDifYGJTIgIIkYRNWPENUnqx6bJ2xnSDFI2tjwZNuY=
github.com/Azure/azure-sdk-for-go/sdk/resourcemanager/dns/armdns v1.2.0 h1:lpOxwrQ919lCZoNCd69rVt8u1eLZuMORrGXqy8sNf3c=
github.com/Azure/azure-sdk-for-go/sdk/resourcemanager/dns/armdns v1.2.0/go.mod h1:fSvRkb8d26z9dbL40Uf/OO6Vo9iExtZK3D0ulRV+8M0=
github.com/Azure/azure-sdk-for-go/sdk/resourcemanager/internal/v2 v2.0.0 h1:PTFGRSlMKCQelWwxUyYVEUqseBJVemLyqWJjvMyt0do=
github.com/Azure/azure-sdk-for-go/sdk/resourcemanager/internal/v2 v2.0.0/go.mod h1:LRr2FzBTQlONPPa5HREE5+RjSCTXl7BwOvYOaWTqCaI=
github.com/Azure/azure-sdk-for-go/sdk/resourcemanager/internal/v3 v3.0.0 h1:Kb8eVvjdP6kZqYnER5w/PiGCFp91yVgaxve3d7kCEpY=
github.com/Azure/azure-sdk-for-go/sdk/resourcemanager/internal/v3 v3.0.0/go.mod h1:lYq15QkJyEsNegz5EhI/0SXQ6spvGfgwBH/Qyzkoc/s=
github.com/Azure/azure-sdk-for-go/sdk/resourcemanager/managementgroups/armmanagementgroups v1.0.0 h1:pPvTJ1dY0sA35JOeFq6TsY2xj6Z85Yo23Pj4wCCvu4o=
github.com/Azure/azure-sdk-for-go/sdk/resourcemanager/managementgroups/armmanagementgroups v1.0.0/go.mod h1:mLfWfj8v3jfWKsL9G4eoBoXVcsqcIUTapmdKy7uGOp0=
github.com/Azure/azure-sdk-for-go/sdk/resourcemanager/resources/armresources v1.2.0 h1:Dd+RhdJn0OTtVGaeDLZpcumkIVCtA/3/Fo42+eoYvVM=
github.com/Azure/azure-sdk-for-go/sdk/resourcemanager/resources/armresources v1.2.0/go.mod h1:5kakwfW5CjC9KK+Q4wjXAg+ShuIm2mBMua0ZFj2C8PE=
github.com/Azure/azure-sdk-for-go/sdk/resourcemanager/storage/armstorage v1.6.0 h1:PiSrjRPpkQNjrM8H0WwKMnZUdu1RGMtd/LdGKUrOo+c=
Expand Down Expand Up @@ -617,7 +623,6 @@ github.com/google/shlex v0.0.0-20191202100458-e7afc7fbc510/go.mod h1:pupxD2MaaD3
github.com/google/uuid v1.0.0/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo=
github.com/google/uuid v1.1.1/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo=
github.com/google/uuid v1.1.2/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo=
github.com/google/uuid v1.3.0 h1:t6JiXgmwXMjEs8VusXIJk2BXHsn+wx8BZdTaoZ5fu7I=
github.com/google/uuid v1.3.0/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo=
github.com/google/uuid v1.6.0 h1:NIvaJDMOsjHA8n1jAhLSgzrAzy1Hgr+hNrb57e+94F0=
github.com/google/uuid v1.6.0/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo=
Expand Down Expand Up @@ -1065,8 +1070,8 @@ github.com/rogpeppe/fastuuid v1.2.0/go.mod h1:jVj6XXZzXRy/MSR5jhDC/2q6DgLz+nrA6L
github.com/rogpeppe/go-internal v1.3.0/go.mod h1:M8bDsm7K2OlrFYOpmOWEs/qY81heoFRclV5y23lUDJ4=
github.com/rogpeppe/go-internal v1.6.1/go.mod h1:xXDCJY+GAPziupqXw64V24skbSoqbTEfhy4qGm1nDQc=
github.com/rogpeppe/go-internal v1.8.0/go.mod h1:WmiCO8CzOY8rg0OYDC4/i/2WRWAB6poM+XZ2dLUbcbE=
github.com/rogpeppe/go-internal v1.11.0 h1:cWPaGQEPrBb5/AsnsZesgZZ9yb1OQ+GOISoDNXVBh4M=
github.com/rogpeppe/go-internal v1.11.0/go.mod h1:ddIwULY96R17DhadqLgMfk9H9tvdUzkipdSkR5nkCZA=
github.com/rogpeppe/go-internal v1.12.0 h1:exVL4IDcn6na9z1rAb56Vxr+CgyK3nn3O+epU5NdKM8=
github.com/rogpeppe/go-internal v1.12.0/go.mod h1:E+RYuTGaKKdloAfM02xzb0FW3Paa99yedzYV+kq4uf4=
github.com/rs/xid v1.2.1/go.mod h1:+uKXf+4Djp6Md1KODXJxgGQPKngRmWyn10oCKFzNHOQ=
github.com/rs/xid v1.4.0 h1:qd7wPTDkN6KQx2VmMBLrpHkiyQwgFXRnkOLacUiaSNY=
github.com/rs/xid v1.4.0/go.mod h1:trrq9SKmegXys3aeAKXMUTdJsYXVwGY3RLcfgqegfbg=
Expand Down Expand Up @@ -1309,8 +1314,6 @@ golang.org/x/crypto v0.1.0/go.mod h1:RecgLatLF4+eUMCP1PoPZQb+cVrJcOPbHkTkbkB9sbw
golang.org/x/crypto v0.3.1-0.20221117191849-2c476679df9a/go.mod h1:hebNnKkNXi2UzZN1eVRvBB7co0a+JxK6XbPiWVs/3J4=
golang.org/x/crypto v0.7.0/go.mod h1:pYwdfH91IfpZVANVyUOhSIPZaFoJGxTFbZhFTx+dXZU=
golang.org/x/crypto v0.14.0/go.mod h1:MVFd36DqK4CsrnJYDkBA3VC4m2GkXAM0PvzMCn4JQf4=
golang.org/x/crypto v0.21.0 h1:X31++rzVUdKhX5sWmSOFZxx8UW/ldWx55cbf08iNAMA=
golang.org/x/crypto v0.21.0/go.mod h1:0BP7YvVV9gBbVKyeTG0Gyn+gZm94bibOW5BjDEYAOMs=
golang.org/x/crypto v0.25.0 h1:ypSNr+bnYL2YhwoMt2zPxHFmbAN1KZs/njMG3hxUp30=
golang.org/x/crypto v0.25.0/go.mod h1:T+wALwcMOSE0kXgUAnPAHqTLW+XHgcELELW8VaDgm/M=
golang.org/x/exp v0.0.0-20180321215751-8460e604b9de/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA=
Expand Down Expand Up @@ -1368,8 +1371,6 @@ golang.org/x/mod v0.6.0/go.mod h1:4mET923SAdbXp2ki8ey+zGs1SLqsuM2Y0uvdZR/fUNI=
golang.org/x/mod v0.7.0/go.mod h1:iBbtSCu2XBx23ZKBPSOrRkjjQPZFPuis4dIYUhu/chs=
golang.org/x/mod v0.8.0/go.mod h1:iBbtSCu2XBx23ZKBPSOrRkjjQPZFPuis4dIYUhu/chs=
golang.org/x/mod v0.9.0/go.mod h1:iBbtSCu2XBx23ZKBPSOrRkjjQPZFPuis4dIYUhu/chs=
golang.org/x/mod v0.13.0 h1:I/DsJXRlw/8l/0c24sM9yb0T4z9liZTduXvdAWYiysY=
golang.org/x/mod v0.13.0/go.mod h1:hTbmBsO62+eylJbnUtE2MGJUyE7QWk4xUqPFrRgJ+7c=
golang.org/x/mod v0.17.0 h1:zY54UmvipHiNd+pm+m0x9KhZ9hl1/7QNMyxXbc6ICqA=
golang.org/x/mod v0.17.0/go.mod h1:hTbmBsO62+eylJbnUtE2MGJUyE7QWk4xUqPFrRgJ+7c=
golang.org/x/net v0.0.0-20180724234803-3673e40ba225/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4=
Expand Down Expand Up @@ -1440,8 +1441,6 @@ golang.org/x/net v0.7.0/go.mod h1:2Tu9+aMcznHK/AK1HMvgo6xiTLG5rD5rZLDS+rp2Bjs=
golang.org/x/net v0.8.0/go.mod h1:QVkue5JL9kW//ek3r6jTKnTFis1tRmNAW2P1shuFdJc=
golang.org/x/net v0.10.0/go.mod h1:0qNGK6F8kojg2nk9dLZ2mShWaEBan6FAoqfSigmmuDg=
golang.org/x/net v0.17.0/go.mod h1:NxSsAGuq816PNPmqtQdLE42eU2Fs7NoRIZrHJAlaCOE=
golang.org/x/net v0.22.0 h1:9sGLhx7iRIHEiX0oAJ3MRZMUCElJgy7Br1nO+AMN3Tc=
golang.org/x/net v0.22.0/go.mod h1:JKghWKKOSdJwpW2GEx0Ja7fmaKnMsbu+MWVZTokSYmg=
golang.org/x/net v0.27.0 h1:5K3Njcw06/l2y9vpGCSdcxWOYHOUk3dVNGDXN+FvAys=
golang.org/x/net v0.27.0/go.mod h1:dDi0PyhWNoiUOrAS8uXv/vnScO4wnHQO4mj9fn/RytE=
golang.org/x/oauth2 v0.0.0-20180821212333-d2e6202438be/go.mod h1:N/0e6XlmueqKjAGxoOufVs8QHGRruUQn6yWY3a++T0U=
Expand Down Expand Up @@ -1474,8 +1473,6 @@ golang.org/x/sync v0.0.0-20201207232520-09787c993a3a/go.mod h1:RxMgew5VJxzue5/jJ
golang.org/x/sync v0.0.0-20210220032951-036812b2e83c/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
golang.org/x/sync v0.0.0-20220722155255-886fb9371eb4/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
golang.org/x/sync v0.1.0/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
golang.org/x/sync v0.4.0 h1:zxkM55ReGkDlKSM+Fu41A+zmbZuaPVbGMzvvdUPznYQ=
golang.org/x/sync v0.4.0/go.mod h1:FU7BRWz2tNW+3quACPkgCx/L+uEAv1htQ0V83Z9Rj+Y=
golang.org/x/sync v0.7.0 h1:YsImfSBoP9QPYL0xyKJPq0gcaJdG3rInoqxTWbfQu9M=
golang.org/x/sync v0.7.0/go.mod h1:Czt+wKu1gCyEFDUtn0jG5QVvpJ6rzVqr5aXyt9drQfk=
golang.org/x/sys v0.0.0-20180823144017-11551d06cbcc/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
Expand Down Expand Up @@ -1588,8 +1585,6 @@ golang.org/x/sys v0.5.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
golang.org/x/sys v0.6.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
golang.org/x/sys v0.8.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
golang.org/x/sys v0.13.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
golang.org/x/sys v0.18.0 h1:DBdB3niSjOA/O0blCZBqDefyWNYveAYMNF1Wum0DYQ4=
golang.org/x/sys v0.18.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA=
golang.org/x/sys v0.22.0 h1:RI27ohtqKCnwULzJLqkv897zojh5/DwS/ENaMzUOaWI=
golang.org/x/sys v0.22.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA=
golang.org/x/term v0.0.0-20201126162022-7de9c90e9dd1/go.mod h1:bj7SfCRtBDWHUb9snDiAeCFNEtKQo2Wmx5Cou7ajbmo=
Expand All @@ -1602,8 +1597,6 @@ golang.org/x/term v0.5.0/go.mod h1:jMB1sMXY+tzblOD4FWmEbocvup2/aLOaQEp7JmGp78k=
golang.org/x/term v0.6.0/go.mod h1:m6U89DPEgQRMq3DNkDClhWw02AUbt2daBVO4cn4Hv9U=
golang.org/x/term v0.8.0/go.mod h1:xPskH00ivmX89bAKVGSKKtLOWNx2+17Eiy94tnKShWo=
golang.org/x/term v0.13.0/go.mod h1:LTmsnFJwVN6bCy1rVCoS+qHT1HhALEFxKncY3WNNh4U=
golang.org/x/term v0.18.0 h1:FcHjZXDMxI8mM3nwhX9HlKop4C0YQvCVCdwYl2wOtE8=
golang.org/x/term v0.18.0/go.mod h1:ILwASektA3OnRv7amZ1xhE/KTR+u50pbXfZ03+6Nx58=
golang.org/x/term v0.22.0 h1:BbsgPEJULsl2fV/AT3v15Mjva5yXKQDyKf+TbDz7QJk=
golang.org/x/term v0.22.0/go.mod h1:F3qCibpT5AMpCRfhfT53vVJwhLtIVHhB9XDjfFvnMI4=
golang.org/x/text v0.0.0-20170915032832-14c0d48ead0c/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ=
Expand All @@ -1623,8 +1616,6 @@ golang.org/x/text v0.7.0/go.mod h1:mrYo+phRRbMaCq/xk9113O4dZlRixOauAjOtrjsXDZ8=
golang.org/x/text v0.8.0/go.mod h1:e1OnstbJyHTd6l/uOt8jFFHp6TRDWZR/bV3emEE/zU8=
golang.org/x/text v0.9.0/go.mod h1:e1OnstbJyHTd6l/uOt8jFFHp6TRDWZR/bV3emEE/zU8=
golang.org/x/text v0.13.0/go.mod h1:TvPlkZtksWOMsz7fbANvkp4WM8x/WCo/om8BMLbz+aE=
golang.org/x/text v0.14.0 h1:ScX5w1eTa3QqT8oi6+ziP7dTV1S2+ALU0bI+0zXKWiQ=
golang.org/x/text v0.14.0/go.mod h1:18ZOQIKpY8NJVqYksKHtTdi31H5itFRjB5/qKTNYzSU=
golang.org/x/text v0.16.0 h1:a94ExnEXNtEwYLGJSIUxnWoxoRz/ZcCsV63ROupILh4=
golang.org/x/text v0.16.0/go.mod h1:GhwF1Be+LQoKShO3cGOHzqOgRrGaYc9AvblQOmPVHnI=
golang.org/x/time v0.0.0-20180412165947-fbb02b2291d2/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ=
Expand Down Expand Up @@ -1712,8 +1703,6 @@ golang.org/x/tools v0.2.0/go.mod h1:y4OqIKeOV/fWJetJ8bXPU1sEVniLMIyDAZWeHdV+NTA=
golang.org/x/tools v0.4.0/go.mod h1:UE5sM2OK9E/d67R0ANs2xJizIymRP5gJU295PvKXxjQ=
golang.org/x/tools v0.6.0/go.mod h1:Xwgl3UAJ/d3gWutnCtw505GrjyAbvKui8lOU390QaIU=
golang.org/x/tools v0.7.0/go.mod h1:4pg6aUX35JBAogB10C9AtvVL+qowtN4pT3CGSQex14s=
golang.org/x/tools v0.14.0 h1:jvNa2pY0M4r62jkRQ6RwEZZyPcymeL9XZMLBbV7U2nc=
golang.org/x/tools v0.14.0/go.mod h1:uYBEerGOWcJyEORxN+Ek8+TT266gXkNlHdJBwexUsBg=
golang.org/x/tools v0.21.1-0.20240508182429-e35e4ccd0d2d h1:vU5i/LfpvrRCpgM/VPfJLg5KjxD3E+hfT1SH+d9zLwg=
golang.org/x/tools v0.21.1-0.20240508182429-e35e4ccd0d2d/go.mod h1:aiJjzUbINMkxbQROHiO6hDPo2LHcIPhhQsa9DLh0yGk=
golang.org/x/xerrors v0.0.0-20190717185122-a985d3407aa7/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0=
Expand Down
49 changes: 49 additions & 0 deletions internal/azure/azure.go
Original file line number Diff line number Diff line change
Expand Up @@ -197,3 +197,52 @@ func NewClient(clientID, clientSecret, subscriptionID, tenantID string) (*Client
subscriptionID: subscriptionID,
}, nil
}

func (c *Client) GetDNSDomains(ctx context.Context, resourceGroup string) ([]string, error) {
client, err := c.newDNSClientFactory()
if err != nil {
return nil, err
}

var domains []string
pager := client.NewZonesClient().NewListByResourceGroupPager(resourceGroup, nil)

for pager.More() {
page, err := pager.NextPage(ctx)
if err != nil {
return nil, fmt.Errorf("failed to list DNS zones: %w", err)
}

for _, zone := range page.Value {
if zone.Name != nil {
domains = append(domains, *zone.Name)
}
}
}

return domains, nil
}

func (c *Client) GetResourceGroups(ctx context.Context) ([]string, error) {
client, err := c.newResourceClientFactory()
if err != nil {
return nil, err
}

pager := client.NewResourceGroupsClient().NewListPager(nil)

var resourceGroups []string

for pager.More() {
page, err := pager.NextPage(ctx)
if err != nil {
return nil, fmt.Errorf("failed to list resource groups: %w", err)
}

for _, rg := range page.Value {
resourceGroups = append(resourceGroups, *rg.Name)
}
}

return resourceGroups, nil
}
47 changes: 40 additions & 7 deletions internal/router/api/v1/domain.go
Original file line number Diff line number Diff line change
Expand Up @@ -14,6 +14,7 @@ import (
cloudflare_api "github.com/cloudflare/cloudflare-go"
"github.com/gin-gonic/gin"
awsinternal "github.com/konstructio/kubefirst-api/internal/aws"
"github.com/konstructio/kubefirst-api/internal/azure"
"github.com/konstructio/kubefirst-api/internal/civo"
cloudflare "github.com/konstructio/kubefirst-api/internal/cloudflare"
"github.com/konstructio/kubefirst-api/internal/digitalocean"
Expand Down Expand Up @@ -73,7 +74,7 @@ func PostDomains(c *gin.Context) {

domains, err := client.ListDomains(context.Background(), &linodego.ListOptions{})
if err != nil {
c.JSON(http.StatusBadRequest, types.JSONFailureResponse{
c.JSON(http.StatusInternalServerError, types.JSONFailureResponse{
Message: err.Error(),
})
return
Expand Down Expand Up @@ -119,6 +120,38 @@ func PostDomains(c *gin.Context) {
return
}
domainListResponse.Domains = domains

case "azure":
err = domainListRequest.AzureAuth.ValidateAuthCredentials()
if err != nil {
c.JSON(http.StatusBadRequest, types.JSONFailureResponse{
Message: err.Error(),
})
return
}

azureClient, err := azure.NewClient(
domainListRequest.AzureAuth.ClientID,
domainListRequest.AzureAuth.ClientSecret,
domainListRequest.AzureAuth.SubscriptionID,
domainListRequest.AzureAuth.TenantID,
)
if err != nil {
c.JSON(http.StatusInternalServerError, types.JSONFailureResponse{
Message: err.Error(),
})
return
}

domains, err := azureClient.GetDNSDomains(context.Background(), domainListRequest.ResourceGroup)
if err != nil {
c.JSON(http.StatusInternalServerError, types.JSONFailureResponse{
Message: err.Error(),
})
return
}

domainListResponse.Domains = domains
case "cloudflare":
// check for token, make sure it aint blank
if domainListRequest.CloudflareAuth.APIToken == "" {
Expand All @@ -130,7 +163,7 @@ func PostDomains(c *gin.Context) {

client, err := cloudflare_api.NewWithAPIToken(domainListRequest.CloudflareAuth.APIToken)
if err != nil {
c.JSON(http.StatusBadRequest, types.JSONFailureResponse{
c.JSON(http.StatusInternalServerError, types.JSONFailureResponse{
Message: fmt.Sprintf("Could not create cloudflare client, %v", err),
})
return
Expand All @@ -143,7 +176,7 @@ func PostDomains(c *gin.Context) {

domains, err := cloudflareConf.GetDNSDomains()
if err != nil {
c.JSON(http.StatusBadRequest, types.JSONFailureResponse{
c.JSON(http.StatusInternalServerError, types.JSONFailureResponse{
Message: err.Error(),
})
return
Expand All @@ -165,7 +198,7 @@ func PostDomains(c *gin.Context) {

domains, err := civoConf.GetDNSDomains()
if err != nil {
c.JSON(http.StatusBadRequest, types.JSONFailureResponse{
c.JSON(http.StatusInternalServerError, types.JSONFailureResponse{
Message: err.Error(),
})
return
Expand All @@ -185,7 +218,7 @@ func PostDomains(c *gin.Context) {

domains, err := digitaloceanConf.GetDNSDomains()
if err != nil {
c.JSON(http.StatusBadRequest, types.JSONFailureResponse{
c.JSON(http.StatusInternalServerError, types.JSONFailureResponse{
Message: err.Error(),
})
return
Expand All @@ -205,7 +238,7 @@ func PostDomains(c *gin.Context) {

domains, err := vultrConf.GetDNSDomains()
if err != nil {
c.JSON(http.StatusBadRequest, types.JSONFailureResponse{
c.JSON(http.StatusInternalServerError, types.JSONFailureResponse{
Message: err.Error(),
})
return
Expand All @@ -228,7 +261,7 @@ func PostDomains(c *gin.Context) {

domains, err := googleConf.GetDNSDomains()
if err != nil {
c.JSON(http.StatusBadRequest, types.JSONFailureResponse{
c.JSON(http.StatusInternalServerError, types.JSONFailureResponse{
Message: err.Error(),
})
return
Expand Down
57 changes: 57 additions & 0 deletions internal/router/api/v1/resourceGroups.go
Original file line number Diff line number Diff line change
@@ -0,0 +1,57 @@
package api

import (
"context"
"net/http"

"github.com/gin-gonic/gin"
"github.com/konstructio/kubefirst-api/internal/azure"
"github.com/konstructio/kubefirst-api/internal/types"
)

// Currently only needs to support google
func ListResourceGroups(c *gin.Context) {
var resourceGroupsListRequest types.ResourceGroupsListRequest
err := c.Bind(&resourceGroupsListRequest)
if err != nil {
c.JSON(http.StatusBadRequest, types.JSONFailureResponse{
Message: err.Error(),
})
return
}

err = resourceGroupsListRequest.AzureAuth.ValidateAuthCredentials()
if err != nil {
c.JSON(http.StatusBadRequest, types.JSONFailureResponse{
Message: err.Error(),
})
return
}

azureClient, err := azure.NewClient(
resourceGroupsListRequest.AzureAuth.ClientID,
resourceGroupsListRequest.AzureAuth.ClientSecret,
resourceGroupsListRequest.AzureAuth.SubscriptionID,
resourceGroupsListRequest.AzureAuth.TenantID,
)
if err != nil {
c.JSON(http.StatusBadRequest, types.JSONFailureResponse{
Message: err.Error(),
})
return
}

var resourceGroupsListResponse types.ResourceGroupsListResponse

resourceGroups, err := azureClient.GetResourceGroups(context.Background())
if err != nil {
c.JSON(http.StatusBadRequest, types.JSONFailureResponse{
Message: err.Error(),
})
return
}

resourceGroupsListResponse.ResourceGroups = resourceGroups

c.JSON(http.StatusOK, resourceGroupsListResponse)
}
1 change: 1 addition & 0 deletions internal/router/router.go
Original file line number Diff line number Diff line change
Expand Up @@ -86,6 +86,7 @@ func SetupRouter() *gin.Engine {

// Zones *** Only supports google ***
v1.POST("/zones", middleware.ValidateAPIKey(), router.ListZonesForRegion)
v1.POST("/resource-groups", middleware.ValidateAPIKey(), router.ListResourceGroups)

// Instance Sizes
v1.POST("/instance-sizes/:cloud_provider", middleware.ValidateAPIKey(), router.ListInstanceSizesForRegion)
Expand Down
2 changes: 2 additions & 0 deletions internal/types/domain.go
Original file line number Diff line number Diff line change
Expand Up @@ -13,13 +13,15 @@ import (
// DomainListRequest
type DomainListRequest struct {
CloudRegion string `json:"cloud_region"`
ResourceGroup string `json:"resource_group"`
AkamaiAuth pkgtypes.AkamaiAuth `json:"akamai_auth,omitempty"`
AWSAuth pkgtypes.AWSAuth `json:"aws_auth,omitempty"`
CivoAuth pkgtypes.CivoAuth `json:"civo_auth,omitempty"`
DigitaloceanAuth pkgtypes.DigitaloceanAuth `json:"do_auth,omitempty"`
VultrAuth pkgtypes.VultrAuth `json:"vultr_auth,omitempty"`
CloudflareAuth pkgtypes.CloudflareAuth `json:"cloudflare_auth,omitempty"`
GoogleAuth pkgtypes.GoogleAuth `bson:"google_auth,omitempty" json:"google_auth,omitempty"`
AzureAuth pkgtypes.AzureAuth `bson:"azure_auth,omitempty" json:"azure_auth,omitempty"`
}

// DomainListResponse
Expand Down
13 changes: 13 additions & 0 deletions internal/types/resourceGroups.go
Original file line number Diff line number Diff line change
@@ -0,0 +1,13 @@
package types

import (
pkgtypes "github.com/konstructio/kubefirst-api/pkg/types"
)

type ResourceGroupsListRequest struct {
AzureAuth pkgtypes.AzureAuth `bson:"azure_auth,omitempty" json:"azure_auth,omitempty"`
}

type ResourceGroupsListResponse struct {
ResourceGroups []string `json:"resource_groups"`
}
8 changes: 0 additions & 8 deletions pkg/types/auth.go
Original file line number Diff line number Diff line change
Expand Up @@ -18,14 +18,6 @@ type AWSAuth struct {
SessionToken string `bson:"session_token" json:"session_token"`
}

// AzureAuth holds necessary auth credentials for interacting with azure
type AzureAuth struct {
ClientID string `bson:"client_id" json:"client_id"`
ClientSecret string `bson:"client_secret" json:"client_secret"`
TenantID string `bson:"tenant_id" json:"tenant_id"`
SubscriptionID string `bson:"subscription_id" json:"subscription_id"`
}

// CivoAuth holds necessary auth credentials for interacting with civo
type CivoAuth struct {
Token string `bson:"token" json:"token"`
Expand Down
Loading