UserService.go 31 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495969798991001011021031041051061071081091101111121131141151161171181191201211221231241251261271281291301311321331341351361371381391401411421431441451461471481491501511521531541551561571581591601611621631641651661671681691701711721731741751761771781791801811821831841851861871881891901911921931941951961971981992002012022032042052062072082092102112122132142152162172182192202212222232242252262272282292302312322332342352362372382392402412422432442452462472482492502512522532542552562572582592602612622632642652662672682692702712722732742752762772782792802812822832842852862872882892902912922932942952962972982993003013023033043053063073083093103113123133143153163173183193203213223233243253263273283293303313323333343353363373383393403413423433443453463473483493503513523533543553563573583593603613623633643653663673683693703713723733743753763773783793803813823833843853863873883893903913923933943953963973983994004014024034044054064074084094104114124134144154164174184194204214224234244254264274284294304314324334344354364374384394404414424434444454464474484494504514524534544554564574584594604614624634644654664674684694704714724734744754764774784794804814824834844854864874884894904914924934944954964974984995005015025035045055065075085095105115125135145155165175185195205215225235245255265275285295305315325335345355365375385395405415425435445455465475485495505515525535545555565575585595605615625635645655665675685695705715725735745755765775785795805815825835845855865875885895905915925935945955965975985996006016026036046056066076086096106116126136146156166176186196206216226236246256266276286296306316326336346356366376386396406416426436446456466476486496506516526536546556566576586596606616626636646656666676686696706716726736746756766776786796806816826836846856866876886896906916926936946956966976986997007017027037047057067077087097107117127137147157167177187197207217227237247257267277287297307317327337347357367377387397407417427437447457467477487497507517527537547557567577587597607617627637647657667677687697707717727737747757767777787797807817827837847857867877887897907917927937947957967977987998008018028038048058068078088098108118128138148158168178188198208218228238248258268278288298308318328338348358368378388398408418428438448458468478488498508518528538548558568578588598608618628638648658668678688698708718728738748758768778788798808818828838848858868878888898908918928938948958968978988999009019029039049059069079089099109119129139149159169179189199209219229239249259269279289299309319329339349359369379389399409419429439449459469479489499509519529539549559569579589599609619629639649659669679689699709719729739749759769779789799809819829839849859869879889899909919929939949959969979989991000100110021003100410051006100710081009101010111012101310141015101610171018101910201021102210231024102510261027102810291030103110321033103410351036103710381039104010411042104310441045104610471048104910501051105210531054105510561057105810591060106110621063106410651066106710681069107010711072107310741075107610771078107910801081108210831084108510861087108810891090109110921093109410951096109710981099110011011102110311041105110611071108110911101111111211131114111511161117111811191120112111221123112411251126112711281129113011311132113311341135113611371138113911401141114211431144114511461147114811491150115111521153115411551156115711581159116011611162116311641165116611671168116911701171117211731174117511761177117811791180118111821183118411851186118711881189119011911192119311941195119611971198119912001201120212031204120512061207120812091210121112121213121412151216121712181219122012211222122312241225122612271228122912301231123212331234123512361237123812391240
  1. //
  2. // Copyright 2016, Sander van Harmelen
  3. //
  4. // Licensed under the Apache License, Version 2.0 (the "License");
  5. // you may not use this file except in compliance with the License.
  6. // You may obtain a copy of the License at
  7. //
  8. // http://www.apache.org/licenses/LICENSE-2.0
  9. //
  10. // Unless required by applicable law or agreed to in writing, software
  11. // distributed under the License is distributed on an "AS IS" BASIS,
  12. // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
  13. // See the License for the specific language governing permissions and
  14. // limitations under the License.
  15. //
  16. package cloudstack
  17. import (
  18. "encoding/json"
  19. "fmt"
  20. "net/url"
  21. "strconv"
  22. "strings"
  23. )
  24. type CreateUserParams struct {
  25. p map[string]interface{}
  26. }
  27. func (p *CreateUserParams) toURLValues() url.Values {
  28. u := url.Values{}
  29. if p.p == nil {
  30. return u
  31. }
  32. if v, found := p.p["account"]; found {
  33. u.Set("account", v.(string))
  34. }
  35. if v, found := p.p["domainid"]; found {
  36. u.Set("domainid", v.(string))
  37. }
  38. if v, found := p.p["email"]; found {
  39. u.Set("email", v.(string))
  40. }
  41. if v, found := p.p["firstname"]; found {
  42. u.Set("firstname", v.(string))
  43. }
  44. if v, found := p.p["lastname"]; found {
  45. u.Set("lastname", v.(string))
  46. }
  47. if v, found := p.p["password"]; found {
  48. u.Set("password", v.(string))
  49. }
  50. if v, found := p.p["timezone"]; found {
  51. u.Set("timezone", v.(string))
  52. }
  53. if v, found := p.p["userid"]; found {
  54. u.Set("userid", v.(string))
  55. }
  56. if v, found := p.p["username"]; found {
  57. u.Set("username", v.(string))
  58. }
  59. return u
  60. }
  61. func (p *CreateUserParams) SetAccount(v string) {
  62. if p.p == nil {
  63. p.p = make(map[string]interface{})
  64. }
  65. p.p["account"] = v
  66. return
  67. }
  68. func (p *CreateUserParams) SetDomainid(v string) {
  69. if p.p == nil {
  70. p.p = make(map[string]interface{})
  71. }
  72. p.p["domainid"] = v
  73. return
  74. }
  75. func (p *CreateUserParams) SetEmail(v string) {
  76. if p.p == nil {
  77. p.p = make(map[string]interface{})
  78. }
  79. p.p["email"] = v
  80. return
  81. }
  82. func (p *CreateUserParams) SetFirstname(v string) {
  83. if p.p == nil {
  84. p.p = make(map[string]interface{})
  85. }
  86. p.p["firstname"] = v
  87. return
  88. }
  89. func (p *CreateUserParams) SetLastname(v string) {
  90. if p.p == nil {
  91. p.p = make(map[string]interface{})
  92. }
  93. p.p["lastname"] = v
  94. return
  95. }
  96. func (p *CreateUserParams) SetPassword(v string) {
  97. if p.p == nil {
  98. p.p = make(map[string]interface{})
  99. }
  100. p.p["password"] = v
  101. return
  102. }
  103. func (p *CreateUserParams) SetTimezone(v string) {
  104. if p.p == nil {
  105. p.p = make(map[string]interface{})
  106. }
  107. p.p["timezone"] = v
  108. return
  109. }
  110. func (p *CreateUserParams) SetUserid(v string) {
  111. if p.p == nil {
  112. p.p = make(map[string]interface{})
  113. }
  114. p.p["userid"] = v
  115. return
  116. }
  117. func (p *CreateUserParams) SetUsername(v string) {
  118. if p.p == nil {
  119. p.p = make(map[string]interface{})
  120. }
  121. p.p["username"] = v
  122. return
  123. }
  124. // You should always use this function to get a new CreateUserParams instance,
  125. // as then you are sure you have configured all required params
  126. func (s *UserService) NewCreateUserParams(account string, email string, firstname string, lastname string, password string, username string) *CreateUserParams {
  127. p := &CreateUserParams{}
  128. p.p = make(map[string]interface{})
  129. p.p["account"] = account
  130. p.p["email"] = email
  131. p.p["firstname"] = firstname
  132. p.p["lastname"] = lastname
  133. p.p["password"] = password
  134. p.p["username"] = username
  135. return p
  136. }
  137. // Creates a user for an account that already exists
  138. func (s *UserService) CreateUser(p *CreateUserParams) (*CreateUserResponse, error) {
  139. resp, err := s.cs.newRequest("createUser", p.toURLValues())
  140. if err != nil {
  141. return nil, err
  142. }
  143. var r CreateUserResponse
  144. if err := json.Unmarshal(resp, &r); err != nil {
  145. return nil, err
  146. }
  147. return &r, nil
  148. }
  149. type CreateUserResponse struct {
  150. Account string `json:"account,omitempty"`
  151. Accountid string `json:"accountid,omitempty"`
  152. Accounttype int `json:"accounttype,omitempty"`
  153. Apikey string `json:"apikey,omitempty"`
  154. Created string `json:"created,omitempty"`
  155. Domain string `json:"domain,omitempty"`
  156. Domainid string `json:"domainid,omitempty"`
  157. Email string `json:"email,omitempty"`
  158. Firstname string `json:"firstname,omitempty"`
  159. Id string `json:"id,omitempty"`
  160. Iscallerchilddomain bool `json:"iscallerchilddomain,omitempty"`
  161. Isdefault bool `json:"isdefault,omitempty"`
  162. Lastname string `json:"lastname,omitempty"`
  163. Secretkey string `json:"secretkey,omitempty"`
  164. State string `json:"state,omitempty"`
  165. Timezone string `json:"timezone,omitempty"`
  166. Username string `json:"username,omitempty"`
  167. }
  168. type DeleteUserParams struct {
  169. p map[string]interface{}
  170. }
  171. func (p *DeleteUserParams) toURLValues() url.Values {
  172. u := url.Values{}
  173. if p.p == nil {
  174. return u
  175. }
  176. if v, found := p.p["id"]; found {
  177. u.Set("id", v.(string))
  178. }
  179. return u
  180. }
  181. func (p *DeleteUserParams) SetId(v string) {
  182. if p.p == nil {
  183. p.p = make(map[string]interface{})
  184. }
  185. p.p["id"] = v
  186. return
  187. }
  188. // You should always use this function to get a new DeleteUserParams instance,
  189. // as then you are sure you have configured all required params
  190. func (s *UserService) NewDeleteUserParams(id string) *DeleteUserParams {
  191. p := &DeleteUserParams{}
  192. p.p = make(map[string]interface{})
  193. p.p["id"] = id
  194. return p
  195. }
  196. // Deletes a user for an account
  197. func (s *UserService) DeleteUser(p *DeleteUserParams) (*DeleteUserResponse, error) {
  198. resp, err := s.cs.newRequest("deleteUser", p.toURLValues())
  199. if err != nil {
  200. return nil, err
  201. }
  202. var r DeleteUserResponse
  203. if err := json.Unmarshal(resp, &r); err != nil {
  204. return nil, err
  205. }
  206. return &r, nil
  207. }
  208. type DeleteUserResponse struct {
  209. Displaytext string `json:"displaytext,omitempty"`
  210. Success string `json:"success,omitempty"`
  211. }
  212. type UpdateUserParams struct {
  213. p map[string]interface{}
  214. }
  215. func (p *UpdateUserParams) toURLValues() url.Values {
  216. u := url.Values{}
  217. if p.p == nil {
  218. return u
  219. }
  220. if v, found := p.p["email"]; found {
  221. u.Set("email", v.(string))
  222. }
  223. if v, found := p.p["firstname"]; found {
  224. u.Set("firstname", v.(string))
  225. }
  226. if v, found := p.p["id"]; found {
  227. u.Set("id", v.(string))
  228. }
  229. if v, found := p.p["lastname"]; found {
  230. u.Set("lastname", v.(string))
  231. }
  232. if v, found := p.p["password"]; found {
  233. u.Set("password", v.(string))
  234. }
  235. if v, found := p.p["timezone"]; found {
  236. u.Set("timezone", v.(string))
  237. }
  238. if v, found := p.p["userapikey"]; found {
  239. u.Set("userapikey", v.(string))
  240. }
  241. if v, found := p.p["username"]; found {
  242. u.Set("username", v.(string))
  243. }
  244. if v, found := p.p["usersecretkey"]; found {
  245. u.Set("usersecretkey", v.(string))
  246. }
  247. return u
  248. }
  249. func (p *UpdateUserParams) SetEmail(v string) {
  250. if p.p == nil {
  251. p.p = make(map[string]interface{})
  252. }
  253. p.p["email"] = v
  254. return
  255. }
  256. func (p *UpdateUserParams) SetFirstname(v string) {
  257. if p.p == nil {
  258. p.p = make(map[string]interface{})
  259. }
  260. p.p["firstname"] = v
  261. return
  262. }
  263. func (p *UpdateUserParams) SetId(v string) {
  264. if p.p == nil {
  265. p.p = make(map[string]interface{})
  266. }
  267. p.p["id"] = v
  268. return
  269. }
  270. func (p *UpdateUserParams) SetLastname(v string) {
  271. if p.p == nil {
  272. p.p = make(map[string]interface{})
  273. }
  274. p.p["lastname"] = v
  275. return
  276. }
  277. func (p *UpdateUserParams) SetPassword(v string) {
  278. if p.p == nil {
  279. p.p = make(map[string]interface{})
  280. }
  281. p.p["password"] = v
  282. return
  283. }
  284. func (p *UpdateUserParams) SetTimezone(v string) {
  285. if p.p == nil {
  286. p.p = make(map[string]interface{})
  287. }
  288. p.p["timezone"] = v
  289. return
  290. }
  291. func (p *UpdateUserParams) SetUserapikey(v string) {
  292. if p.p == nil {
  293. p.p = make(map[string]interface{})
  294. }
  295. p.p["userapikey"] = v
  296. return
  297. }
  298. func (p *UpdateUserParams) SetUsername(v string) {
  299. if p.p == nil {
  300. p.p = make(map[string]interface{})
  301. }
  302. p.p["username"] = v
  303. return
  304. }
  305. func (p *UpdateUserParams) SetUsersecretkey(v string) {
  306. if p.p == nil {
  307. p.p = make(map[string]interface{})
  308. }
  309. p.p["usersecretkey"] = v
  310. return
  311. }
  312. // You should always use this function to get a new UpdateUserParams instance,
  313. // as then you are sure you have configured all required params
  314. func (s *UserService) NewUpdateUserParams(id string) *UpdateUserParams {
  315. p := &UpdateUserParams{}
  316. p.p = make(map[string]interface{})
  317. p.p["id"] = id
  318. return p
  319. }
  320. // Updates a user account
  321. func (s *UserService) UpdateUser(p *UpdateUserParams) (*UpdateUserResponse, error) {
  322. resp, err := s.cs.newRequest("updateUser", p.toURLValues())
  323. if err != nil {
  324. return nil, err
  325. }
  326. var r UpdateUserResponse
  327. if err := json.Unmarshal(resp, &r); err != nil {
  328. return nil, err
  329. }
  330. return &r, nil
  331. }
  332. type UpdateUserResponse struct {
  333. Account string `json:"account,omitempty"`
  334. Accountid string `json:"accountid,omitempty"`
  335. Accounttype int `json:"accounttype,omitempty"`
  336. Apikey string `json:"apikey,omitempty"`
  337. Created string `json:"created,omitempty"`
  338. Domain string `json:"domain,omitempty"`
  339. Domainid string `json:"domainid,omitempty"`
  340. Email string `json:"email,omitempty"`
  341. Firstname string `json:"firstname,omitempty"`
  342. Id string `json:"id,omitempty"`
  343. Iscallerchilddomain bool `json:"iscallerchilddomain,omitempty"`
  344. Isdefault bool `json:"isdefault,omitempty"`
  345. Lastname string `json:"lastname,omitempty"`
  346. Secretkey string `json:"secretkey,omitempty"`
  347. State string `json:"state,omitempty"`
  348. Timezone string `json:"timezone,omitempty"`
  349. Username string `json:"username,omitempty"`
  350. }
  351. type ListUsersParams struct {
  352. p map[string]interface{}
  353. }
  354. func (p *ListUsersParams) toURLValues() url.Values {
  355. u := url.Values{}
  356. if p.p == nil {
  357. return u
  358. }
  359. if v, found := p.p["account"]; found {
  360. u.Set("account", v.(string))
  361. }
  362. if v, found := p.p["accounttype"]; found {
  363. vv := strconv.FormatInt(v.(int64), 10)
  364. u.Set("accounttype", vv)
  365. }
  366. if v, found := p.p["domainid"]; found {
  367. u.Set("domainid", v.(string))
  368. }
  369. if v, found := p.p["id"]; found {
  370. u.Set("id", v.(string))
  371. }
  372. if v, found := p.p["isrecursive"]; found {
  373. vv := strconv.FormatBool(v.(bool))
  374. u.Set("isrecursive", vv)
  375. }
  376. if v, found := p.p["keyword"]; found {
  377. u.Set("keyword", v.(string))
  378. }
  379. if v, found := p.p["listall"]; found {
  380. vv := strconv.FormatBool(v.(bool))
  381. u.Set("listall", vv)
  382. }
  383. if v, found := p.p["page"]; found {
  384. vv := strconv.Itoa(v.(int))
  385. u.Set("page", vv)
  386. }
  387. if v, found := p.p["pagesize"]; found {
  388. vv := strconv.Itoa(v.(int))
  389. u.Set("pagesize", vv)
  390. }
  391. if v, found := p.p["state"]; found {
  392. u.Set("state", v.(string))
  393. }
  394. if v, found := p.p["username"]; found {
  395. u.Set("username", v.(string))
  396. }
  397. return u
  398. }
  399. func (p *ListUsersParams) SetAccount(v string) {
  400. if p.p == nil {
  401. p.p = make(map[string]interface{})
  402. }
  403. p.p["account"] = v
  404. return
  405. }
  406. func (p *ListUsersParams) SetAccounttype(v int64) {
  407. if p.p == nil {
  408. p.p = make(map[string]interface{})
  409. }
  410. p.p["accounttype"] = v
  411. return
  412. }
  413. func (p *ListUsersParams) SetDomainid(v string) {
  414. if p.p == nil {
  415. p.p = make(map[string]interface{})
  416. }
  417. p.p["domainid"] = v
  418. return
  419. }
  420. func (p *ListUsersParams) SetId(v string) {
  421. if p.p == nil {
  422. p.p = make(map[string]interface{})
  423. }
  424. p.p["id"] = v
  425. return
  426. }
  427. func (p *ListUsersParams) SetIsrecursive(v bool) {
  428. if p.p == nil {
  429. p.p = make(map[string]interface{})
  430. }
  431. p.p["isrecursive"] = v
  432. return
  433. }
  434. func (p *ListUsersParams) SetKeyword(v string) {
  435. if p.p == nil {
  436. p.p = make(map[string]interface{})
  437. }
  438. p.p["keyword"] = v
  439. return
  440. }
  441. func (p *ListUsersParams) SetListall(v bool) {
  442. if p.p == nil {
  443. p.p = make(map[string]interface{})
  444. }
  445. p.p["listall"] = v
  446. return
  447. }
  448. func (p *ListUsersParams) SetPage(v int) {
  449. if p.p == nil {
  450. p.p = make(map[string]interface{})
  451. }
  452. p.p["page"] = v
  453. return
  454. }
  455. func (p *ListUsersParams) SetPagesize(v int) {
  456. if p.p == nil {
  457. p.p = make(map[string]interface{})
  458. }
  459. p.p["pagesize"] = v
  460. return
  461. }
  462. func (p *ListUsersParams) SetState(v string) {
  463. if p.p == nil {
  464. p.p = make(map[string]interface{})
  465. }
  466. p.p["state"] = v
  467. return
  468. }
  469. func (p *ListUsersParams) SetUsername(v string) {
  470. if p.p == nil {
  471. p.p = make(map[string]interface{})
  472. }
  473. p.p["username"] = v
  474. return
  475. }
  476. // You should always use this function to get a new ListUsersParams instance,
  477. // as then you are sure you have configured all required params
  478. func (s *UserService) NewListUsersParams() *ListUsersParams {
  479. p := &ListUsersParams{}
  480. p.p = make(map[string]interface{})
  481. return p
  482. }
  483. // This is a courtesy helper function, which in some cases may not work as expected!
  484. func (s *UserService) GetUserByID(id string, opts ...OptionFunc) (*User, int, error) {
  485. p := &ListUsersParams{}
  486. p.p = make(map[string]interface{})
  487. p.p["id"] = id
  488. for _, fn := range opts {
  489. if err := fn(s.cs, p); err != nil {
  490. return nil, -1, err
  491. }
  492. }
  493. l, err := s.ListUsers(p)
  494. if err != nil {
  495. if strings.Contains(err.Error(), fmt.Sprintf(
  496. "Invalid parameter id value=%s due to incorrect long value format, "+
  497. "or entity does not exist", id)) {
  498. return nil, 0, fmt.Errorf("No match found for %s: %+v", id, l)
  499. }
  500. return nil, -1, err
  501. }
  502. if l.Count == 0 {
  503. return nil, l.Count, fmt.Errorf("No match found for %s: %+v", id, l)
  504. }
  505. if l.Count == 1 {
  506. return l.Users[0], l.Count, nil
  507. }
  508. return nil, l.Count, fmt.Errorf("There is more then one result for User UUID: %s!", id)
  509. }
  510. // Lists user accounts
  511. func (s *UserService) ListUsers(p *ListUsersParams) (*ListUsersResponse, error) {
  512. resp, err := s.cs.newRequest("listUsers", p.toURLValues())
  513. if err != nil {
  514. return nil, err
  515. }
  516. var r ListUsersResponse
  517. if err := json.Unmarshal(resp, &r); err != nil {
  518. return nil, err
  519. }
  520. return &r, nil
  521. }
  522. type ListUsersResponse struct {
  523. Count int `json:"count"`
  524. Users []*User `json:"user"`
  525. }
  526. type User struct {
  527. Account string `json:"account,omitempty"`
  528. Accountid string `json:"accountid,omitempty"`
  529. Accounttype int `json:"accounttype,omitempty"`
  530. Apikey string `json:"apikey,omitempty"`
  531. Created string `json:"created,omitempty"`
  532. Domain string `json:"domain,omitempty"`
  533. Domainid string `json:"domainid,omitempty"`
  534. Email string `json:"email,omitempty"`
  535. Firstname string `json:"firstname,omitempty"`
  536. Id string `json:"id,omitempty"`
  537. Iscallerchilddomain bool `json:"iscallerchilddomain,omitempty"`
  538. Isdefault bool `json:"isdefault,omitempty"`
  539. Lastname string `json:"lastname,omitempty"`
  540. Secretkey string `json:"secretkey,omitempty"`
  541. State string `json:"state,omitempty"`
  542. Timezone string `json:"timezone,omitempty"`
  543. Username string `json:"username,omitempty"`
  544. }
  545. type LockUserParams struct {
  546. p map[string]interface{}
  547. }
  548. func (p *LockUserParams) toURLValues() url.Values {
  549. u := url.Values{}
  550. if p.p == nil {
  551. return u
  552. }
  553. if v, found := p.p["id"]; found {
  554. u.Set("id", v.(string))
  555. }
  556. return u
  557. }
  558. func (p *LockUserParams) SetId(v string) {
  559. if p.p == nil {
  560. p.p = make(map[string]interface{})
  561. }
  562. p.p["id"] = v
  563. return
  564. }
  565. // You should always use this function to get a new LockUserParams instance,
  566. // as then you are sure you have configured all required params
  567. func (s *UserService) NewLockUserParams(id string) *LockUserParams {
  568. p := &LockUserParams{}
  569. p.p = make(map[string]interface{})
  570. p.p["id"] = id
  571. return p
  572. }
  573. // Locks a user account
  574. func (s *UserService) LockUser(p *LockUserParams) (*LockUserResponse, error) {
  575. resp, err := s.cs.newRequest("lockUser", p.toURLValues())
  576. if err != nil {
  577. return nil, err
  578. }
  579. var r LockUserResponse
  580. if err := json.Unmarshal(resp, &r); err != nil {
  581. return nil, err
  582. }
  583. return &r, nil
  584. }
  585. type LockUserResponse struct {
  586. Account string `json:"account,omitempty"`
  587. Accountid string `json:"accountid,omitempty"`
  588. Accounttype int `json:"accounttype,omitempty"`
  589. Apikey string `json:"apikey,omitempty"`
  590. Created string `json:"created,omitempty"`
  591. Domain string `json:"domain,omitempty"`
  592. Domainid string `json:"domainid,omitempty"`
  593. Email string `json:"email,omitempty"`
  594. Firstname string `json:"firstname,omitempty"`
  595. Id string `json:"id,omitempty"`
  596. Iscallerchilddomain bool `json:"iscallerchilddomain,omitempty"`
  597. Isdefault bool `json:"isdefault,omitempty"`
  598. Lastname string `json:"lastname,omitempty"`
  599. Secretkey string `json:"secretkey,omitempty"`
  600. State string `json:"state,omitempty"`
  601. Timezone string `json:"timezone,omitempty"`
  602. Username string `json:"username,omitempty"`
  603. }
  604. type DisableUserParams struct {
  605. p map[string]interface{}
  606. }
  607. func (p *DisableUserParams) toURLValues() url.Values {
  608. u := url.Values{}
  609. if p.p == nil {
  610. return u
  611. }
  612. if v, found := p.p["id"]; found {
  613. u.Set("id", v.(string))
  614. }
  615. return u
  616. }
  617. func (p *DisableUserParams) SetId(v string) {
  618. if p.p == nil {
  619. p.p = make(map[string]interface{})
  620. }
  621. p.p["id"] = v
  622. return
  623. }
  624. // You should always use this function to get a new DisableUserParams instance,
  625. // as then you are sure you have configured all required params
  626. func (s *UserService) NewDisableUserParams(id string) *DisableUserParams {
  627. p := &DisableUserParams{}
  628. p.p = make(map[string]interface{})
  629. p.p["id"] = id
  630. return p
  631. }
  632. // Disables a user account
  633. func (s *UserService) DisableUser(p *DisableUserParams) (*DisableUserResponse, error) {
  634. resp, err := s.cs.newRequest("disableUser", p.toURLValues())
  635. if err != nil {
  636. return nil, err
  637. }
  638. var r DisableUserResponse
  639. if err := json.Unmarshal(resp, &r); err != nil {
  640. return nil, err
  641. }
  642. // If we have a async client, we need to wait for the async result
  643. if s.cs.async {
  644. b, err := s.cs.GetAsyncJobResult(r.JobID, s.cs.timeout)
  645. if err != nil {
  646. if err == AsyncTimeoutErr {
  647. return &r, err
  648. }
  649. return nil, err
  650. }
  651. b, err = getRawValue(b)
  652. if err != nil {
  653. return nil, err
  654. }
  655. if err := json.Unmarshal(b, &r); err != nil {
  656. return nil, err
  657. }
  658. }
  659. return &r, nil
  660. }
  661. type DisableUserResponse struct {
  662. JobID string `json:"jobid,omitempty"`
  663. Account string `json:"account,omitempty"`
  664. Accountid string `json:"accountid,omitempty"`
  665. Accounttype int `json:"accounttype,omitempty"`
  666. Apikey string `json:"apikey,omitempty"`
  667. Created string `json:"created,omitempty"`
  668. Domain string `json:"domain,omitempty"`
  669. Domainid string `json:"domainid,omitempty"`
  670. Email string `json:"email,omitempty"`
  671. Firstname string `json:"firstname,omitempty"`
  672. Id string `json:"id,omitempty"`
  673. Iscallerchilddomain bool `json:"iscallerchilddomain,omitempty"`
  674. Isdefault bool `json:"isdefault,omitempty"`
  675. Lastname string `json:"lastname,omitempty"`
  676. Secretkey string `json:"secretkey,omitempty"`
  677. State string `json:"state,omitempty"`
  678. Timezone string `json:"timezone,omitempty"`
  679. Username string `json:"username,omitempty"`
  680. }
  681. type EnableUserParams struct {
  682. p map[string]interface{}
  683. }
  684. func (p *EnableUserParams) toURLValues() url.Values {
  685. u := url.Values{}
  686. if p.p == nil {
  687. return u
  688. }
  689. if v, found := p.p["id"]; found {
  690. u.Set("id", v.(string))
  691. }
  692. return u
  693. }
  694. func (p *EnableUserParams) SetId(v string) {
  695. if p.p == nil {
  696. p.p = make(map[string]interface{})
  697. }
  698. p.p["id"] = v
  699. return
  700. }
  701. // You should always use this function to get a new EnableUserParams instance,
  702. // as then you are sure you have configured all required params
  703. func (s *UserService) NewEnableUserParams(id string) *EnableUserParams {
  704. p := &EnableUserParams{}
  705. p.p = make(map[string]interface{})
  706. p.p["id"] = id
  707. return p
  708. }
  709. // Enables a user account
  710. func (s *UserService) EnableUser(p *EnableUserParams) (*EnableUserResponse, error) {
  711. resp, err := s.cs.newRequest("enableUser", p.toURLValues())
  712. if err != nil {
  713. return nil, err
  714. }
  715. var r EnableUserResponse
  716. if err := json.Unmarshal(resp, &r); err != nil {
  717. return nil, err
  718. }
  719. return &r, nil
  720. }
  721. type EnableUserResponse struct {
  722. Account string `json:"account,omitempty"`
  723. Accountid string `json:"accountid,omitempty"`
  724. Accounttype int `json:"accounttype,omitempty"`
  725. Apikey string `json:"apikey,omitempty"`
  726. Created string `json:"created,omitempty"`
  727. Domain string `json:"domain,omitempty"`
  728. Domainid string `json:"domainid,omitempty"`
  729. Email string `json:"email,omitempty"`
  730. Firstname string `json:"firstname,omitempty"`
  731. Id string `json:"id,omitempty"`
  732. Iscallerchilddomain bool `json:"iscallerchilddomain,omitempty"`
  733. Isdefault bool `json:"isdefault,omitempty"`
  734. Lastname string `json:"lastname,omitempty"`
  735. Secretkey string `json:"secretkey,omitempty"`
  736. State string `json:"state,omitempty"`
  737. Timezone string `json:"timezone,omitempty"`
  738. Username string `json:"username,omitempty"`
  739. }
  740. type GetUserParams struct {
  741. p map[string]interface{}
  742. }
  743. func (p *GetUserParams) toURLValues() url.Values {
  744. u := url.Values{}
  745. if p.p == nil {
  746. return u
  747. }
  748. if v, found := p.p["userapikey"]; found {
  749. u.Set("userapikey", v.(string))
  750. }
  751. return u
  752. }
  753. func (p *GetUserParams) SetUserapikey(v string) {
  754. if p.p == nil {
  755. p.p = make(map[string]interface{})
  756. }
  757. p.p["userapikey"] = v
  758. return
  759. }
  760. // You should always use this function to get a new GetUserParams instance,
  761. // as then you are sure you have configured all required params
  762. func (s *UserService) NewGetUserParams(userapikey string) *GetUserParams {
  763. p := &GetUserParams{}
  764. p.p = make(map[string]interface{})
  765. p.p["userapikey"] = userapikey
  766. return p
  767. }
  768. // Find user account by API key
  769. func (s *UserService) GetUser(p *GetUserParams) (*GetUserResponse, error) {
  770. resp, err := s.cs.newRequest("getUser", p.toURLValues())
  771. if err != nil {
  772. return nil, err
  773. }
  774. var r GetUserResponse
  775. if err := json.Unmarshal(resp, &r); err != nil {
  776. return nil, err
  777. }
  778. return &r, nil
  779. }
  780. type GetUserResponse struct {
  781. Account string `json:"account,omitempty"`
  782. Accountid string `json:"accountid,omitempty"`
  783. Accounttype int `json:"accounttype,omitempty"`
  784. Apikey string `json:"apikey,omitempty"`
  785. Created string `json:"created,omitempty"`
  786. Domain string `json:"domain,omitempty"`
  787. Domainid string `json:"domainid,omitempty"`
  788. Email string `json:"email,omitempty"`
  789. Firstname string `json:"firstname,omitempty"`
  790. Id string `json:"id,omitempty"`
  791. Iscallerchilddomain bool `json:"iscallerchilddomain,omitempty"`
  792. Isdefault bool `json:"isdefault,omitempty"`
  793. Lastname string `json:"lastname,omitempty"`
  794. Secretkey string `json:"secretkey,omitempty"`
  795. State string `json:"state,omitempty"`
  796. Timezone string `json:"timezone,omitempty"`
  797. Username string `json:"username,omitempty"`
  798. }
  799. type GetVirtualMachineUserDataParams struct {
  800. p map[string]interface{}
  801. }
  802. func (p *GetVirtualMachineUserDataParams) toURLValues() url.Values {
  803. u := url.Values{}
  804. if p.p == nil {
  805. return u
  806. }
  807. if v, found := p.p["virtualmachineid"]; found {
  808. u.Set("virtualmachineid", v.(string))
  809. }
  810. return u
  811. }
  812. func (p *GetVirtualMachineUserDataParams) SetVirtualmachineid(v string) {
  813. if p.p == nil {
  814. p.p = make(map[string]interface{})
  815. }
  816. p.p["virtualmachineid"] = v
  817. return
  818. }
  819. // You should always use this function to get a new GetVirtualMachineUserDataParams instance,
  820. // as then you are sure you have configured all required params
  821. func (s *UserService) NewGetVirtualMachineUserDataParams(virtualmachineid string) *GetVirtualMachineUserDataParams {
  822. p := &GetVirtualMachineUserDataParams{}
  823. p.p = make(map[string]interface{})
  824. p.p["virtualmachineid"] = virtualmachineid
  825. return p
  826. }
  827. // Returns user data associated with the VM
  828. func (s *UserService) GetVirtualMachineUserData(p *GetVirtualMachineUserDataParams) (*GetVirtualMachineUserDataResponse, error) {
  829. resp, err := s.cs.newRequest("getVirtualMachineUserData", p.toURLValues())
  830. if err != nil {
  831. return nil, err
  832. }
  833. var r GetVirtualMachineUserDataResponse
  834. if err := json.Unmarshal(resp, &r); err != nil {
  835. return nil, err
  836. }
  837. return &r, nil
  838. }
  839. type GetVirtualMachineUserDataResponse struct {
  840. Userdata string `json:"userdata,omitempty"`
  841. Virtualmachineid string `json:"virtualmachineid,omitempty"`
  842. }
  843. type RegisterUserKeysParams struct {
  844. p map[string]interface{}
  845. }
  846. func (p *RegisterUserKeysParams) toURLValues() url.Values {
  847. u := url.Values{}
  848. if p.p == nil {
  849. return u
  850. }
  851. if v, found := p.p["id"]; found {
  852. u.Set("id", v.(string))
  853. }
  854. return u
  855. }
  856. func (p *RegisterUserKeysParams) SetId(v string) {
  857. if p.p == nil {
  858. p.p = make(map[string]interface{})
  859. }
  860. p.p["id"] = v
  861. return
  862. }
  863. // You should always use this function to get a new RegisterUserKeysParams instance,
  864. // as then you are sure you have configured all required params
  865. func (s *UserService) NewRegisterUserKeysParams(id string) *RegisterUserKeysParams {
  866. p := &RegisterUserKeysParams{}
  867. p.p = make(map[string]interface{})
  868. p.p["id"] = id
  869. return p
  870. }
  871. // This command allows a user to register for the developer API, returning a secret key and an API key. This request is made through the integration API port, so it is a privileged command and must be made on behalf of a user. It is up to the implementer just how the username and password are entered, and then how that translates to an integration API request. Both secret key and API key should be returned to the user
  872. func (s *UserService) RegisterUserKeys(p *RegisterUserKeysParams) (*RegisterUserKeysResponse, error) {
  873. resp, err := s.cs.newRequest("registerUserKeys", p.toURLValues())
  874. if err != nil {
  875. return nil, err
  876. }
  877. var r RegisterUserKeysResponse
  878. if err := json.Unmarshal(resp, &r); err != nil {
  879. return nil, err
  880. }
  881. return &r, nil
  882. }
  883. type RegisterUserKeysResponse struct {
  884. Apikey string `json:"apikey,omitempty"`
  885. Secretkey string `json:"secretkey,omitempty"`
  886. }
  887. type ListLdapUsersParams struct {
  888. p map[string]interface{}
  889. }
  890. func (p *ListLdapUsersParams) toURLValues() url.Values {
  891. u := url.Values{}
  892. if p.p == nil {
  893. return u
  894. }
  895. if v, found := p.p["keyword"]; found {
  896. u.Set("keyword", v.(string))
  897. }
  898. if v, found := p.p["listtype"]; found {
  899. u.Set("listtype", v.(string))
  900. }
  901. if v, found := p.p["page"]; found {
  902. vv := strconv.Itoa(v.(int))
  903. u.Set("page", vv)
  904. }
  905. if v, found := p.p["pagesize"]; found {
  906. vv := strconv.Itoa(v.(int))
  907. u.Set("pagesize", vv)
  908. }
  909. return u
  910. }
  911. func (p *ListLdapUsersParams) SetKeyword(v string) {
  912. if p.p == nil {
  913. p.p = make(map[string]interface{})
  914. }
  915. p.p["keyword"] = v
  916. return
  917. }
  918. func (p *ListLdapUsersParams) SetListtype(v string) {
  919. if p.p == nil {
  920. p.p = make(map[string]interface{})
  921. }
  922. p.p["listtype"] = v
  923. return
  924. }
  925. func (p *ListLdapUsersParams) SetPage(v int) {
  926. if p.p == nil {
  927. p.p = make(map[string]interface{})
  928. }
  929. p.p["page"] = v
  930. return
  931. }
  932. func (p *ListLdapUsersParams) SetPagesize(v int) {
  933. if p.p == nil {
  934. p.p = make(map[string]interface{})
  935. }
  936. p.p["pagesize"] = v
  937. return
  938. }
  939. // You should always use this function to get a new ListLdapUsersParams instance,
  940. // as then you are sure you have configured all required params
  941. func (s *UserService) NewListLdapUsersParams() *ListLdapUsersParams {
  942. p := &ListLdapUsersParams{}
  943. p.p = make(map[string]interface{})
  944. return p
  945. }
  946. // Lists all LDAP Users
  947. func (s *UserService) ListLdapUsers(p *ListLdapUsersParams) (*ListLdapUsersResponse, error) {
  948. resp, err := s.cs.newRequest("listLdapUsers", p.toURLValues())
  949. if err != nil {
  950. return nil, err
  951. }
  952. var r ListLdapUsersResponse
  953. if err := json.Unmarshal(resp, &r); err != nil {
  954. return nil, err
  955. }
  956. return &r, nil
  957. }
  958. type ListLdapUsersResponse struct {
  959. Count int `json:"count"`
  960. LdapUsers []*LdapUser `json:"ldapuser"`
  961. }
  962. type LdapUser struct {
  963. Domain string `json:"domain,omitempty"`
  964. Email string `json:"email,omitempty"`
  965. Firstname string `json:"firstname,omitempty"`
  966. Lastname string `json:"lastname,omitempty"`
  967. Principal string `json:"principal,omitempty"`
  968. Username string `json:"username,omitempty"`
  969. }
  970. type ImportLdapUsersParams struct {
  971. p map[string]interface{}
  972. }
  973. func (p *ImportLdapUsersParams) toURLValues() url.Values {
  974. u := url.Values{}
  975. if p.p == nil {
  976. return u
  977. }
  978. if v, found := p.p["account"]; found {
  979. u.Set("account", v.(string))
  980. }
  981. if v, found := p.p["accountdetails"]; found {
  982. i := 0
  983. for k, vv := range v.(map[string]string) {
  984. u.Set(fmt.Sprintf("accountdetails[%d].key", i), k)
  985. u.Set(fmt.Sprintf("accountdetails[%d].value", i), vv)
  986. i++
  987. }
  988. }
  989. if v, found := p.p["accounttype"]; found {
  990. vv := strconv.Itoa(v.(int))
  991. u.Set("accounttype", vv)
  992. }
  993. if v, found := p.p["domainid"]; found {
  994. u.Set("domainid", v.(string))
  995. }
  996. if v, found := p.p["group"]; found {
  997. u.Set("group", v.(string))
  998. }
  999. if v, found := p.p["keyword"]; found {
  1000. u.Set("keyword", v.(string))
  1001. }
  1002. if v, found := p.p["page"]; found {
  1003. vv := strconv.Itoa(v.(int))
  1004. u.Set("page", vv)
  1005. }
  1006. if v, found := p.p["pagesize"]; found {
  1007. vv := strconv.Itoa(v.(int))
  1008. u.Set("pagesize", vv)
  1009. }
  1010. if v, found := p.p["timezone"]; found {
  1011. u.Set("timezone", v.(string))
  1012. }
  1013. return u
  1014. }
  1015. func (p *ImportLdapUsersParams) SetAccount(v string) {
  1016. if p.p == nil {
  1017. p.p = make(map[string]interface{})
  1018. }
  1019. p.p["account"] = v
  1020. return
  1021. }
  1022. func (p *ImportLdapUsersParams) SetAccountdetails(v map[string]string) {
  1023. if p.p == nil {
  1024. p.p = make(map[string]interface{})
  1025. }
  1026. p.p["accountdetails"] = v
  1027. return
  1028. }
  1029. func (p *ImportLdapUsersParams) SetAccounttype(v int) {
  1030. if p.p == nil {
  1031. p.p = make(map[string]interface{})
  1032. }
  1033. p.p["accounttype"] = v
  1034. return
  1035. }
  1036. func (p *ImportLdapUsersParams) SetDomainid(v string) {
  1037. if p.p == nil {
  1038. p.p = make(map[string]interface{})
  1039. }
  1040. p.p["domainid"] = v
  1041. return
  1042. }
  1043. func (p *ImportLdapUsersParams) SetGroup(v string) {
  1044. if p.p == nil {
  1045. p.p = make(map[string]interface{})
  1046. }
  1047. p.p["group"] = v
  1048. return
  1049. }
  1050. func (p *ImportLdapUsersParams) SetKeyword(v string) {
  1051. if p.p == nil {
  1052. p.p = make(map[string]interface{})
  1053. }
  1054. p.p["keyword"] = v
  1055. return
  1056. }
  1057. func (p *ImportLdapUsersParams) SetPage(v int) {
  1058. if p.p == nil {
  1059. p.p = make(map[string]interface{})
  1060. }
  1061. p.p["page"] = v
  1062. return
  1063. }
  1064. func (p *ImportLdapUsersParams) SetPagesize(v int) {
  1065. if p.p == nil {
  1066. p.p = make(map[string]interface{})
  1067. }
  1068. p.p["pagesize"] = v
  1069. return
  1070. }
  1071. func (p *ImportLdapUsersParams) SetTimezone(v string) {
  1072. if p.p == nil {
  1073. p.p = make(map[string]interface{})
  1074. }
  1075. p.p["timezone"] = v
  1076. return
  1077. }
  1078. // You should always use this function to get a new ImportLdapUsersParams instance,
  1079. // as then you are sure you have configured all required params
  1080. func (s *UserService) NewImportLdapUsersParams(accounttype int) *ImportLdapUsersParams {
  1081. p := &ImportLdapUsersParams{}
  1082. p.p = make(map[string]interface{})
  1083. p.p["accounttype"] = accounttype
  1084. return p
  1085. }
  1086. // Import LDAP users
  1087. func (s *UserService) ImportLdapUsers(p *ImportLdapUsersParams) (*ImportLdapUsersResponse, error) {
  1088. resp, err := s.cs.newRequest("importLdapUsers", p.toURLValues())
  1089. if err != nil {
  1090. return nil, err
  1091. }
  1092. var r ImportLdapUsersResponse
  1093. if err := json.Unmarshal(resp, &r); err != nil {
  1094. return nil, err
  1095. }
  1096. return &r, nil
  1097. }
  1098. type ImportLdapUsersResponse struct {
  1099. Domain string `json:"domain,omitempty"`
  1100. Email string `json:"email,omitempty"`
  1101. Firstname string `json:"firstname,omitempty"`
  1102. Lastname string `json:"lastname,omitempty"`
  1103. Principal string `json:"principal,omitempty"`
  1104. Username string `json:"username,omitempty"`
  1105. }