Exemplo n.º 1
0
def run_reaction(redata, jdata, logger):
    ''' 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-update: Got Records " + json.dumps(check))
        modified = 0
        for key in check.keys():
            logger.debug("cloudflare-rec-update: Replacing record id %s" % key)
            new_rec_data = {
                'id' : key,
                'zone_id': zoneid,
                'name' : check[key]['name'],
                'type' : redata['data']['new_rec_type'],
                'content' : redata['data']['new_content'],
            }
            try:
                result = cloudflare.update_rec(redata['data']['email'],
                                               redata['data']['apikey'],
                                               zoneid,
                                               logger,
                                               key,
                                               new_rec_data)
                if result is False:
                    logger.debug("cloudflare-rec-update: Replacing record id %s failed" % key)
                    return False
                else:
                    modified = modified + 1
            except:
                logger.debug("cloudflare-rec-update: Calling update record" +
                             " failed for id %s" % key)
                return False
        if modified == 0:
            return None
        else:
            return True
    else:
        logger.debug("cloudflare-rec-add: Could not pull zone id for domain " +
                     redata['data']['domain'] + " for monitor  " + redata['id'])
        return False
Exemplo n.º 2
0
def run_reaction(redata, jdata, logger):
    ''' 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-update: Got Records " + json.dumps(check))
        modified = 0
        for key in check.keys():
            logger.debug("cloudflare-rec-update: Replacing record id %s" % key)
            new_rec_data = {
                'id': key,
                'zone_id': zoneid,
                'name': check[key]['name'],
                'type': redata['data']['new_rec_type'],
                'content': redata['data']['new_content'],
            }
            try:
                result = cloudflare.update_rec(redata['data']['email'],
                                               redata['data']['apikey'],
                                               zoneid, logger, key,
                                               new_rec_data)
                if result is False:
                    logger.debug(
                        "cloudflare-rec-update: Replacing record id %s failed"
                        % key)
                    return False
                else:
                    modified = modified + 1
            except:
                logger.debug("cloudflare-rec-update: Calling update record" +
                             " failed for id %s" % key)
                return False
        if modified == 0:
            return None
        else:
            return True
    else:
        logger.debug("cloudflare-rec-add: Could not pull zone id for domain " +
                     redata['data']['domain'] + " for monitor  " +
                     redata['id'])
        return False
Exemplo n.º 3
0
def run_reaction(redata, jdata, logger):
    ''' This method performs the heavy lifting '''
    rec_data = {
        'name': redata['data']['rec_name'],
        'type': redata['data']['rec_type'],
        'content': redata['data']['content']
    }
    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-add: Got Records " + json.dumps(check))
        if len(check) == 0:
            logger.debug("cloudflare-rec-add: Found " + str(len(check)) +
                         " matching records")
            rec_data['ttl'] = redata['data']['ttl']
            if "true" in redata['data']['proxied']:
                rec_data['proxied'] = True
            else:
                rec_data['proxied'] = False
            result = cloudflare.add_rec(redata['data']['email'],
                                        redata['data']['apikey'], zoneid,
                                        logger, rec_data)
            if result:
                logger.info(
                    "cloudflare-rec-add: Successfully added record for monitor "
                    + redata['id'])
                return True
            else:
                logger.debug(
                    "cloudflare-rec-add: Failed to add record for monitor " +
                    redata['id'])
                return False
        else:
            logger.debug("cloudflare-rec-add: Found " + str(len(check)) +
                         " matching records")
            return None
    else:
        logger.debug("cloudflare-rec-add: Could not pull zone id for domain " +
                     redata['data']['domain'] + " for monitor  " +
                     redata['id'])
        return False
Exemplo n.º 4
0
def run_reaction(redata, jdata, logger):
    ''' This method performs the heavy lifting '''
    rec_data = {
        'name' : redata['data']['rec_name'],
        'type' : redata['data']['rec_type'],
        'content' : redata['data']['content']
    }
    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-add: Got Records " + json.dumps(check))
        if len(check) == 0:
            logger.debug("cloudflare-rec-add: Found " + str(len(check)) + " matching records")
            rec_data['ttl'] = redata['data']['ttl']
            if "true" in redata['data']['proxied']:
                rec_data['proxied'] = True
            else:
                rec_data['proxied'] = False
            result = cloudflare.add_rec(
                redata['data']['email'],
                redata['data']['apikey'],
                zoneid,
                logger,
                rec_data)
            if result:
                logger.info("cloudflare-rec-add: Successfully added record for monitor " + redata['id'])
                return True
            else:
                logger.debug("cloudflare-rec-add: Failed to add record for monitor " + redata['id']) 
                return False
        else:
            logger.debug("cloudflare-rec-add: Found " + str(len(check)) + " matching records")
            return None
    else:
        logger.debug("cloudflare-rec-add: Could not pull zone id for domain " + redata['data']['domain'] + " for monitor  " + redata['id'])
        return False
Exemplo n.º 5
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
Exemplo n.º 6
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
Exemplo n.º 7
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