Merge pull request '#3 added team resource and fixed crash in public key state persisting' (#4) from feature/tt/#3-team-management into main
Reviewed-on: #4
This commit is contained in:
		
							
								
								
									
										2
									
								
								Makefile
									
									
									
									
									
								
							
							
						
						
									
										2
									
								
								Makefile
									
									
									
									
									
								
							| @@ -3,7 +3,7 @@ GOFMT_FILES?=$$(find . -name '*.go' |grep -v vendor) | |||||||
|  |  | ||||||
| GOFMT ?= gofmt -s | GOFMT ?= gofmt -s | ||||||
|  |  | ||||||
| VERSION = 0.5.0 | VERSION = 0.6.0 | ||||||
|  |  | ||||||
| test: fmt-check | test: fmt-check | ||||||
| 	go test -i $(TEST) || exit 1 | 	go test -i $(TEST) || exit 1 | ||||||
|   | |||||||
							
								
								
									
										62
									
								
								docs/resources/team.md
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										62
									
								
								docs/resources/team.md
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,62 @@ | |||||||
|  | --- | ||||||
|  | # generated by https://github.com/hashicorp/terraform-plugin-docs | ||||||
|  | page_title: "gitea_team Resource - terraform-provider-gitea" | ||||||
|  | subcategory: "" | ||||||
|  | description: |- | ||||||
|  |   gitea_team manages Team that are part of an organisation. | ||||||
|  | --- | ||||||
|  |  | ||||||
|  | # gitea_team (Resource) | ||||||
|  |  | ||||||
|  | `gitea_team` manages Team that are part of an organisation. | ||||||
|  |  | ||||||
|  | ## Example Usage | ||||||
|  |  | ||||||
|  | ```terraform | ||||||
|  | resource "gitea_org" "test_org" { | ||||||
|  |   name = "test-org" | ||||||
|  | } | ||||||
|  |  | ||||||
|  | resource "gitea_user" "test" { | ||||||
|  |   username             = "test" | ||||||
|  |   login_name           = "test" | ||||||
|  |   password             = "Geheim1!" | ||||||
|  |   email                = "test@user.dev" | ||||||
|  |   must_change_password = false | ||||||
|  |   admin                = true | ||||||
|  | } | ||||||
|  |  | ||||||
|  |  | ||||||
|  | resource "gitea_team" "test_team" { | ||||||
|  |   name         = "Devs" | ||||||
|  |   organisation = gitea_org.test_org.name | ||||||
|  |   description  = "Devs of Test Org" | ||||||
|  |   permission   = "write" | ||||||
|  |   members      = [gitea_user.test.username] | ||||||
|  | } | ||||||
|  | ``` | ||||||
|  |  | ||||||
|  | <!-- schema generated by tfplugindocs --> | ||||||
|  | ## Schema | ||||||
|  |  | ||||||
|  | ### Required | ||||||
|  |  | ||||||
|  | - `name` (String) Name of the Team | ||||||
|  | - `organisation` (String) The organisation which this Team is part of. | ||||||
|  |  | ||||||
|  | ### Optional | ||||||
|  |  | ||||||
|  | - `can_create_repos` (Boolean) Flag if the Teams members should be able to create Rpositories in the Organisation | ||||||
|  | - `description` (String) Description of the Team | ||||||
|  | - `include_all_repositories` (Boolean) Flag if the Teams members should have access to all Repositories in the Organisation | ||||||
|  | - `members` (List of String) List of Users that should be part of this team | ||||||
|  | - `permission` (String) Permissions associated with this Team | ||||||
|  | Can be `none`, `read`, `write`, `admin` or `owner` | ||||||
|  | - `units` (String) List of types of Repositories that should be allowed to be created from Team members. | ||||||
|  | Can be `repo.code`, `repo.issues`, `repo.ext_issues`, `repo.wiki`, `repo.pulls`, `repo.releases`, `repo.projects` and/or `repo.ext_wiki` | ||||||
|  |  | ||||||
|  | ### Read-Only | ||||||
|  |  | ||||||
|  | - `id` (String) The ID of this resource. | ||||||
|  |  | ||||||
|  |  | ||||||
| @@ -46,3 +46,12 @@ resource "gitea_public_key" "test_user_key" { | |||||||
|   read_only = true |   read_only = true | ||||||
|   username  = gitea_user.test.username |   username  = gitea_user.test.username | ||||||
| } | } | ||||||
|  |  | ||||||
|  |  | ||||||
|  | resource "gitea_team" "test_team" { | ||||||
|  |   name         = "Devs" | ||||||
|  |   organisation = gitea_org.test_org.name | ||||||
|  |   description  = "Devs of Test Org" | ||||||
|  |   permission   = "write" | ||||||
|  |   members      = [gitea_user.test.username] | ||||||
|  | } | ||||||
|   | |||||||
| @@ -2,7 +2,7 @@ terraform { | |||||||
|   required_providers { |   required_providers { | ||||||
|     gitea = { |     gitea = { | ||||||
|       source = "terraform.local/lerentis/gitea" |       source = "terraform.local/lerentis/gitea" | ||||||
|       version = "0.5.0" |       version = "0.6.0" | ||||||
|     } |     } | ||||||
|   } |   } | ||||||
| } | } | ||||||
|   | |||||||
							
								
								
									
										21
									
								
								examples/resources/gitea_team/resource.tf
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										21
									
								
								examples/resources/gitea_team/resource.tf
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,21 @@ | |||||||
|  | resource "gitea_org" "test_org" { | ||||||
|  |   name = "test-org" | ||||||
|  | } | ||||||
|  |  | ||||||
|  | resource "gitea_user" "test" { | ||||||
|  |   username             = "test" | ||||||
|  |   login_name           = "test" | ||||||
|  |   password             = "Geheim1!" | ||||||
|  |   email                = "test@user.dev" | ||||||
|  |   must_change_password = false | ||||||
|  |   admin                = true | ||||||
|  | } | ||||||
|  |  | ||||||
|  |  | ||||||
|  | resource "gitea_team" "test_team" { | ||||||
|  |   name         = "Devs" | ||||||
|  |   organisation = gitea_org.test_org.name | ||||||
|  |   description  = "Devs of Test Org" | ||||||
|  |   permission   = "write" | ||||||
|  |   members      = [gitea_user.test.username] | ||||||
|  | } | ||||||
| @@ -80,6 +80,7 @@ func Provider() terraform.ResourceProvider { | |||||||
| 			"gitea_oauth2_app": resourceGiteaOauthApp(), | 			"gitea_oauth2_app": resourceGiteaOauthApp(), | ||||||
| 			"gitea_repository": resourceGiteaRepository(), | 			"gitea_repository": resourceGiteaRepository(), | ||||||
| 			"gitea_public_key": resourceGiteaPublicKey(), | 			"gitea_public_key": resourceGiteaPublicKey(), | ||||||
|  | 			"gitea_team":       resourceGiteaTeam(), | ||||||
| 		}, | 		}, | ||||||
|  |  | ||||||
| 		ConfigureFunc: providerConfigure, | 		ConfigureFunc: providerConfigure, | ||||||
|   | |||||||
| @@ -90,7 +90,7 @@ func resourcePublicKeyDelete(d *schema.ResourceData, meta interface{}) (err erro | |||||||
|  |  | ||||||
| func setPublicKeyResourceData(pubKey *gitea.PublicKey, d *schema.ResourceData) (err error) { | func setPublicKeyResourceData(pubKey *gitea.PublicKey, d *schema.ResourceData) (err error) { | ||||||
| 	d.SetId(fmt.Sprintf("%d", pubKey.ID)) | 	d.SetId(fmt.Sprintf("%d", pubKey.ID)) | ||||||
| 	d.Set(PublicKeyUser, pubKey.Owner.UserName) | 	d.Set(PublicKeyUser, d.Get(PublicKeyUser).(string)) | ||||||
| 	d.Set(PublicKey, pubKey.Key) | 	d.Set(PublicKey, pubKey.Key) | ||||||
| 	d.Set(PublicKeyTitle, pubKey.Title) | 	d.Set(PublicKeyTitle, pubKey.Title) | ||||||
| 	d.Set(PublicKeyReadOnlyFlag, pubKey.ReadOnly) | 	d.Set(PublicKeyReadOnlyFlag, pubKey.ReadOnly) | ||||||
|   | |||||||
							
								
								
									
										296
									
								
								gitea/resource_gitea_team.go
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										296
									
								
								gitea/resource_gitea_team.go
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,296 @@ | |||||||
|  | package gitea | ||||||
|  |  | ||||||
|  | import ( | ||||||
|  | 	"fmt" | ||||||
|  | 	"strconv" | ||||||
|  | 	"strings" | ||||||
|  |  | ||||||
|  | 	"code.gitea.io/sdk/gitea" | ||||||
|  | 	"github.com/hashicorp/terraform-plugin-sdk/helper/schema" | ||||||
|  | ) | ||||||
|  |  | ||||||
|  | const ( | ||||||
|  | 	TeamName                string = "name" | ||||||
|  | 	TeamOrg                 string = "organisation" | ||||||
|  | 	TeamDescription         string = "description" | ||||||
|  | 	TeamPermissions         string = "permission" | ||||||
|  | 	TeamCreateRepoFlag      string = "can_create_repos" | ||||||
|  | 	TeamIncludeAllReposFlag string = "include_all_repositories" | ||||||
|  | 	TeamUnits               string = "units" | ||||||
|  | 	TeamMembers             string = "members" | ||||||
|  | ) | ||||||
|  |  | ||||||
|  | func resourceTeamRead(d *schema.ResourceData, meta interface{}) (err error) { | ||||||
|  | 	client := meta.(*gitea.Client) | ||||||
|  |  | ||||||
|  | 	id, err := strconv.ParseInt(d.Id(), 10, 64) | ||||||
|  |  | ||||||
|  | 	var resp *gitea.Response | ||||||
|  | 	var team *gitea.Team | ||||||
|  |  | ||||||
|  | 	team, resp, err = client.GetTeam(id) | ||||||
|  |  | ||||||
|  | 	if err != nil { | ||||||
|  | 		if resp.StatusCode == 404 { | ||||||
|  | 			d.SetId("") | ||||||
|  | 			return nil | ||||||
|  | 		} else { | ||||||
|  | 			return err | ||||||
|  | 		} | ||||||
|  | 	} | ||||||
|  |  | ||||||
|  | 	err = setTeamResourceData(team, d) | ||||||
|  |  | ||||||
|  | 	return | ||||||
|  | } | ||||||
|  |  | ||||||
|  | func resourceTeamCreate(d *schema.ResourceData, meta interface{}) (err error) { | ||||||
|  | 	client := meta.(*gitea.Client) | ||||||
|  |  | ||||||
|  | 	var team *gitea.Team | ||||||
|  | 	var units []gitea.RepoUnitType | ||||||
|  |  | ||||||
|  | 	if strings.Contains(d.Get(TeamUnits).(string), "repo.code") { | ||||||
|  | 		units = append(units, gitea.RepoUnitCode) | ||||||
|  | 	} | ||||||
|  | 	if strings.Contains(d.Get(TeamUnits).(string), "repo.issues") { | ||||||
|  | 		units = append(units, gitea.RepoUnitIssues) | ||||||
|  | 	} | ||||||
|  | 	if strings.Contains(d.Get(TeamUnits).(string), "repo.ext_issues") { | ||||||
|  | 		units = append(units, gitea.RepoUnitExtIssues) | ||||||
|  | 	} | ||||||
|  | 	if strings.Contains(d.Get(TeamUnits).(string), "repo.wiki") { | ||||||
|  | 		units = append(units, gitea.RepoUnitWiki) | ||||||
|  | 	} | ||||||
|  | 	if strings.Contains(d.Get(TeamUnits).(string), "repo.pulls") { | ||||||
|  | 		units = append(units, gitea.RepoUnitPulls) | ||||||
|  | 	} | ||||||
|  | 	if strings.Contains(d.Get(TeamUnits).(string), "repo.releases") { | ||||||
|  | 		units = append(units, gitea.RepoUnitReleases) | ||||||
|  | 	} | ||||||
|  | 	if strings.Contains(d.Get(TeamUnits).(string), "repo.ext_wiki") { | ||||||
|  | 		units = append(units, gitea.RepoUnitExtWiki) | ||||||
|  | 	} | ||||||
|  | 	if strings.Contains(d.Get(TeamUnits).(string), "repo.projects") { | ||||||
|  | 		units = append(units, gitea.RepoUnitProjects) | ||||||
|  | 	} | ||||||
|  |  | ||||||
|  | 	opts := gitea.CreateTeamOption{ | ||||||
|  | 		Name:                    d.Get(TeamName).(string), | ||||||
|  | 		Description:             d.Get(TeamDescription).(string), | ||||||
|  | 		Permission:              gitea.AccessMode(d.Get(TeamPermissions).(string)), | ||||||
|  | 		CanCreateOrgRepo:        d.Get(TeamCreateRepoFlag).(bool), | ||||||
|  | 		IncludesAllRepositories: d.Get(TeamIncludeAllReposFlag).(bool), | ||||||
|  | 		Units:                   units, | ||||||
|  | 	} | ||||||
|  |  | ||||||
|  | 	team, _, err = client.CreateTeam(d.Get(TeamOrg).(string), opts) | ||||||
|  |  | ||||||
|  | 	if err != nil { | ||||||
|  | 		return | ||||||
|  | 	} | ||||||
|  |  | ||||||
|  | 	users := d.Get(TeamMembers).([]interface{}) | ||||||
|  |  | ||||||
|  | 	for _, user := range users { | ||||||
|  | 		if user != "" { | ||||||
|  | 			_, err = client.AddTeamMember(team.ID, user.(string)) | ||||||
|  | 			if err != nil { | ||||||
|  | 				return err | ||||||
|  | 			} | ||||||
|  | 		} | ||||||
|  | 	} | ||||||
|  |  | ||||||
|  | 	err = setTeamResourceData(team, d) | ||||||
|  |  | ||||||
|  | 	return | ||||||
|  | } | ||||||
|  |  | ||||||
|  | func resourceTeamUpdate(d *schema.ResourceData, meta interface{}) (err error) { | ||||||
|  | 	client := meta.(*gitea.Client) | ||||||
|  |  | ||||||
|  | 	id, err := strconv.ParseInt(d.Id(), 10, 64) | ||||||
|  |  | ||||||
|  | 	var resp *gitea.Response | ||||||
|  | 	var team *gitea.Team | ||||||
|  |  | ||||||
|  | 	team, resp, err = client.GetTeam(id) | ||||||
|  |  | ||||||
|  | 	if err != nil { | ||||||
|  | 		if resp.StatusCode == 404 { | ||||||
|  | 			resourceTeamCreate(d, meta) | ||||||
|  | 		} else { | ||||||
|  | 			return err | ||||||
|  | 		} | ||||||
|  | 	} | ||||||
|  |  | ||||||
|  | 	description := d.Get(TeamDescription).(string) | ||||||
|  | 	canCreateRepo := d.Get(TeamCreateRepoFlag).(bool) | ||||||
|  | 	includeAllRepos := d.Get(TeamIncludeAllReposFlag).(bool) | ||||||
|  |  | ||||||
|  | 	var units []gitea.RepoUnitType | ||||||
|  |  | ||||||
|  | 	if strings.Contains(d.Get(TeamUnits).(string), "repo.code") { | ||||||
|  | 		units = append(units, gitea.RepoUnitCode) | ||||||
|  | 	} | ||||||
|  | 	if strings.Contains(d.Get(TeamUnits).(string), "repo.issues") { | ||||||
|  | 		units = append(units, gitea.RepoUnitIssues) | ||||||
|  | 	} | ||||||
|  | 	if strings.Contains(d.Get(TeamUnits).(string), "repo.ext_issues") { | ||||||
|  | 		units = append(units, gitea.RepoUnitExtIssues) | ||||||
|  | 	} | ||||||
|  | 	if strings.Contains(d.Get(TeamUnits).(string), "repo.wiki") { | ||||||
|  | 		units = append(units, gitea.RepoUnitWiki) | ||||||
|  | 	} | ||||||
|  | 	if strings.Contains(d.Get(TeamUnits).(string), "repo.pulls") { | ||||||
|  | 		units = append(units, gitea.RepoUnitPulls) | ||||||
|  | 	} | ||||||
|  | 	if strings.Contains(d.Get(TeamUnits).(string), "repo.releases") { | ||||||
|  | 		units = append(units, gitea.RepoUnitReleases) | ||||||
|  | 	} | ||||||
|  | 	if strings.Contains(d.Get(TeamUnits).(string), "repo.ext_wiki") { | ||||||
|  | 		units = append(units, gitea.RepoUnitExtWiki) | ||||||
|  | 	} | ||||||
|  | 	if strings.Contains(d.Get(TeamUnits).(string), "repo.projects") { | ||||||
|  | 		units = append(units, gitea.RepoUnitProjects) | ||||||
|  | 	} | ||||||
|  |  | ||||||
|  | 	opts := gitea.EditTeamOption{ | ||||||
|  | 		Name:                    d.Get(TeamName).(string), | ||||||
|  | 		Description:             &description, | ||||||
|  | 		Permission:              gitea.AccessMode(d.Get(TeamPermissions).(string)), | ||||||
|  | 		CanCreateOrgRepo:        &canCreateRepo, | ||||||
|  | 		IncludesAllRepositories: &includeAllRepos, | ||||||
|  | 		Units:                   units, | ||||||
|  | 	} | ||||||
|  |  | ||||||
|  | 	resp, err = client.EditTeam(id, opts) | ||||||
|  |  | ||||||
|  | 	if err != nil { | ||||||
|  | 		return err | ||||||
|  | 	} | ||||||
|  |  | ||||||
|  | 	users := d.Get(TeamMembers).([]interface{}) | ||||||
|  |  | ||||||
|  | 	for _, user := range users { | ||||||
|  | 		if user != "" { | ||||||
|  | 			_, err = client.AddTeamMember(team.ID, user.(string)) | ||||||
|  | 			if err != nil { | ||||||
|  | 				return err | ||||||
|  | 			} | ||||||
|  | 		} | ||||||
|  | 	} | ||||||
|  |  | ||||||
|  | 	team, _, _ = client.GetTeam(id) | ||||||
|  |  | ||||||
|  | 	err = setTeamResourceData(team, d) | ||||||
|  |  | ||||||
|  | 	return | ||||||
|  | } | ||||||
|  |  | ||||||
|  | func resourceTeamDelete(d *schema.ResourceData, meta interface{}) (err error) { | ||||||
|  | 	client := meta.(*gitea.Client) | ||||||
|  |  | ||||||
|  | 	id, err := strconv.ParseInt(d.Id(), 10, 64) | ||||||
|  |  | ||||||
|  | 	var resp *gitea.Response | ||||||
|  |  | ||||||
|  | 	resp, err = client.DeleteTeam(id) | ||||||
|  |  | ||||||
|  | 	if err != nil { | ||||||
|  | 		if resp.StatusCode == 404 { | ||||||
|  | 			return | ||||||
|  | 		} else { | ||||||
|  | 			return err | ||||||
|  | 		} | ||||||
|  | 	} | ||||||
|  |  | ||||||
|  | 	return | ||||||
|  | } | ||||||
|  |  | ||||||
|  | func setTeamResourceData(team *gitea.Team, d *schema.ResourceData) (err error) { | ||||||
|  | 	d.SetId(fmt.Sprintf("%d", team.ID)) | ||||||
|  | 	d.Set(TeamCreateRepoFlag, team.CanCreateOrgRepo) | ||||||
|  | 	d.Set(TeamDescription, team.Description) | ||||||
|  | 	d.Set(TeamName, team.Name) | ||||||
|  | 	d.Set(TeamPermissions, string(team.Permission)) | ||||||
|  | 	d.Set(TeamIncludeAllReposFlag, team.IncludesAllRepositories) | ||||||
|  | 	d.Set(TeamUnits, d.Get(TeamUnits).(string)) | ||||||
|  | 	d.Set(TeamOrg, d.Get(TeamOrg).(string)) | ||||||
|  | 	d.Set(TeamMembers, d.Get(TeamMembers)) | ||||||
|  | 	return | ||||||
|  | } | ||||||
|  |  | ||||||
|  | func resourceGiteaTeam() *schema.Resource { | ||||||
|  | 	return &schema.Resource{ | ||||||
|  | 		Read:   resourceTeamRead, | ||||||
|  | 		Create: resourceTeamCreate, | ||||||
|  | 		Update: resourceTeamUpdate, | ||||||
|  | 		Delete: resourceTeamDelete, | ||||||
|  | 		Importer: &schema.ResourceImporter{ | ||||||
|  | 			State: schema.ImportStatePassthrough, | ||||||
|  | 		}, | ||||||
|  | 		Schema: map[string]*schema.Schema{ | ||||||
|  | 			"name": { | ||||||
|  | 				Type:        schema.TypeString, | ||||||
|  | 				Required:    true, | ||||||
|  | 				ForceNew:    true, | ||||||
|  | 				Description: "Name of the Team", | ||||||
|  | 			}, | ||||||
|  | 			"organisation": { | ||||||
|  | 				Type:        schema.TypeString, | ||||||
|  | 				Required:    true, | ||||||
|  | 				ForceNew:    true, | ||||||
|  | 				Description: "The organisation which this Team is part of.", | ||||||
|  | 			}, | ||||||
|  | 			"description": { | ||||||
|  | 				Type:        schema.TypeString, | ||||||
|  | 				Required:    false, | ||||||
|  | 				Optional:    true, | ||||||
|  | 				Default:     "", | ||||||
|  | 				Description: "Description of the Team", | ||||||
|  | 			}, | ||||||
|  | 			"permission": { | ||||||
|  | 				Type:     schema.TypeString, | ||||||
|  | 				Required: false, | ||||||
|  | 				Optional: true, | ||||||
|  | 				Default:  "", | ||||||
|  | 				Description: "Permissions associated with this Team\n" + | ||||||
|  | 					"Can be `none`, `read`, `write`, `admin` or `owner`", | ||||||
|  | 			}, | ||||||
|  | 			"can_create_repos": { | ||||||
|  | 				Type:        schema.TypeBool, | ||||||
|  | 				Required:    false, | ||||||
|  | 				Optional:    true, | ||||||
|  | 				Default:     true, | ||||||
|  | 				Description: "Flag if the Teams members should be able to create Rpositories in the Organisation", | ||||||
|  | 			}, | ||||||
|  | 			"include_all_repositories": { | ||||||
|  | 				Type:        schema.TypeBool, | ||||||
|  | 				Required:    false, | ||||||
|  | 				Optional:    true, | ||||||
|  | 				Default:     true, | ||||||
|  | 				Description: "Flag if the Teams members should have access to all Repositories in the Organisation", | ||||||
|  | 			}, | ||||||
|  | 			"units": { | ||||||
|  | 				Type:     schema.TypeString, | ||||||
|  | 				Required: false, | ||||||
|  | 				Optional: true, | ||||||
|  | 				Default:  "[repo.code, repo.issues, repo.ext_issues, repo.wiki, repo.pulls, repo.releases, repo.projects, repo.ext_wiki]", | ||||||
|  | 				Description: "List of types of Repositories that should be allowed to be created from Team members.\n" + | ||||||
|  | 					"Can be `repo.code`, `repo.issues`, `repo.ext_issues`, `repo.wiki`, `repo.pulls`, `repo.releases`, `repo.projects` and/or `repo.ext_wiki`", | ||||||
|  | 			}, | ||||||
|  | 			"members": { | ||||||
|  | 				Type: schema.TypeList, | ||||||
|  | 				Elem: &schema.Schema{ | ||||||
|  | 					Type: schema.TypeString, | ||||||
|  | 				}, | ||||||
|  | 				Optional:    true, | ||||||
|  | 				Required:    false, | ||||||
|  | 				Computed:    true, | ||||||
|  | 				Description: "List of Users that should be part of this team", | ||||||
|  | 			}, | ||||||
|  | 		}, | ||||||
|  | 		Description: "`gitea_team` manages Team that are part of an organisation.", | ||||||
|  | 	} | ||||||
|  | } | ||||||
| @@ -196,7 +196,6 @@ func resourceUserDelete(d *schema.ResourceData, meta interface{}) (err error) { | |||||||
|  |  | ||||||
| func setUserResourceData(user *gitea.User, d *schema.ResourceData) (err error) { | func setUserResourceData(user *gitea.User, d *schema.ResourceData) (err error) { | ||||||
| 	d.SetId(fmt.Sprintf("%d", user.ID)) | 	d.SetId(fmt.Sprintf("%d", user.ID)) | ||||||
| 	d.Set("id", user.ID) |  | ||||||
| 	d.Set(userName, user.UserName) | 	d.Set(userName, user.UserName) | ||||||
| 	d.Set(userEmail, user.Email) | 	d.Set(userEmail, user.Email) | ||||||
| 	d.Set(userFullName, user.FullName) | 	d.Set(userFullName, user.FullName) | ||||||
|   | |||||||
		Reference in New Issue
	
	Block a user