596 lines
16 KiB
Go
596 lines
16 KiB
Go
package oneandone
|
|
|
|
import "net/http"
|
|
|
|
type Role struct {
|
|
Identity
|
|
descField
|
|
CreationDate string `json:"creation_date,omitempty"`
|
|
State string `json:"state,omitempty"`
|
|
Default *int `json:"default,omitempty"`
|
|
Permissions *Permissions `json:"permissions,omitempty"`
|
|
Users []Identity `json:"users,omitempty"`
|
|
ApiPtr
|
|
}
|
|
|
|
type Permissions struct {
|
|
Backups *BackupPerm `json:"backups,omitempty"`
|
|
Firewalls *FirewallPerm `json:"firewall_policies,omitempty"`
|
|
Images *ImagePerm `json:"images,omitempty"`
|
|
Invoice *InvoicePerm `json:"interactive_invoices,omitempty"`
|
|
IPs *IPPerm `json:"public_ips,omitempty"`
|
|
LoadBalancers *LoadBalancerPerm `json:"load_balancers,omitempty"`
|
|
Logs *LogPerm `json:"logs,omitempty"`
|
|
MonitorCenter *MonitorCenterPerm `json:"monitoring_center,omitempty"`
|
|
MonitorPolicies *MonitorPolicyPerm `json:"monitoring_policies,omitempty"`
|
|
PrivateNetworks *PrivateNetworkPerm `json:"private_networks,omitempty"`
|
|
Roles *RolePerm `json:"roles,omitempty"`
|
|
Servers *ServerPerm `json:"servers,omitempty"`
|
|
SharedStorage *SharedStoragePerm `json:"shared_storages,omitempty"`
|
|
Usages *UsagePerm `json:"usages,omitempty"`
|
|
Users *UserPerm `json:"users,omitempty"`
|
|
VPNs *VPNPerm `json:"vpn,omitempty"`
|
|
}
|
|
|
|
type BackupPerm struct {
|
|
Create bool `json:"create"`
|
|
Delete bool `json:"delete"`
|
|
Show bool `json:"show"`
|
|
}
|
|
|
|
type FirewallPerm struct {
|
|
Clone bool `json:"clone"`
|
|
Create bool `json:"create"`
|
|
Delete bool `json:"delete"`
|
|
ManageAttachedServerIPs bool `json:"manage_attached_server_ips"`
|
|
ManageRules bool `json:"manage_rules"`
|
|
SetDescription bool `json:"set_description"`
|
|
SetName bool `json:"set_name"`
|
|
Show bool `json:"show"`
|
|
}
|
|
|
|
type ImagePerm struct {
|
|
Create bool `json:"create"`
|
|
Delete bool `json:"delete"`
|
|
DisableAutoCreate bool `json:"disable_automatic_creation"`
|
|
SetDescription bool `json:"set_description"`
|
|
SetName bool `json:"set_name"`
|
|
Show bool `json:"show"`
|
|
}
|
|
|
|
type InvoicePerm struct {
|
|
Show bool `json:"show"`
|
|
}
|
|
|
|
type IPPerm struct {
|
|
Create bool `json:"create"`
|
|
Delete bool `json:"delete"`
|
|
Release bool `json:"release"`
|
|
SetReverseDNS bool `json:"set_reverse_dns"`
|
|
Show bool `json:"show"`
|
|
}
|
|
|
|
type LoadBalancerPerm struct {
|
|
Create bool `json:"create"`
|
|
Delete bool `json:"delete"`
|
|
ManageAttachedServerIPs bool `json:"manage_attached_server_ips"`
|
|
ManageRules bool `json:"manage_rules"`
|
|
Modify bool `json:"modify"`
|
|
SetDescription bool `json:"set_description"`
|
|
SetName bool `json:"set_name"`
|
|
Show bool `json:"show"`
|
|
}
|
|
|
|
type LogPerm struct {
|
|
Show bool `json:"show"`
|
|
}
|
|
|
|
type MonitorCenterPerm struct {
|
|
Show bool `json:"show"`
|
|
}
|
|
|
|
type MonitorPolicyPerm struct {
|
|
Clone bool `json:"clone"`
|
|
Create bool `json:"create"`
|
|
Delete bool `json:"delete"`
|
|
ManageAttachedServers bool `json:"manage_attached_servers"`
|
|
ManagePorts bool `json:"manage_ports"`
|
|
ManageProcesses bool `json:"manage_processes"`
|
|
ModifyResources bool `json:"modify_resources"`
|
|
SetDescription bool `json:"set_description"`
|
|
SetEmail bool `json:"set_email"`
|
|
SetName bool `json:"set_name"`
|
|
Show bool `json:"show"`
|
|
}
|
|
|
|
type PrivateNetworkPerm struct {
|
|
Create bool `json:"create"`
|
|
Delete bool `json:"delete"`
|
|
ManageAttachedServers bool `json:"manage_attached_servers"`
|
|
SetDescription bool `json:"set_description"`
|
|
SetName bool `json:"set_name"`
|
|
SetNetworkInfo bool `json:"set_network_info"`
|
|
Show bool `json:"show"`
|
|
}
|
|
|
|
type RolePerm struct {
|
|
Clone bool `json:"clone"`
|
|
Create bool `json:"create"`
|
|
Delete bool `json:"delete"`
|
|
ManageUsers bool `json:"manage_users"`
|
|
Modify bool `json:"modify"`
|
|
SetDescription bool `json:"set_description"`
|
|
SetName bool `json:"set_name"`
|
|
Show bool `json:"show"`
|
|
}
|
|
|
|
type ServerPerm struct {
|
|
AccessKVMConsole bool `json:"access_kvm_console"`
|
|
AssignIP bool `json:"assign_ip"`
|
|
Clone bool `json:"clone"`
|
|
Create bool `json:"create"`
|
|
Delete bool `json:"delete"`
|
|
ManageDVD bool `json:"manage_dvd"`
|
|
ManageSnapshot bool `json:"manage_snapshot"`
|
|
Reinstall bool `json:"reinstall"`
|
|
Resize bool `json:"resize"`
|
|
Restart bool `json:"restart"`
|
|
SetDescription bool `json:"set_description"`
|
|
SetName bool `json:"set_name"`
|
|
Show bool `json:"show"`
|
|
Shutdown bool `json:"shutdown"`
|
|
Start bool `json:"start"`
|
|
}
|
|
|
|
type SharedStoragePerm struct {
|
|
Access bool `json:"access"`
|
|
Create bool `json:"create"`
|
|
Delete bool `json:"delete"`
|
|
ManageAttachedServers bool `json:"manage_attached_servers"`
|
|
Resize bool `json:"resize"`
|
|
SetDescription bool `json:"set_description"`
|
|
SetName bool `json:"set_name"`
|
|
Show bool `json:"show"`
|
|
}
|
|
|
|
type UsagePerm struct {
|
|
Show bool `json:"show"`
|
|
}
|
|
|
|
type UserPerm struct {
|
|
ChangeRole bool `json:"change_role"`
|
|
Create bool `json:"create"`
|
|
Delete bool `json:"delete"`
|
|
Disable bool `json:"disable"`
|
|
Enable bool `json:"enable"`
|
|
ManageAPI bool `json:"manage_api"`
|
|
SetDescription bool `json:"set_description"`
|
|
SetEmail bool `json:"set_email"`
|
|
SetPassword bool `json:"set_password"`
|
|
Show bool `json:"show"`
|
|
}
|
|
|
|
type VPNPerm struct {
|
|
Create bool `json:"create"`
|
|
Delete bool `json:"delete"`
|
|
DownloadFile bool `json:"download_file"`
|
|
SetDescription bool `json:"set_description"`
|
|
SetName bool `json:"set_name"`
|
|
Show bool `json:"show"`
|
|
}
|
|
|
|
// GET /roles
|
|
func (api *API) ListRoles(args ...interface{}) ([]Role, error) {
|
|
url, err := processQueryParams(createUrl(api, rolePathSegment), args...)
|
|
if err != nil {
|
|
return nil, err
|
|
}
|
|
result := []Role{}
|
|
err = api.Client.Get(url, &result, http.StatusOK)
|
|
if err != nil {
|
|
return nil, err
|
|
}
|
|
for _, role := range result {
|
|
role.api = api
|
|
}
|
|
return result, nil
|
|
}
|
|
|
|
// POST /roles
|
|
func (api *API) CreateRole(name string) (string, *Role, error) {
|
|
result := new(Role)
|
|
url := createUrl(api, rolePathSegment)
|
|
req := struct {
|
|
Name string `json:"name"`
|
|
}{name}
|
|
err := api.Client.Post(url, &req, &result, http.StatusCreated)
|
|
if err != nil {
|
|
return "", nil, err
|
|
}
|
|
result.api = api
|
|
return result.Id, result, nil
|
|
}
|
|
|
|
// GET /roles/{role_id}
|
|
func (api *API) GetRole(role_id string) (*Role, error) {
|
|
result := new(Role)
|
|
url := createUrl(api, rolePathSegment, role_id)
|
|
err := api.Client.Get(url, &result, http.StatusOK)
|
|
if err != nil {
|
|
return nil, err
|
|
}
|
|
result.api = api
|
|
return result, nil
|
|
}
|
|
|
|
// PUT /roles/{role_id}
|
|
func (api *API) ModifyRole(role_id string, name string, description string, state string) (*Role, error) {
|
|
result := new(Role)
|
|
url := createUrl(api, rolePathSegment, role_id)
|
|
req := struct {
|
|
Name string `json:"name,omitempty"`
|
|
Description string `json:"description,omitempty"`
|
|
State string `json:"state,omitempty"`
|
|
}{Name: name, Description: description, State: state}
|
|
err := api.Client.Put(url, &req, &result, http.StatusOK)
|
|
if err != nil {
|
|
return nil, err
|
|
}
|
|
result.api = api
|
|
return result, nil
|
|
}
|
|
|
|
// DELETE /roles/{role_id}
|
|
func (api *API) DeleteRole(role_id string) (*Role, error) {
|
|
result := new(Role)
|
|
url := createUrl(api, rolePathSegment, role_id)
|
|
err := api.Client.Delete(url, nil, &result, http.StatusOK)
|
|
if err != nil {
|
|
return nil, err
|
|
}
|
|
result.api = api
|
|
return result, nil
|
|
}
|
|
|
|
// GET /roles/{role_id}/permissions
|
|
func (api *API) GetRolePermissions(role_id string) (*Permissions, error) {
|
|
result := new(Permissions)
|
|
url := createUrl(api, rolePathSegment, role_id, "permissions")
|
|
err := api.Client.Get(url, &result, http.StatusOK)
|
|
if err != nil {
|
|
return nil, err
|
|
}
|
|
return result, nil
|
|
}
|
|
|
|
// PUT /roles/{role_id}/permissions
|
|
func (api *API) ModifyRolePermissions(role_id string, perm *Permissions) (*Role, error) {
|
|
result := new(Role)
|
|
url := createUrl(api, rolePathSegment, role_id, "permissions")
|
|
err := api.Client.Put(url, &perm, &result, http.StatusOK)
|
|
if err != nil {
|
|
return nil, err
|
|
}
|
|
result.api = api
|
|
return result, nil
|
|
}
|
|
|
|
// GET /roles/{role_id}/users
|
|
func (api *API) ListRoleUsers(role_id string) ([]Identity, error) {
|
|
result := []Identity{}
|
|
url := createUrl(api, rolePathSegment, role_id, "users")
|
|
err := api.Client.Get(url, &result, http.StatusOK)
|
|
if err != nil {
|
|
return nil, err
|
|
}
|
|
return result, nil
|
|
}
|
|
|
|
// POST /roles/{role_id}/users
|
|
func (api *API) AssignRoleUsers(role_id string, user_ids []string) (*Role, error) {
|
|
result := new(Role)
|
|
url := createUrl(api, rolePathSegment, role_id, "users")
|
|
req := struct {
|
|
Users []string `json:"users"`
|
|
}{user_ids}
|
|
err := api.Client.Post(url, &req, &result, http.StatusCreated)
|
|
if err != nil {
|
|
return nil, err
|
|
}
|
|
result.api = api
|
|
return result, nil
|
|
}
|
|
|
|
// GET /roles/{role_id}/users/{user_id}
|
|
func (api *API) GetRoleUser(role_id string, user_id string) (*Identity, error) {
|
|
result := new(Identity)
|
|
url := createUrl(api, rolePathSegment, role_id, "users", user_id)
|
|
err := api.Client.Get(url, &result, http.StatusOK)
|
|
if err != nil {
|
|
return nil, err
|
|
}
|
|
return result, nil
|
|
}
|
|
|
|
// DELETE /roles/{role_id}/users/{user_id}
|
|
func (api *API) RemoveRoleUser(role_id string, user_id string) (*Role, error) {
|
|
result := new(Role)
|
|
url := createUrl(api, rolePathSegment, role_id, "users", user_id)
|
|
err := api.Client.Delete(url, nil, &result, http.StatusAccepted)
|
|
if err != nil {
|
|
return nil, err
|
|
}
|
|
result.api = api
|
|
return result, nil
|
|
}
|
|
|
|
// POST /roles/{role_id}/clone
|
|
func (api *API) CloneRole(role_id string, name string) (*Role, error) {
|
|
result := new(Role)
|
|
url := createUrl(api, rolePathSegment, role_id, "clone")
|
|
req := struct {
|
|
Name string `json:"name"`
|
|
}{name}
|
|
err := api.Client.Post(url, &req, &result, http.StatusCreated)
|
|
if err != nil {
|
|
return nil, err
|
|
}
|
|
result.api = api
|
|
return result, nil
|
|
}
|
|
|
|
func (role *Role) GetState() (string, error) {
|
|
in, err := role.api.GetRole(role.Id)
|
|
if in == nil {
|
|
return "", err
|
|
}
|
|
return in.State, err
|
|
}
|
|
|
|
// Sets all backups' permissions
|
|
func (bp *BackupPerm) SetAll(value bool) {
|
|
bp.Create = value
|
|
bp.Delete = value
|
|
bp.Show = value
|
|
}
|
|
|
|
// Sets all firewall policies' permissions
|
|
func (fp *FirewallPerm) SetAll(value bool) {
|
|
fp.Clone = value
|
|
fp.Create = value
|
|
fp.Delete = value
|
|
fp.ManageAttachedServerIPs = value
|
|
fp.ManageRules = value
|
|
fp.SetDescription = value
|
|
fp.SetName = value
|
|
fp.Show = value
|
|
}
|
|
|
|
// Sets all images' permissions
|
|
func (imp *ImagePerm) SetAll(value bool) {
|
|
imp.Create = value
|
|
imp.Delete = value
|
|
imp.DisableAutoCreate = value
|
|
imp.SetDescription = value
|
|
imp.SetName = value
|
|
imp.Show = value
|
|
}
|
|
|
|
// Sets all invoice's permissions
|
|
func (inp *InvoicePerm) SetAll(value bool) {
|
|
inp.Show = value
|
|
}
|
|
|
|
// Sets all IPs' permissions
|
|
func (ipp *IPPerm) SetAll(value bool) {
|
|
ipp.Create = value
|
|
ipp.Delete = value
|
|
ipp.Release = value
|
|
ipp.SetReverseDNS = value
|
|
ipp.Show = value
|
|
}
|
|
|
|
// Sets all load balancers' permissions
|
|
func (lbp *LoadBalancerPerm) SetAll(value bool) {
|
|
lbp.Create = value
|
|
lbp.Delete = value
|
|
lbp.ManageAttachedServerIPs = value
|
|
lbp.ManageRules = value
|
|
lbp.Modify = value
|
|
lbp.SetDescription = value
|
|
lbp.SetName = value
|
|
lbp.Show = value
|
|
}
|
|
|
|
// Sets all logs' permissions
|
|
func (lp *LogPerm) SetAll(value bool) {
|
|
lp.Show = value
|
|
}
|
|
|
|
// Sets all monitoring center's permissions
|
|
func (mcp *MonitorCenterPerm) SetAll(value bool) {
|
|
mcp.Show = value
|
|
}
|
|
|
|
// Sets all monitoring policies' permissions
|
|
func (mpp *MonitorPolicyPerm) SetAll(value bool) {
|
|
mpp.Clone = value
|
|
mpp.Create = value
|
|
mpp.Delete = value
|
|
mpp.ManageAttachedServers = value
|
|
mpp.ManagePorts = value
|
|
mpp.ManageProcesses = value
|
|
mpp.ModifyResources = value
|
|
mpp.SetDescription = value
|
|
mpp.SetEmail = value
|
|
mpp.SetName = value
|
|
mpp.Show = value
|
|
}
|
|
|
|
// Sets all private networks' permissions
|
|
func (pnp *PrivateNetworkPerm) SetAll(value bool) {
|
|
pnp.Create = value
|
|
pnp.Delete = value
|
|
pnp.ManageAttachedServers = value
|
|
pnp.SetDescription = value
|
|
pnp.SetName = value
|
|
pnp.SetNetworkInfo = value
|
|
pnp.Show = value
|
|
}
|
|
|
|
// Sets all roles' permissions
|
|
func (rp *RolePerm) SetAll(value bool) {
|
|
rp.Clone = value
|
|
rp.Create = value
|
|
rp.Delete = value
|
|
rp.ManageUsers = value
|
|
rp.Modify = value
|
|
rp.SetDescription = value
|
|
rp.SetName = value
|
|
rp.Show = value
|
|
}
|
|
|
|
// Sets all servers' permissions
|
|
func (sp *ServerPerm) SetAll(value bool) {
|
|
sp.AccessKVMConsole = value
|
|
sp.AssignIP = value
|
|
sp.Clone = value
|
|
sp.Create = value
|
|
sp.Delete = value
|
|
sp.ManageDVD = value
|
|
sp.ManageSnapshot = value
|
|
sp.Reinstall = value
|
|
sp.Resize = value
|
|
sp.Restart = value
|
|
sp.SetDescription = value
|
|
sp.SetName = value
|
|
sp.Show = value
|
|
sp.Shutdown = value
|
|
sp.Start = value
|
|
}
|
|
|
|
// Sets all shared storages' permissions
|
|
func (ssp *SharedStoragePerm) SetAll(value bool) {
|
|
ssp.Access = value
|
|
ssp.Create = value
|
|
ssp.Delete = value
|
|
ssp.ManageAttachedServers = value
|
|
ssp.Resize = value
|
|
ssp.SetDescription = value
|
|
ssp.SetName = value
|
|
ssp.Show = value
|
|
}
|
|
|
|
// Sets all usages' permissions
|
|
func (up *UsagePerm) SetAll(value bool) {
|
|
up.Show = value
|
|
}
|
|
|
|
// Sets all users' permissions
|
|
func (up *UserPerm) SetAll(value bool) {
|
|
up.ChangeRole = value
|
|
up.Create = value
|
|
up.Delete = value
|
|
up.Disable = value
|
|
up.Enable = value
|
|
up.ManageAPI = value
|
|
up.SetDescription = value
|
|
up.SetEmail = value
|
|
up.SetPassword = value
|
|
up.Show = value
|
|
}
|
|
|
|
// Sets all VPNs' permissions
|
|
func (vpnp *VPNPerm) SetAll(value bool) {
|
|
vpnp.Create = value
|
|
vpnp.Delete = value
|
|
vpnp.DownloadFile = value
|
|
vpnp.SetDescription = value
|
|
vpnp.SetName = value
|
|
vpnp.Show = value
|
|
}
|
|
|
|
// Sets all available permissions
|
|
func (p *Permissions) SetAll(v bool) {
|
|
if p.Backups == nil {
|
|
p.Backups = &BackupPerm{v, v, v}
|
|
} else {
|
|
p.Backups.SetAll(v)
|
|
}
|
|
if p.Firewalls == nil {
|
|
p.Firewalls = &FirewallPerm{v, v, v, v, v, v, v, v}
|
|
} else {
|
|
p.Firewalls.SetAll(v)
|
|
}
|
|
if p.Images == nil {
|
|
p.Images = &ImagePerm{v, v, v, v, v, v}
|
|
} else {
|
|
p.Images.SetAll(v)
|
|
}
|
|
if p.Invoice == nil {
|
|
p.Invoice = &InvoicePerm{v}
|
|
} else {
|
|
p.Invoice.SetAll(v)
|
|
}
|
|
if p.IPs == nil {
|
|
p.IPs = &IPPerm{v, v, v, v, v}
|
|
} else {
|
|
p.IPs.SetAll(v)
|
|
}
|
|
if p.LoadBalancers == nil {
|
|
p.LoadBalancers = &LoadBalancerPerm{v, v, v, v, v, v, v, v}
|
|
} else {
|
|
p.LoadBalancers.SetAll(v)
|
|
}
|
|
if p.Logs == nil {
|
|
p.Logs = &LogPerm{v}
|
|
} else {
|
|
p.Logs.SetAll(v)
|
|
}
|
|
if p.MonitorCenter == nil {
|
|
p.MonitorCenter = &MonitorCenterPerm{v}
|
|
} else {
|
|
p.MonitorCenter.SetAll(v)
|
|
}
|
|
if p.MonitorPolicies == nil {
|
|
p.MonitorPolicies = &MonitorPolicyPerm{v, v, v, v, v, v, v, v, v, v, v}
|
|
} else {
|
|
p.MonitorPolicies.SetAll(v)
|
|
}
|
|
if p.PrivateNetworks == nil {
|
|
p.PrivateNetworks = &PrivateNetworkPerm{v, v, v, v, v, v, v}
|
|
} else {
|
|
p.PrivateNetworks.SetAll(v)
|
|
}
|
|
if p.Roles == nil {
|
|
p.Roles = &RolePerm{v, v, v, v, v, v, v, v}
|
|
} else {
|
|
p.Roles.SetAll(v)
|
|
}
|
|
if p.Servers == nil {
|
|
p.Servers = &ServerPerm{v, v, v, v, v, v, v, v, v, v, v, v, v, v, v}
|
|
} else {
|
|
p.Servers.SetAll(v)
|
|
}
|
|
if p.SharedStorage == nil {
|
|
p.SharedStorage = &SharedStoragePerm{v, v, v, v, v, v, v, v}
|
|
} else {
|
|
p.SharedStorage.SetAll(v)
|
|
}
|
|
if p.Usages == nil {
|
|
p.Usages = &UsagePerm{v}
|
|
} else {
|
|
p.Usages.SetAll(v)
|
|
}
|
|
if p.Users == nil {
|
|
p.Users = &UserPerm{v, v, v, v, v, v, v, v, v, v}
|
|
} else {
|
|
p.Users.SetAll(v)
|
|
}
|
|
if p.VPNs == nil {
|
|
p.VPNs = &VPNPerm{v, v, v, v, v, v}
|
|
} else {
|
|
p.VPNs.SetAll(v)
|
|
}
|
|
}
|