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)
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)
def ReadApprovalRequest(self, requestor_username, approval_id, cursor=None): """Reads an approval request object with a given id.""" query = (""" SELECT ar.approval_id, UNIX_TIMESTAMP(ar.timestamp), ar.approval_request, u.username, UNIX_TIMESTAMP(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.TimestampToRDFDatetime( 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.TimestampToRDFDatetime(timestamp))) return approval_request