예제 #1
0
 def update(self, req, body, tenant_id, instance_id):
     """Change the password of one or more users."""
     LOG.info(_("Updating user passwords for instance '%s'") % instance_id)
     LOG.info(_("req : '%s'\n\n") % req)
     context = req.environ[wsgi.CONTEXT_KEY]
     self.validate(body)
     users = body['users']
     model_users = []
     for user in users:
         try:
             mu = guest_models.MySQLUser()
             mu.name = user['name']
             mu.host = user.get('host')
             mu.password = user['password']
             found_user = models.User.load(context, instance_id, mu.name,
                                           mu.host)
             if not found_user:
                 user_and_host = mu.name
                 if mu.host:
                     user_and_host += '@' + mu.host
                 raise exception.UserNotFound(uuid=user_and_host)
             model_users.append(mu)
         except (ValueError, AttributeError) as e:
             raise exception.BadRequest(msg=str(e))
     models.User.change_password(context, instance_id, model_users)
     return wsgi.Result(None, 202)
예제 #2
0
 def _get_user(self, context, instance_id, user_id):
     username, hostname = unquote_user_host(user_id)
     try:
         user = models.User.load(context, instance_id, username, hostname)
     except (ValueError, AttributeError) as e:
         raise exception.BadRequest(msg=str(e))
     if not user:
         raise exception.UserNotFound(uuid=user_id)
     return user
예제 #3
0
 def grant_access(self, username, hostname, databases):
     """Add a database to a users's grant list."""
     if (username, hostname) not in self.users:
         raise rd_exception.UserNotFound(
             "User %s cannot be found on the instance." % username)
     current_grants = self.grants.get((username, hostname), set())
     for db in databases:
         current_grants.add(db)
     self.grants[(username, hostname)] = current_grants
예제 #4
0
 def get_user(self, username, hostname):
     self._check_username(username)
     for (u, h) in self.users:
         print "%r @ %r" % (u, h)
     if (username, hostname) not in self.users:
         raise rd_exception.UserNotFound(
             "User %s@%s cannot be found on the instance." %
             (username, hostname))
     return self.users.get((username, hostname), None)
예제 #5
0
 def list_access(self, username, hostname):
     if (username, hostname) not in self.users:
         raise rd_exception.UserNotFound(
             "User %s cannot be found on the instance." % username)
     current_grants = self.grants.get((username, hostname), set())
     dbs = [{
         '_name': db,
         '_collate': '',
         '_character_set': '',
     } for db in current_grants]
     return dbs
예제 #6
0
 def show(self, req, tenant_id, instance_id, id):
     """Return a single user."""
     LOG.info(_("Showing a user for instance '%s'") % instance_id)
     LOG.info(_("req : '%s'\n\n") % req)
     context = req.environ[wsgi.CONTEXT_KEY]
     username, host = unquote_user_host(id)
     user = models.User.load(context, instance_id, username, host)
     if not user:
         raise exception.UserNotFound(uuid=id)
     view = views.UserView(user)
     return wsgi.Result(view.data(), 200)
예제 #7
0
 def change_passwords(self, users):
     for user in users:
         # Use the model to check validity.
         username = user['name']
         self._check_username(username)
         hostname = user['host']
         password = user['password']
         if (username, hostname) not in self.users:
             raise rd_exception.UserNotFound(
                 "User %s@%s cannot be found on the instance." %
                 (username, hostname))
         self.users[(username, hostname)]['password'] = password
예제 #8
0
 def revoke_access(self, username, hostname, database):
     """Remove a database from a users's grant list."""
     if (username, hostname) not in self.users:
         raise rd_exception.UserNotFound(
             "User %s cannot be found on the instance." % username)
     g = self.grants.get((username, hostname), set())
     if database not in self.grants.get((username, hostname), set()):
         raise rd_exception.DatabaseNotFound(
             "Database %s cannot be found on the instance." % database)
     current_grants = self.grants.get((username, hostname), set())
     if database in current_grants:
         current_grants.remove(database)
     self.grants[(username, hostname)] = current_grants
예제 #9
0
 def delete(self, req, tenant_id, instance_id, id):
     LOG.info(_("Deleting user for instance '%s'") % instance_id)
     LOG.info(_("req : '%s'\n\n") % req)
     context = req.environ[wsgi.CONTEXT_KEY]
     username, host = unquote_user_host(id)
     user = None
     try:
         user = guest_models.MySQLUser()
         user.name = username
         user.host = host
         found_user = models.User.load(context, instance_id, username, host)
     except (ValueError, AttributeError) as e:
         raise exception.BadRequest(msg=e)
     if not user:
         raise exception.UserNotFound(uuid=id)
     models.User.delete(context, instance_id, user.serialize())
     return wsgi.Result(None, 202)