def default(self, *args):
        try:
            jsonobj = cherrypy.request.body.read()
            print jsonobj
            pargs = json.loads(jsonobj)
        except:
            print "bad request - cannot decode json - possible access from web browser"
            return json.dumps(
                "Personis User Model server. Not accessible using a web browser."
            )

        # dirty kludge to get around unicode
        for k, v in pargs.items():
            if type(v) == type(u''):
                pargs[k] = str(v)
            if type(k) == type(u''):
                del pargs[k]
                pargs[str(k)] = v

        try:
            result = False
            if args[0] == 'mkmodel':
                # fixme need to implement security
                # and error handling

                # Only users can make models, so authType must be 'user'
                (user, password) = pargs['auth'].split(":")
                Personis_base.MkModel(model=pargs['modelname'], modeldir=self.modeldir, \
                   user=user, password=password, description=pargs['description'])
                result = True
            elif args[0] == 'apprequestauth':
                Personis_base.AppRequestAuth(model=pargs['modelname'], modeldir=self.modeldir, \
                   app=pargs['app'], key=pargs['key'], description=pargs['description'])
                result = True
            else:
                um = Personis_a.Access(model=pargs['modelname'],
                                       modeldir=self.modeldir,
                                       authType=pargs['authType'],
                                       auth=pargs['auth'])

            if args[0] == 'access':
                result = True
            elif args[0] == 'tell':
                result = um.tell(
                    context=pargs['context'],
                    componentid=pargs['componentid'],
                    evidence=Personis_base.Evidence(**pargs['evidence']))
            elif args[0] == 'ask':
                reslist = um.ask(context=pargs['context'], view=pargs['view'], resolver=pargs['resolver'], \
                   showcontexts=pargs['showcontexts'])
                if pargs['showcontexts']:
                    cobjlist, contexts, theviews, thesubs = reslist
                    cobjlist = [c.__dict__ for c in cobjlist]
                    for c in cobjlist:
                        if c["evidencelist"]:
                            c["evidencelist"] = [e for e in c["evidencelist"]]
                    newviews = {}
                    if theviews != None:
                        for vname, v in theviews.items():
                            newviews[vname] = v.__dict__
                    else:
                        newviews = None
                    reslist = [cobjlist, contexts, newviews, thesubs]
                else:
                    reslist = [c.__dict__ for c in reslist]
                    for c in reslist:
                        if c["evidencelist"]:
                            c["evidencelist"] = [e for e in c["evidencelist"]]
                result = reslist

            elif args[0] == 'subscribe':
                result = um.subscribe(context=pargs['context'],
                                      view=pargs['view'],
                                      subscription=pargs['subscription'])
            elif args[0] == 'delete_sub':
                result = um.delete_sub(context=pargs['context'],
                                       componentid=pargs['componentid'],
                                       subname=pargs['subname'])
            elif args[0] == 'list_subs':
                result = um.list_subs(context=pargs['context'],
                                      componentid=pargs['componentid'])
            elif args[0] == 'export_model':
                result = um.export_model(context=pargs['context'],
                                         resolver=pargs['resolver'])
            elif args[0] == 'import_model':
                result = um.import_model(context=pargs['context'],
                                         partial_model=pargs['partial_model'])
            elif args[0] == 'set_goals':
                result = um.set_goals(context=pargs['context'],
                                      componentid=pargs['componentid'],
                                      goals=pargs['goals'])
            elif args[0] == 'registerapp':
                result = um.registerapp(app=pargs['app'],
                                        desc=pargs['description'],
                                        fingerprint=pargs['fingerprint'])
            elif args[0] == 'deleteapp':
                result = um.deleteapp(app=pargs['app'])
            elif args[0] == 'getpermission':
                result = um.getpermission(context=pargs['context'],
                                          componentid=pargs['componentid'],
                                          app=pargs['app'])
            elif args[0] == 'setpermission':
                result = um.setpermission(context=pargs['context'],
                                          componentid=pargs['componentid'],
                                          app=pargs['app'],
                                          permissions=pargs['permissions'])
            elif args[0] == 'listapps':
                result = um.listapps()
            elif args[0] == 'listrequests':
                result = um.listrequests()
            elif args[0] == 'mkcomponent':
                comp = Personis_base.Component(**pargs["componentobj"])
                result = um.mkcomponent(pargs["context"], comp)
            elif args[0] == 'delcomponent':
                result = um.delcomponent(pargs["context"],
                                         pargs["componentid"])
            elif args[0] == 'delcontext':
                result = um.delcontext(pargs["context"])
            elif args[0] == 'setresolver':
                result = um.setresolver(pargs["context"], pargs["componentid"],
                                        pargs["resolver"])
            elif args[0] == 'getresolvers':
                result = um.getresolvers()
            elif args[0] == 'mkview':
                viewobj = Personis_base.View(**pargs["viewobj"])
                result = um.mkview(pargs["context"], viewobj)
            elif args[0] == 'delview':
                result = um.delview(pargs["context"], pargs["viewid"])
            elif args[0] == 'mkcontext':
                contextobj = Personis_base.Context(**pargs["contextobj"])
                result = um.mkcontext(pargs["context"], contextobj)
            elif args[0] == 'getcontext':
                result = um.getcontext(pargs["context"], pargs["getsize"])

            # Repackage result code with error values IF there is a version string.
            if pargs.has_key("version"):
                new_result = {}
                new_result["result"] = "ok"
                new_result["val"] = result
                result = new_result

        except Exception, e:

            print "Exception:", e
            traceback.print_exc()
            if pargs.has_key("version"):
                new_result = {}
                #new_result["errorType"] = e.__class__.__name__
                #new_result["errorData"] = e.__dict__.copy()
                #new_result["pythonPickel"] = cPickle.dumps(e)
                new_result["val"] = [
                    e.__class__.__name__,
                    e.__dict__.copy(),
                    cPickle.dumps(e)
                ]
                new_result["result"] = "error"
                result = new_result
            else:
                result = False
print "==================================================================="
print "Simple example showing how permissions work"
print "==================================================================="

um = Personis_base.Access(model="Alice",
                          modeldir='Tests/Models',
                          authType='user',
                          auth='alice:secret')

print "Register an app"
try:
    key = Personis_base.generate_app_key("MyHealth")
    fingerprint = Personis_base.generate_app_fingerprint(key)
    Personis_base.AppRequestAuth(model='Alice',
                                 modeldir='Tests/Models',
                                 app='MyHealth',
                                 key=key.publickey().exportKey(),
                                 description="My Health Manager")
except Exception as e:
    print "App auth request failed with exception : %s\n" % (e)

requests = um.listrequests()
print requests
fingerprint2 = requests['MyHealth']['fingerprint']
if fingerprint2 != fingerprint:
    print "Fingerprints don't match!"
else:
    print "Fingerprints match"
appdetails = um.registerapp(app="MyHealth",
                            desc="My Health Manager",
                            fingerprint=fingerprint)