~ubuntu-branches/ubuntu/vivid/horizon/vivid

« back to all changes in this revision

Viewing changes to openstack_dashboard/api/keystone.py

  • Committer: Package Import Robot
  • Author(s): James Page
  • Date: 2015-03-30 11:12:29 UTC
  • mfrom: (0.14.1) (0.12.2) (76.1.7 vivid-proposed)
  • Revision ID: package-import@ubuntu.com-20150330111229-08du2zlqf9khi4k5
Tags: 1:2015.1~b3-0ubuntu1
* New upstream milestone release:
  - d/control: All version requirements with upstream, drop dependency
    on lockfile.
  - Refresh xstatic assets.
  - d/p/*: Refresh.
* d/pydist-overrides: Add overrides for oslo packages.

Show diffs side-by-side

added added

removed removed

Lines of Context:
255
255
 
256
256
 
257
257
def tenant_list(request, paginate=False, marker=None, domain=None, user=None,
258
 
                admin=True):
 
258
                admin=True, filters=None):
259
259
    manager = VERSIONS.get_project_manager(request, admin=admin)
260
260
    page_size = utils.get_page_size(request)
261
261
 
270
270
            tenants.pop(-1)
271
271
            has_more_data = True
272
272
    else:
273
 
        tenants = manager.list(domain=domain, user=user)
 
273
        kwargs = {
 
274
            "domain": domain,
 
275
            "user": user
 
276
        }
 
277
        if filters is not None:
 
278
            kwargs.update(filters)
 
279
        tenants = manager.list(**kwargs)
274
280
    return (tenants, has_more_data)
275
281
 
276
282
 
284
290
                              enabled=enabled, domain=domain, **kwargs)
285
291
 
286
292
 
287
 
def user_list(request, project=None, domain=None, group=None):
 
293
def user_list(request, project=None, domain=None, group=None, filters=None):
288
294
    if VERSIONS.active < 3:
289
295
        kwargs = {"tenant_id": project}
290
296
    else:
293
299
            "domain": domain,
294
300
            "group": group
295
301
        }
 
302
        if filters is not None:
 
303
            kwargs.update(filters)
296
304
    users = keystoneclient(request, admin=True).users.list(**kwargs)
297
305
    return [VERSIONS.upgrade_v2_user(user) for user in users]
298
306
 
329
337
        raise keystone_exceptions.ClientException(
330
338
            405, _("Identity service does not allow editing user data."))
331
339
 
332
 
    # The v2 API updates user model, password and default project separately
 
340
    # The v2 API updates user model and default project separately
333
341
    if VERSIONS.active < 3:
334
 
        password = data.pop('password')
335
342
        project = data.pop('project')
336
343
 
337
344
        # Update user details
358
365
                               'that project.')
359
366
                             % data.get('name', None))
360
367
 
361
 
        # If present, update password
362
 
        # FIXME(gabriel): password change should be its own form + view
363
 
        if password:
364
 
            try:
365
 
                user_update_password(request, user, password)
366
 
                if user.id == request.user.id:
367
 
                    return utils.logout_with_message(
368
 
                        request,
369
 
                        _("Password changed. Please log in again to "
370
 
                          "continue."),
371
 
                        redirect=False
372
 
                    )
373
 
            except Exception:
374
 
                error = exceptions.handle(request, ignore=True)
375
 
 
376
368
        if error is not None:
377
369
            raise error
378
370
 
379
371
    # v3 API is so much simpler...
380
372
    else:
381
 
        if not data['password']:
382
 
            data.pop('password')
383
373
        try:
384
374
            user = manager.update(user, **data)
385
375
        except keystone_exceptions.Conflict:
386
376
            raise exceptions.Conflict()
387
 
        if data.get('password') and user.id == request.user.id:
388
 
            return utils.logout_with_message(
389
 
                request,
390
 
                _("Password changed. Please log in again to continue."),
391
 
                redirect=False
392
 
            )
393
377
 
394
378
 
395
379
def user_update_enabled(request, user, enabled):
401
385
 
402
386
 
403
387
def user_update_password(request, user, password, admin=True):
 
388
 
 
389
    if not keystone_can_edit_user():
 
390
        raise keystone_exceptions.ClientException(
 
391
            405, _("Identity service does not allow editing user password."))
 
392
 
404
393
    manager = keystoneclient(request, admin=admin).users
405
394
    if VERSIONS.active < 3:
406
395
        return manager.update_password(user, password)
408
397
        return manager.update(user, password=password)
409
398
 
410
399
 
 
400
def user_verify_admin_password(request, admin_password):
 
401
    # attempt to create a new client instance with admin password to
 
402
    # verify if it's correct.
 
403
    client = keystone_client_v2 if VERSIONS.active < 3 else keystone_client_v3
 
404
    try:
 
405
        endpoint = _get_endpoint_url(request, 'internalURL')
 
406
        insecure = getattr(settings, 'OPENSTACK_SSL_NO_VERIFY', False)
 
407
        cacert = getattr(settings, 'OPENSTACK_SSL_CACERT', None)
 
408
        client.Client(
 
409
            username=request.user.username,
 
410
            password=admin_password,
 
411
            insecure=insecure,
 
412
            cacert=cacert,
 
413
            auth_url=endpoint
 
414
        )
 
415
        return True
 
416
    except Exception:
 
417
        exceptions.handle(request, ignore=True)
 
418
        return False
 
419
 
 
420
 
411
421
def user_update_own_password(request, origpassword, password):
412
422
    client = keystoneclient(request, admin=False)
413
423
    client.user_id = request.user.id