blob: d5afbcde4492fbe03798edb3686b700ab047ef2b [file] [log] [blame]
Jon Perritt816d2a02014-03-11 20:49:46 -05001package accounts
2
3import (
4 "github.com/racker/perigee"
Jon Perrittb6b1d022014-04-14 21:50:45 -05005 storage "github.com/rackspace/gophercloud/openstack/storage/v1"
Jon Perritteb575642014-04-24 15:16:31 -05006 "net/http"
Jon Perritt816d2a02014-03-11 20:49:46 -05007)
8
Jon Perritteb575642014-04-24 15:16:31 -05009type GetResult *http.Response
Jon Perritt816d2a02014-03-11 20:49:46 -050010
11// Update is a function that creates, updates, or deletes an account's metadata.
12func Update(c *storage.Client, opts UpdateOpts) error {
13 h, err := c.GetHeaders()
14 if err != nil {
15 return err
16 }
17 for k, v := range opts.Headers {
18 h[k] = v
19 }
20
21 for k, v := range opts.Metadata {
22 h["X-Account-Meta-"+k] = v
23 }
24
25 url := c.GetAccountURL()
26 _, err = perigee.Request("POST", url, perigee.Options{
27 MoreHeaders: h,
28 OkCodes: []int{204},
29 })
30 return err
31}
32
33// Get is a function that retrieves an account's metadata. To extract just the custom
Jon Perritteb575642014-04-24 15:16:31 -050034// metadata, pass the GetResult response to the ExtractMetadata function.
Jon Perritt816d2a02014-03-11 20:49:46 -050035func Get(c *storage.Client, opts GetOpts) (GetResult, error) {
36 h, err := c.GetHeaders()
37 if err != nil {
38 return nil, err
39 }
40
41 for k, v := range opts.Headers {
42 h[k] = v
43 }
44
45 url := c.GetAccountURL()
46 resp, err := perigee.Request("HEAD", url, perigee.Options{
47 MoreHeaders: h,
48 OkCodes: []int{204},
49 })
Jon Perritteb575642014-04-24 15:16:31 -050050 return &resp.HttpResponse, err
Jon Perritt816d2a02014-03-11 20:49:46 -050051}