# jsb/plugs/core/remotecallbacks.py
#
#

""" dispatch remote events. """

## jsb imports

from jsb.utils.lazydict import LazyDict
from jsb.utils.generic import fromenc
from jsb.utils.exception import handle_exception
from jsb.lib.callbacks import callbacks, remote_callbacks, first_callbacks
from jsb.lib.container import Container
from jsb.lib.eventbase import EventBase
from jsb.lib.errors import NoProperDigest
from jsb.lib.commands import cmnds
from jsb.lib.examples import examples

## jsb.contrib imports

from jsb.contrib import xmlstream

## basic imports

import logging
import copy
import hmac
import hashlib
import cgi

## defines

cpy = copy.deepcopy

## callback

def remotecb(bot, event):
    """ dispatch an event. """
    try: container = Container().load(event.txt)
    except TypeError:
        handle_exception()
        logging.warn("remotecallbacks - not a remote event - %s " % event.userhost)
        return
    logging.debug('doing REMOTE callback')
    try:
        digest = hmac.new(str(container.hashkey), xmlstream.XMLunescape(container.payload), hashlib.sha512).hexdigest()
        logging.debug("remotecallbacks - digest is %s" % digest)
    except TypeError:
        handle_exception()
        logging.error("remotecallbacks - can't load payload - %s" % container.payload)
        return
    if container.digest == digest: e = EventBase().load(xmlstream.XMLunescape(container.payload))
    else: raise NoProperDigest()
    e.txt = xmlstream.XMLunescape(e.txt)
    e.nodispatch = True
    e.forwarded = True
    e.dontbind = True
    bot.doevent(e)
    event.status = "done"  
    return

remote_callbacks.add("MESSAGE", remotecb)

# jsb/plugs/core/remotecallbacks.py
#
#

""" dispatch remote events. """

## jsb imports

from jsb.utils.lazydict import LazyDict
from jsb.utils.generic import fromenc
from jsb.utils.exception import handle_exception
from jsb.lib.callbacks import callbacks, remote_callbacks, first_callbacks
from jsb.lib.container import Container
from jsb.lib.eventbase import EventBase
from jsb.lib.errors import NoProperDigest
from jsb.lib.commands import cmnds
from jsb.lib.examples import examples

## jsb.contrib imports

from jsb.contrib import xmlstream

## basic imports

import logging
import copy
import hmac
import hashlib
import cgi

## defines

cpy = copy.deepcopy

## callback

def remotecb(bot, event):
    """ dispatch an event. """
    try: container = Container().load(event.txt)
    except TypeError:
        handle_exception()
        logging.warn("remotecallbacks - not a remote event - %s " % event.userhost)
        return
    logging.debug('doing REMOTE callback')
    try:
        digest = hmac.new(str(container.hashkey), xmlstream.XMLunescape(container.payload), hashlib.sha512).hexdigest()
        logging.debug("remotecallbacks - digest is %s" % digest)
    except TypeError:
        handle_exception()
        logging.error("remotecallbacks - can't load payload - %s" % container.payload)
        return
    if container.digest == digest: e = EventBase().load(xmlstream.XMLunescape(container.payload))
    else: raise NoProperDigest()
    e.txt = xmlstream.XMLunescape(e.txt)
    e.nodispatch = True
    e.forwarded = True
    e.dontbind = True
    bot.doevent(e)
    event.status = "done"  
    return

remote_callbacks.add("MESSAGE", remotecb)

# jsb/plugs/core/remotecallbacks.py # # dispatch remote events. ## jsb imports ## jsb.contrib imports ## basic imports ## defines ## callback dispatch an event.