Ejemplo n.º 1
0
 def ReadApprovalRequest(self, requestor_username, approval_id):
     """Reads an approval request object with a given id."""
     try:
         return self.approvals_by_username[requestor_username][approval_id]
     except KeyError:
         raise db.UnknownApprovalRequestError(
             "Can't find approval with id: %s" % approval_id)
Ejemplo n.º 2
0
 def GrantApproval(self, requestor_username, approval_id, grantor_username):
   """Grants approval for a given request using given username."""
   try:
     approval = self.approvals_by_username[requestor_username][approval_id]
     approval.grants.append(
         rdf_objects.ApprovalGrant(
             grantor_username=grantor_username,
             timestamp=rdfvalue.RDFDatetime.Now()))
   except KeyError:
     raise db.UnknownApprovalRequestError("Can't find approval with id: %s" %
                                          approval_id)
Ejemplo n.º 3
0
    def ReadApprovalRequest(self,
                            requestor_username,
                            approval_id,
                            cursor=None):
        """Reads an approval request object with a given id."""

        query = ("""
        SELECT
            ar.approval_id,
            ar.timestamp,
            ar.approval_request,
            u.username,
            ag.timestamp
        FROM approval_request ar
        LEFT JOIN approval_grant ag USING (username_hash, approval_id)
        LEFT JOIN grr_users u ON u.username_hash = ag.grantor_username_hash
        WHERE ar.approval_id = %s AND ar.username_hash = %s
        """)

        cursor.execute(query, [
            _ApprovalIDToInt(approval_id),
            mysql_utils.Hash(requestor_username)
        ])
        res = cursor.fetchall()
        if not res:
            raise db.UnknownApprovalRequestError("Approval '%s' not found." %
                                                 approval_id)

        approval_id_int, timestamp, approval_request_bytes, _, _ = res[0]

        approval_request = mysql_utils.StringToRDFProto(
            rdf_objects.ApprovalRequest, approval_request_bytes)
        approval_request.approval_id = _IntToApprovalID(approval_id_int)
        approval_request.timestamp = mysql_utils.MysqlToRDFDatetime(timestamp)

        for _, _, _, grantor_username, timestamp in res:
            if not grantor_username:
                continue

            # Note: serialized approval_request objects are guaranteed to not
            # have any grants.
            approval_request.grants.append(
                rdf_objects.ApprovalGrant(
                    grantor_username=grantor_username,
                    timestamp=mysql_utils.MysqlToRDFDatetime(timestamp)))

        return approval_request