Beispiel #1
0
def run_reaction(redata, jdata, logger, r_server):
    ''' This method performs the heavy lifting '''
    rec_data = {
        'type' : redata['data']['rec_type'],
        'content' : redata['data']['content']
    }
    if redata['data']['rec_name']:
        rec_data['name'] = redata['data']['rec_name']
    zoneid = cloudflare.get_zoneid(redata['data']['email'],
                                   redata['data']['apikey'],
                                   redata['data']['domain'],
                                   logger)
    if zoneid is not None:
        check = cloudflare.get_recs(redata['data']['email'],
                                    redata['data']['apikey'],
                                    zoneid,
                                    logger,
                                    page=1,
                                    search=rec_data)
        logger.debug("cloudflare-rec-remove: Got Records " + json.dumps(check))
        removed = 0
        for key in check.keys():
            logger.debug("cloudflare-rec-remove: Removing record id %s" % key)
            try:
                result = cloudflare.del_rec(redata['data']['email'],
                                               redata['data']['apikey'],
                                               zoneid,
                                               logger,
                                               key)
                if result is False:
                    logger.debug("cloudflare-rec-remove: Delete request of record id %s failed" % key)
                    return False
                else:
                    removed = removed + 1
            except:
                logger.debug("cloudflare-rec-remove: Calling delete record" +
                             " failed for id %s" % key)
                return False
        if removed == 0:
            return None
        else:
            return True
    else:
        logger.debug("cloudflare-rec-remove: Could not pull zone id for domain " +
                     redata['data']['domain'] + " for monitor  " + redata['id'])
        return False
Beispiel #2
0
def run_reaction(redata, jdata, logger, r_server):
    ''' This method performs the heavy lifting '''
    removed = 0
    zoneid = cloudflare.get_zoneid(redata['data']['email'],
                                   redata['data']['apikey'],
                                   redata['data']['domain'],
                                   logger)
    if zoneid is None:
        logger.debug("cloudflare-dns-failover: could not pull zoneid")
        return False
    rec_data = {}
    if redata['data']['rec_name']:
        rec_data = {'name' : redata['data']['rec_name']}
    recs = cloudflare.get_recs(redata['data']['email'],
                               redata['data']['apikey'],
                               zoneid,
                               logger,
                               page=1,
                               search=rec_data)
    logger.debug("cloudflare-dns-failover: got records " + json.dumps(recs))
    if len(recs) < 1:
        logger.debug("cloudflare-dns-failover: could not pull records for domain %s" %
                     redata['data']['domain'])
        return False
    names = {}
    queued = {}
    for rec in recs.keys():
        name = recs[rec]['name'] + "-" + recs[rec]['type']
        if name in names:
            names[name].append(rec)
        else:
            names[name] = [rec]
        if (name in queued and
                recs[rec]['content'] == redata['data']['content']):
            queued[name].append(rec)
        elif recs[rec]['content'] == redata['data']['content']:
            queued[name] = [rec]

    for name in names.keys():
        if len(names[name]) > 1 and name in queued:
            for item in queued[name]:
                result = cloudflare.del_rec(redata['data']['email'],
                                            redata['data']['apikey'],
                                            zoneid,
                                            logger,
                                            item)
                logger.debug("cloudflare-dns-failover: Deleted record id %s" % item)
                if result:
                    removed = removed + 1
                    redis_key = "cloudflare-dns-failover:%s:%s" % (jdata['cid'],
                                                                   redata['id'],)
                    rec_json = json.dumps(recs[item])
                    try:
                        r_server.sadd(redis_key, rec_json)
                    except:
                        logger.debug("cloudflare-dns-failover: Could not add "
                                     " record to redis %s" % item)
                else:
                    logger.debug("cloudflare-dns-failover: Delete request "
                                 "of record id %s failed" % item)
    if removed == 0:
        return None
    else:
        return True
Beispiel #3
0
def run_reaction(redata, jdata, logger, r_server):
    ''' This method performs the heavy lifting '''
    removed = 0
    zoneid = cloudflare.get_zoneid(redata['data']['email'],
                                   redata['data']['apikey'],
                                   redata['data']['domain'],
                                   logger)
    if zoneid is None:
        logger.debug("cloudflare-dns-failover: could not pull zoneid")
        return False
    rec_data = {}
    if redata['data']['rec_name']:
        rec_data = {'name' : redata['data']['rec_name']}
    recs = cloudflare.get_recs(redata['data']['email'],
                               redata['data']['apikey'],
                               zoneid,
                               logger,
                               page=1,
                               search=rec_data)
    logger.debug("cloudflare-dns-failover: got records " + json.dumps(recs))
    if len(recs) < 1:
        logger.debug("cloudflare-dns-failover: could not pull records for domain %s" %
                     redata['data']['domain'])
        return False
    names = {}
    queued = {}
    for rec in recs.keys():
        if recs[rec]['name'] in names:
            names[recs[rec]['name']].append(rec)
        else:
            names[recs[rec]['name']] = [rec]
        if (recs[rec]['name'] in queued and
                recs[rec]['content'] == redata['data']['content']):
            queued[recs[rec]['name']].append(rec)
        elif recs[rec]['content'] == redata['data']['content']:
            queued[recs[rec]['name']] = [rec]

    for name in names.keys():
        if len(names[name]) > 1 and name in queued:
            for item in queued[name]:
                result = cloudflare.del_rec(redata['data']['email'],
                                            redata['data']['apikey'],
                                            zoneid,
                                            logger,
                                            item)
                logger.debug("cloudflare-dns-failover: Deleted record id %s" % item)
                if result:
                    removed = removed + 1
                    redis_key = "cloudflare-dns-failover:%s:%s" % (jdata['cid'],
                                                                   redata['id'],)
                    rec_json = json.dumps(recs[item])
                    try:
                        r_server.sadd(redis_key, rec_json)
                    except:
                        logger.debug("cloudflare-dns-failover: Could not add "
                                     " record to redis %s" % item)
                else:
                    logger.debug("cloudflare-dns-failover: Delete request "
                                 "of record id %s failed" % item)
    if removed == 0:
        return None
    else:
        return True