Revision 890c2065 snf-common/synnefo/lib/astakos.py

b/snf-common/synnefo/lib/astakos.py
66 66
        return f
67 67
    return execute
68 68

  
69
def call(token, url, headers={}):
69
def call(token, url, headers={}, body=None, method='GET'):
70 70
    p = urlparse(url)
71 71

  
72 72
    kwargs = {}
73 73
    kwargs['headers'] = headers
74 74
    kwargs['headers']['X-Auth-Token'] = token
75
    kwargs['headers']['Content-Length'] = 0
75
    if body:
76
        kwargs['body'] = body
77
        kwargs['headers'].setdefault('content-type', 'application/octet-stream')
78
    kwargs['headers'].setdefault('content-length', len(body) if body else 0)
79

  
76 80

  
77 81
    conn = get_http_connection(p.netloc, p.scheme)
78 82
    try:
79
        conn.request('GET', p.path + '?' + p.query, **kwargs)
83
        conn.request(method, p.path + '?' + p.query, **kwargs)
80 84
        response = conn.getresponse()
81 85
        headers = response.getheaders()
82 86
        headers = dict((unquote(h), unquote(v)) for h,v in headers)
......
103 107

  
104 108

  
105 109
@retry(3)
106
def get_username(
110
def get_displaynames(
107 111
        token,
108
        uuid,
109
        url='http://127.0.0.1:8000/im/service/api/v2.0/users',
112
        uuids,
113
        url='http://127.0.0.1:8000/user_catalogs',
110 114
        override_users={}):
111
    if override_users:
112
        return uuid
113 115

  
114
    headers = {}
115
    if uuid:
116
        headers['X-User-Uuid'] = uuid
116
    if override_users:
117
        return dict((u,u) for u in uuids)
117 118

  
118 119
    try:
119
        data = call(token, url, headers)
120
        data = call(
121
            token, url,  headers={'content-type':'application/json'},
122
            body=json.dumps({'uuids':uuids}), method='POST')
120 123
    except Exception, e:
121 124
        raise e
122 125
    else:
123
        return data.get('username')
126
        return data.get('uuid_catalog')
124 127

  
125 128

  
126 129
@retry(3)
127
def get_user_uuid(
130
def get_uuids(
128 131
        token,
129
        username,
130
        url='http://127.0.0.1:8000/im/service/api/v2.0/users',
132
        displaynames,
133
        url='http://127.0.0.1:8000/user_catalogs',
131 134
        override_users={}):
135

  
132 136
    if override_users:
133
        return username
137
        return dict((u,u) for u in displaynames)
134 138

  
135
    headers = {}
136
    if username:
137
        headers['X-User-Username'] = username
138 139
    try:
139
        data = call(token, url, headers)
140
        data = call(
141
            token, url, headers={'content-type':'application/json'},
142
            body=json.dumps({'displaynames':displaynames}), method='POST')
140 143
    except Exception, e:
144
        import traceback
145
        traceback.print_exc()
141 146
        raise e
142 147
    else:
143
        return data.get('uuid')
148
        return data.get('displayname_catalog')
149

  
150
def get_user_uuid(
151
        token,
152
        displayname,
153
        url='http://127.0.0.1:8000/user_catalogs',
154
        override_users={}):
155

  
156
    if not displayname:
157
        return
158

  
159
    displayname_dict = get_uuids(token, [displayname], url, override_users)
160
    return displayname_dict.get(displayname)
161

  
162

  
163
def get_displayname(
164
        token,
165
        uuid,
166
        url='http://127.0.0.1:8000/user_catalogs',
167
        override_users={}):
168

  
169
    if not uuid:
170
        return
144 171

  
172
    uuid_dict = get_displaynames(token, [uuid], url, override_users)
173
    return uuid_dict.get(uuid)
145 174

  
146 175
def user_for_token(token, authentication_url, override_users, usage=False):
147 176
    if not token:
......
189 218
                       authentication_url)
190 219
        return None
191 220

  
192
    # use user uuid, instead of email, keep email/username reference to user_id
221
    # use user uuid, instead of email, keep email/displayname reference to user_id
193 222
    request.user_uniq = user['uuid']
194 223
    request.user = user
195
    request.user_id = user.get('username')
224
    request.user_id = user.get('displayname')
196 225
    return user
197 226

  
198 227

  

Also available in: Unified diff