'Enforce DailyFlowRequestLimit and FlowDuplicateInterval.
Look at the flows that have run on this client within the last day and check
we aren\'t exceeding our limits. Raises if limits will be exceeded by running
the specified flow.
Args:
client_id: client URN
user: username string
flow_name: flow name string
flow_args: flow args rdfvalue for the flow being launched
token: acl token
Raises:
ErrorDailyFlowRequestLimitExceeded: if the user has already run
API.DailyFlowRequestLimit on this client in the previous 24h.
ErrorFlowDuplicate: an identical flow was run on this machine by a user
within the API.FlowDuplicateInterval'

def EnforceLimits(self, client_id, user, flow_name, flow_args, token=None):

    if ((not self.dup_interval) and (not self.daily_req_limit)):
        return
    flows_dir = aff4.FACTORY.Open(client_id.Add('flows'), token=token)
    now = rdfvalue.RDFDatetime.Now()
    earlier = (now - rdfvalue.Duration('1d'))
    dup_boundary = (now - self.dup_interval)
    flow_count = 0
    flow_list = flows_dir.ListChildren(age=(earlier.AsMicroSecondsFromEpoch(), now.AsMicroSecondsFromEpoch()))
    for flow_obj in aff4.FACTORY.MultiOpen(flow_list, token=token):
        flow_context = flow_obj.context
        if (self.dup_interval and (flow_context.create_time > dup_boundary)):
            if (flow_obj.runner_args.flow_name == flow_name):
                if ((flow_obj.args == flow_args) or (isinstance(flow_obj.args, flow.EmptyFlowArgs) and (flow_args is None))):
                    raise ErrorFlowDuplicate(('Identical    %s    already    run    on    %s    at    %s' % (flow_name, client_id, flow_context.create_time)), flow_urn=flow_obj.urn)
        if ((flow_context.creator == user) and (flow_context.create_time > earlier)):
            flow_count += 1
    if (self.daily_req_limit and (flow_count >= self.daily_req_limit)):
        raise ErrorDailyFlowRequestLimitExceeded(('%s    flows    run    since    %s,    limit:    %s' % (flow_count, earlier, self.daily_req_limit)))
