golang-client/identity/v2/unused-auth.go

146 lines
3.5 KiB
Go

// Copyright (c) 2014 Hewlett-Packard Development Company, L.P.
//
// Licensed under the Apache License, Version 2.0 (the "License"); you may
// not use this file except in compliance with the License. You may obtain
// a copy of the License at
//
// http://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
// WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
// License for the specific language governing permissions and limitations
// under the License.
//Package identity provides functions for client-side access to OpenStack
//IdentityService.
package identity
import (
"encoding/json"
"errors"
"fmt"
"strings"
"time"
"git.openstack.org/stackforge/golang-client.git/openstack"
)
type Auth struct {
Access Access
}
type Access struct {
Token Token
User User
ServiceCatalog []Service
}
type Token struct {
Id string
Expires time.Time
Tenant Tenant
}
type Tenant struct {
Id string
Name string
}
type User struct {
Id string
Name string
Roles []Role
Roles_links []string
}
type Role struct {
Id string
Name string
TenantId string
}
type Service struct {
Name string
Type string
Endpoints []Endpoint
Endpoints_links []string
}
type Endpoint struct {
TenantId string
PublicURL string
InternalURL string
Region string
VersionId string
VersionInfo string
VersionList string
}
func AuthKey(url, accessKey, secretKey string) (Auth, error) {
jsonStr := (fmt.Sprintf(`{"auth":{
"apiAccessKeyCredentials":{"accessKey":"%s","secretKey":"%s"}}
}`,
accessKey, secretKey))
return auth(&url, &jsonStr)
}
func AuthKeyTenantId(url, accessKey, secretKey, tenantId string) (Auth, error) {
jsonStr := (fmt.Sprintf(`{"auth":{
"apiAccessKeyCredentials":{"accessKey":"%s","secretKey":"%s"},"tenantId":"%s"}
}`,
accessKey, secretKey, tenantId))
return auth(&url, &jsonStr)
}
func AuthUserName(url, username, password string) (Auth, error) {
jsonStr := (fmt.Sprintf(`{"auth":{
"passwordCredentials":{"username":"%s","password":"%s"}}
}`,
username, password))
return auth(&url, &jsonStr)
}
func AuthUserNameTenantName(url, username, password, tenantName string) (Auth, error) {
jsonStr := (fmt.Sprintf(`{"auth":{
"passwordCredentials":{"username":"%s","password":"%s"},"tenantName":"%s"}
}`,
username, password, tenantName))
return auth(&url, &jsonStr)
}
func AuthUserNameTenantId(url, username, password, tenantId string) (Auth, error) {
jsonStr := (fmt.Sprintf(`{"auth":{
"passwordCredentials":{"username":"%s","password":"%s"},"tenantId":"%s"}
}`,
username, password, tenantId))
return auth(&url, &jsonStr)
}
func AuthTenantNameTokenId(url, tenantName, tokenId string) (Auth, error) {
jsonStr := (fmt.Sprintf(`{"auth":{
"tenantName":"%s","token":{"id":"%s"}}
}`,
tenantName, tokenId))
return auth(&url, &jsonStr)
}
func auth(url, jsonStr *string) (Auth, error) {
var s []byte = []byte(*jsonStr)
path := fmt.Sprintf(`%s/tokens`, *url)
resp, err := openstack.Post(path, nil, nil, &s)
if err != nil {
return Auth{}, err
}
var contentType string = strings.ToLower(resp.Resp.Header.Get("Content-Type"))
if strings.Contains(contentType, "json") != true {
return Auth{}, errors.New("err: header Content-Type is not JSON")
}
var auth = Auth{}
if err = json.Unmarshal(resp.Body, &auth); err != nil {
return Auth{}, err
}
return auth, nil
}