~juju-qa/ubuntu/yakkety/juju/2.0-rc3-again

« back to all changes in this revision

Viewing changes to src/launchpad.net/goose/identity/legacy.go

  • Committer: Package Import Robot
  • Author(s): James Page
  • Date: 2013-04-24 22:34:47 UTC
  • Revision ID: package-import@ubuntu.com-20130424223447-f0qdji7ubnyo0s71
Tags: upstream-1.10.0.1
ImportĀ upstreamĀ versionĀ 1.10.0.1

Show diffs side-by-side

added added

removed removed

Lines of Context:
 
1
package identity
 
2
 
 
3
import (
 
4
        "fmt"
 
5
        "io/ioutil"
 
6
        "net/http"
 
7
)
 
8
 
 
9
type Legacy struct {
 
10
        client *http.Client
 
11
}
 
12
 
 
13
func (l *Legacy) Auth(creds *Credentials) (*AuthDetails, error) {
 
14
        if l.client == nil {
 
15
                l.client = http.DefaultClient
 
16
        }
 
17
        request, err := http.NewRequest("GET", creds.URL, nil)
 
18
        if err != nil {
 
19
                return nil, err
 
20
        }
 
21
        request.Header.Set("X-Auth-User", creds.User)
 
22
        request.Header.Set("X-Auth-Key", creds.Secrets)
 
23
        response, err := l.client.Do(request)
 
24
        defer response.Body.Close()
 
25
        if err != nil {
 
26
                return nil, err
 
27
        }
 
28
        if response.StatusCode != http.StatusNoContent {
 
29
                content, _ := ioutil.ReadAll(response.Body)
 
30
                return nil, fmt.Errorf("Failed to Authenticate (code %d %s): %s",
 
31
                        response.StatusCode, response.Status, content)
 
32
        }
 
33
        details := &AuthDetails{}
 
34
        details.Token = response.Header.Get("X-Auth-Token")
 
35
        if details.Token == "" {
 
36
                return nil, fmt.Errorf("Did not get valid Token from auth request")
 
37
        }
 
38
        details.RegionServiceURLs = make(map[string]ServiceURLs)
 
39
        serviceURLs := make(ServiceURLs)
 
40
        // Legacy authentication doesn't require a region so use "".
 
41
        details.RegionServiceURLs[""] = serviceURLs
 
42
        nova_url := response.Header.Get("X-Server-Management-Url")
 
43
        if nova_url == "" {
 
44
                return nil, fmt.Errorf("Did not get valid nova management URL from auth request")
 
45
        }
 
46
        serviceURLs["compute"] = nova_url
 
47
 
 
48
        swift_url := response.Header.Get("X-Storage-Url")
 
49
        if swift_url == "" {
 
50
                return nil, fmt.Errorf("Did not get valid swift management URL from auth request")
 
51
        }
 
52
        serviceURLs["object-store"] = swift_url
 
53
 
 
54
        return details, nil
 
55
}