Example #1
0
def updateGogoc():
    # search for lowpan.json config file
    search = ['/etc/gogoc', '/var/cache/bradmin', '/etc/lowpan', '/usr/local/etc/lowpan', '.']

    lowpanConf = json.loads(db.get('conf/lowpan'))
    brConf = json.loads(db.get('conf/br'))
    distro = getBaseDistro()

    gogotmpl = None
    for s in search:
        try:
            gogotmpl = open(s + '/gogoc.conf.tmpl.' + distro, 'r')
        except IOError:
            pass

    if gogotmpl is None:
        print "couldn't open gogoc template"
        return

    # generate a tunnel password
    chars = string.letters + string.digits 
    length = 24
    tunpassword = ''.join(choice(chars) for _ in range(length))
    m = md5.new()
    try:
        m.update(brConf['eui'])
        m.update(':' + lowpanConf['realm'] + ':') 
    except KeyError:
        print "invalid config"
        return
    m.update(tunpassword)
    tunpasshash = m.hexdigest()

    data = json.dumps( { "passhash": tunpasshash } )
    headers = { "Content-type": "application/json" }
    req = urllib2.Request(lowpanConf['url'] + '/tunnel/passhash?apikey=' + lowpanConf['password'], data, headers)
    resp = urllib2.urlopen(req)

    #print "sending passhash " + tunpasshash + " for password " + tunpassword

    gogo = ''
    gogo = gogo + "userid=%s\n" % (brConf['eui'])
    gogo = gogo + "passwd=%s\n" % (tunpassword)
    gogo = gogo + "server=%s\n" % (brConf['tunnel']['uri'])
    gogo = gogo + "\n"
    gogo = gogo + gogotmpl.read()
    
    os.system('mkdir -p %s' % (lowpanConf['gogo-conf']))
    out = open(lowpanConf['gogo-conf'] + '/gogoc.conf', 'w')
    out.write(gogo)

    if distro == 'arch':
        os.system('systemctl restart gogoc')
    elif distro == 'debian':
        os.system('killall -9 gogoc')
        os.system('gogoc')

    time.sleep(5)
Example #2
0
def init():
    print "lowpan init"

    if getBaseDistro() == 'debian':
        os.system('killall -9 gogoc')
        os.system('gogoc')

    # make a default lowpan config
    lowpanConf = None
    try:
        lowpanConf = json.loads(db.get('conf/lowpan'))    
    except IOError:
        # load default config
        createDefaultConf()

    if (lowpanConf['url'] != None) and (lowpanConf['password'] != None):
        try:
            syncConfig()
        except (urllib2.HTTPError, LowpanAPIError, urllib2.URLError):
            print "Couldn't connect to lowpan"