Skip to content

Commit 4fbedb0

Browse files
Initial commit
0 parents  commit 4fbedb0

17 files changed

+911
-0
lines changed

Makefile

Lines changed: 30 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,30 @@
1+
TEST?=./gitea
2+
GOFMT_FILES?=$$(find . -name '*.go' |grep -v vendor)
3+
4+
GOFMT ?= gofmt -s
5+
6+
test: fmt-check
7+
go test -i $(TEST) || exit 1
8+
echo $(TEST) | \
9+
xargs -t -n4 go test $(TESTARGS) -timeout=30s -parallel=4
10+
11+
testacc: fmt-check
12+
TF_ACC=1 go test -v $(TEST) $(TESTARGS) -timeout 40m
13+
14+
vet:
15+
@echo "go vet ."
16+
@go vet $$(go list ./... | grep -v vendor/) ; if [ $$? -eq 1 ]; then \
17+
echo ""; \
18+
echo "Vet found suspicious constructs. Please check the reported constructs"; \
19+
echo "and fix them if necessary before submitting the code for review."; \
20+
exit 1; \
21+
fi
22+
23+
.PHONY: fmt-check
24+
fmt-check:
25+
@diff=$$($(GOFMT) -d $(GOFMT_FILES)); \
26+
if [ -n "$$diff" ]; then \
27+
echo "Please run 'make fmt' and commit the result:"; \
28+
echo "$${diff}"; \
29+
exit 1; \
30+
fi;

README.md

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,3 @@
1+
# terraform-provider-gitea
2+
Terraform Gitea Provider
3+

gitea/config.go

Lines changed: 73 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,73 @@
1+
package gitea
2+
3+
import (
4+
"crypto/tls"
5+
"crypto/x509"
6+
"fmt"
7+
"io/ioutil"
8+
"net/http"
9+
10+
"code.gitea.io/sdk/gitea"
11+
"github.com/hashicorp/terraform-plugin-sdk/helper/logging"
12+
)
13+
14+
// Config is per-provider, specifies where to connect to gitea
15+
type Config struct {
16+
Token string
17+
Username string
18+
Password string
19+
BaseURL string
20+
Insecure bool
21+
CACertFile string
22+
}
23+
24+
// Client returns a *gitea.Client to interact with the configured gitea instance
25+
func (c *Config) Client() (interface{}, error) {
26+
27+
if c.Token == "" && c.Username == "" {
28+
return nil, fmt.Errorf("either a token or a username needs to be used")
29+
}
30+
// Configure TLS/SSL
31+
tlsConfig := &tls.Config{}
32+
33+
// If a CACertFile has been specified, use that for cert validation
34+
if c.CACertFile != "" {
35+
caCert, err := ioutil.ReadFile(c.CACertFile)
36+
if err != nil {
37+
return nil, err
38+
}
39+
40+
caCertPool := x509.NewCertPool()
41+
caCertPool.AppendCertsFromPEM(caCert)
42+
tlsConfig.RootCAs = caCertPool
43+
}
44+
45+
// If configured as insecure, turn off SSL verification
46+
if c.Insecure {
47+
tlsConfig.InsecureSkipVerify = true
48+
}
49+
50+
t := http.DefaultTransport.(*http.Transport).Clone()
51+
t.TLSClientConfig = tlsConfig
52+
t.MaxIdleConnsPerHost = 100
53+
54+
httpClient := &http.Client{
55+
Transport: logging.NewTransport("Gitea", t),
56+
}
57+
58+
if c.BaseURL == "" {
59+
c.BaseURL = "https://gitea.com"
60+
}
61+
62+
client := gitea.NewClient(c.BaseURL, c.Token)
63+
client.SetHTTPClient(httpClient)
64+
65+
if c.Username != "" {
66+
client.SetBasicAuth(c.Username, c.Password)
67+
}
68+
69+
// Test the credentials by checking we can get information about the authenticated user.
70+
_, err := client.GetMyUserInfo()
71+
72+
return client, err
73+
}

gitea/data_source_gitea_org.go

Lines changed: 85 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,85 @@
1+
package gitea
2+
3+
import (
4+
"fmt"
5+
"log"
6+
"strings"
7+
8+
"code.gitea.io/sdk/gitea"
9+
"github.com/hashicorp/terraform-plugin-sdk/helper/schema"
10+
)
11+
12+
func dataSourceGiteaOrg() *schema.Resource {
13+
return &schema.Resource{
14+
Read: dataSourceGitlabUserRead,
15+
Schema: map[string]*schema.Schema{
16+
"id": {
17+
Type: schema.TypeInt,
18+
Computed: true,
19+
},
20+
"name": {
21+
Type: schema.TypeString,
22+
Computed: true,
23+
Optional: true,
24+
},
25+
"full_name": {
26+
Type: schema.TypeString,
27+
Computed: true,
28+
},
29+
"description": {
30+
Type: schema.TypeString,
31+
Computed: true,
32+
},
33+
"avatar_url": {
34+
Type: schema.TypeString,
35+
Computed: true,
36+
},
37+
"website": {
38+
Type: schema.TypeString,
39+
Computed: true,
40+
},
41+
"location": {
42+
Type: schema.TypeString,
43+
Computed: true,
44+
},
45+
"visibility": {
46+
Type: schema.TypeString,
47+
Computed: true,
48+
},
49+
},
50+
}
51+
}
52+
53+
func dataSourceGitlabOrgRead(d *schema.ResourceData, meta interface{}) error {
54+
client := meta.(*gitea.Client)
55+
56+
var org *gitea.Organization
57+
var err error
58+
59+
log.Printf("[INFO] Reading Gitea Org")
60+
61+
nameData, nameOk := d.GetOk("name")
62+
63+
if !nameOk {
64+
return fmt.Errorf("name of org must be passed")
65+
}
66+
name := strings.ToLower(nameData.(string))
67+
68+
org, err = client.GetOrg(name)
69+
if err != nil {
70+
return err
71+
}
72+
73+
d.Set("id", org.ID)
74+
d.Set("name", org.UserName)
75+
d.Set("full_name", org.FullName)
76+
d.Set("avatar_url", org.AvatarURL)
77+
d.Set("location", org.Location)
78+
d.Set("website", org.Website)
79+
d.Set("description", org.Description)
80+
d.Set("visibility", org.Visibility)
81+
82+
d.SetId(fmt.Sprintf("%d", org.ID))
83+
84+
return nil
85+
}

