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)
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"