gitea/data_source_gitea_repo.go

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
package gitea

gitea/data_source_gitea_repos.go

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
package gitea

gitea/data_source_gitea_team.go

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
package gitea

gitea/data_source_gitea_teams.go

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
package gitea

gitea/data_source_gitea_user.go

Lines changed: 91 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,91 @@
1+
package gitea
2+
3+
import (
4+
"fmt"
5+
"log"
6+
"strings"
7+
8+
"code.gitea.io/sdk/gitea"
9+
"github.com/hashicorp/terraform-plugin-sdk/helper/schema"
10+
)
11+
12+
func dataSourceGiteaUser() *schema.Resource {
13+
return &schema.Resource{
14+
Read: dataSourceGitlabUserRead,
15+
Schema: map[string]*schema.Schema{
16+
"id": {
17+
Type: schema.TypeInt,
18+
Computed: true,
19+
},
20+
"username": {
21+
Type: schema.TypeString,
22+
Computed: true,
23+
Optional: true,
24+
},
25+
"email": {
26+
Type: schema.TypeString,
27+
Computed: true,
28+
},
29+
"full_name": {
30+
Type: schema.TypeString,
31+
Computed: true,
32+
},
33+
"is_admin": {
34+
Type: schema.TypeBool,
35+
Computed: true,
36+
},
37+
"avatar_url": {
38+
Type: schema.TypeString,
39+
Computed: true,
40+
},
41+
"language": {
42+
Type: schema.TypeString,
43+
Computed: true,
44+
},
45+
"last_login": {
46+
Type: schema.TypeString,
47+
Computed: true,
48+
},
49+
"created": {
50+
Type: schema.TypeString,
51+
Computed: true,
52+
},
53+
},
54+
}
55+
}
56+
57+
func dataSourceGitlabUserRead(d *schema.ResourceData, meta interface{}) error {
58+
client := meta.(*gitea.Client)
59+
60+
var user *gitea.User
61+
var err error
62+
63+
log.Printf("[INFO] Reading Gitea user")
64+
65+
usernameData, usernameOk := d.GetOk("username")
66+
67+
if !usernameOk {
68+
user, err = client.GetMyUserInfo()
69+
} else {
70+
username := strings.ToLower(usernameData.(string))
71+
72+
user, err = client.GetUserInfo(username)
73+
if err != nil {
74+
return err
75+
}
76+
}
77+
78+
d.Set("id", user.ID)
79+
d.Set("username", user.UserName)
80+
d.Set("email", user.Email)
81+
d.Set("full_name", user.FullName)
82+
d.Set("is_admin", user.IsAdmin)
83+
d.Set("created", user.Created)
84+
d.Set("avatar_url", user.AvatarURL)
85+
d.Set("last_login", user.LastLogin)
86+
d.Set("language", user.Language)
87+
88+
d.SetId(fmt.Sprintf("%d", user.ID))
89+
90+
return nil
91+
}

gitea/data_source_gitea_user_test.go

Lines changed: 62 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,62 @@
1+
package gitea
2+
3+
import (
4+
"fmt"
5+
"testing"
6+
7+
"github.com/hashicorp/terraform-plugin-sdk/helper/resource"
8+
"github.com/hashicorp/terraform-plugin-sdk/terraform"
9+
)
10+
11+
func TestAccDataSourceGiteaUser_basic(t *testing.T) {
12+
13+
resource.Test(t, resource.TestCase{
14+
PreCheck: func() { testAccPreCheck(t) },
15+
Providers: testAccProviders,
16+
Steps: []resource.TestStep{
17+
// Get user using its username
18+
{
19+
Config: testAccDataGiteaUserConfigUsername(),
20+
Check: resource.ComposeTestCheckFunc(
21+
testAccDataSourceGiteaUser("data.gitea_user.foo"),
22+
),
23+
},
24+
{
25+
Config: testAccDataGiteaUserConfigUsername(),
26+
Check: resource.ComposeTestCheckFunc(
27+
testAccDataSourceGiteaUser("data.gitea_user.self"),
28+
),
29+
},
30+
},
31+
})
32+
}
33+
34+
func testAccDataSourceGiteaUser(src string) resource.TestCheckFunc {
35+
return func(s *terraform.State) error {
36+
37+
user := s.RootModule().Resources[src]
38+
userResource := user.Primary.Attributes
39+
40+
testAttributes := []string{
41+
"username",
42+
}
43+
44+
for _, attribute := range testAttributes {
45+
if userResource[attribute] != "test01" {
46+
return fmt.Errorf("Expected user's parameter `%s` to be: %s, but got: `%s`", attribute, userResource[attribute], "test01")
47+
}
48+
}
49+
50+
return nil
51+
}
52+
}
53+
54+
func testAccDataGiteaUserConfigUsername() string {
55+
return fmt.Sprintf(`
56+
data "gitea_user" "foo" {
57+
username = "test01"
58+
}
59+
data "gitea_user" "self" {
60+
}
61+
`)
62+
}

0 commit comments

Comments
 (0)