Example #1
0
    def reject_transaction(self):
        """
        rejects a transaction.

        needs the mandatory url query parameters:

            * transactionid: unique id for the transaction
            * signature: signature for the rejection
        """

        try:

            param = self.request_params.copy()

            # -------------------------------------------------------------- --

            # check the parameters

            if 'signature' not in param:
                raise ParameterError("Missing parameter: 'signature'!")

            if 'transactionid' not in param:
                raise ParameterError("Missing parameter: 'transactionid'!")

            # -------------------------------------------------------------- --

            # start the processing

            passw = {'reject': param['signature']}
            transid = param['transactionid']

            vh = ValidationHandler()
            ok, _opt = vh.check_by_transactionid(transid=transid,
                                                 passw=passw,
                                                 options=param)

            # -------------------------------------------------------------- --

            # finish the result

            if 'serial' in _opt:
                g.audit['serial'] = _opt['serial']

            if 'token_type' in _opt:
                g.audit['token_type'] = _opt['token_type']

            g.audit['info'] = 'reject transaction: %r' % ok

            g.audit['success'] = ok
            db.session.commit()

            return sendResult(response, ok)

        except Exception as exx:

            log.exception("validate/reject_transaction failed: %r" % exx)
            g.audit['info'] = "%r" % exx
            db.session.rollback()

            return sendResult(response, False, 0)
Example #2
0
    def check_t(self):

        param = {}
        value = {}
        ok = False
        opt = {}

        try:
            param.update(request.params)

            if 'pass' not in param:
                raise ParameterError("Missing parameter: 'pass'")

            passw = param['pass']

            transid = param.get('state', None)
            if transid is not None:
                param['transactionid'] = transid
                del param['state']

            if transid is None:
                transid = param.get('transactionid', None)

            if transid is None:
                raise Exception("missing parameter: state or transactionid!")

            vh = ValidationHandler()
            (ok, opt) = vh.check_by_transactionid(transid=transid,
                                                  passw=passw,
                                                  options=param)

            value['value'] = ok
            value['failcount'] = int(opt.get('failcount', 0))

            c.audit['success'] = ok
            Session.commit()

            qr = param.get('qr', None)
            if qr and opt and 'message' in opt:
                try:
                    dataobj = opt.get('message')
                    param['alt'] = "%s" % opt
                    if 'transactionid' in opt:
                        param['transactionid'] = opt['transactionid']
                    return sendQRImageResult(response, dataobj, param)
                except Exception as exc:
                    log.warning("failed to send QRImage: %r " % exc)
                    return sendQRImageResult(response, opt, param)
            else:
                return sendResult(response, value, 1, opt=opt)

        except Exception as exx:
            log.exception("[check_t] validate/check_t failed: %r" % exx)
            c.audit['info'] = unicode(exx)
            Session.rollback()
            return sendResult(response, False, 0)

        finally:
            Session.close()
Example #3
0
    def accept_transaction(self):
        """
        confirms a transaction.

        needs the mandatory url query parameters:

            * transactionid: unique id for the transaction
            * signature: signature for the confirmation
        """

        try:

            param = self.request_params.copy()

            # -------------------------------------------------------------- --

            # check the parameters

            if "signature" not in param:
                raise ParameterError("Missing parameter: 'signature'!")

            if "transactionid" not in param:
                raise ParameterError("Missing parameter: 'transactionid'!")

            # -------------------------------------------------------------- --

            # start the processing

            passw = {"accept": param["signature"]}
            transid = param["transactionid"]

            vh = ValidationHandler()
            ok, _opt = vh.check_by_transactionid(
                transid=transid, passw=passw, options=param
            )

            # -------------------------------------------------------------- --

            # finish the result

            if "serial" in _opt:
                g.audit["serial"] = _opt["serial"]

            if "token_type" in _opt:
                g.audit["token_type"] = _opt["token_type"]

            g.audit["info"] = "accept transaction: %r" % ok

            g.audit["success"] = ok
            db.session.commit()

            return sendResult(response, ok)

        except Exception as exx:
            log.error("validate/accept_transaction failed: %r", exx)
            g.audit["info"] = "%r" % exx
            db.session.rollback()

            return sendResult(response, False, 0)
Example #4
0
    def accept_transaction(self):
        """
        confirms a transaction.

        needs the mandatory url query parameters:

            * transactionid: unique id for the transaction
            * signature: signature for the confirmation
        """

        try:

            param = {}
            param.update(request.params)

            # -------------------------------------------------------------- --

            # check the parameters

            if 'signature' not in param:
                raise ParameterError("Missing parameter: 'signature'!")

            if 'transactionid' not in param:
                raise ParameterError("Missing parameter: 'transactionid'!")

            # -------------------------------------------------------------- --

            # start the processing

            passw = {'accept': param['signature']}
            transid = param['transactionid']

            vh = ValidationHandler()
            ok, _opt = vh.check_by_transactionid(transid=transid,
                                                 passw=passw,
                                                 options=param)

            # -------------------------------------------------------------- --

            # finish the result

            c.audit['info'] = 'accept transaction: %r' % ok

            c.audit['success'] = ok
            Session.commit()

            return sendResult(response, ok)

        except Exception as exx:

            log.exception("validate/accept_transaction failed: %r" % exx)
            c.audit['info'] = "%r" % exx
            Session.rollback()

            return sendResult(response, False, 0)

        finally:
            Session.close()
Example #5
0
    def check_t(self):

        param = self.request_params.copy()
        value = {}
        ok = False
        opt = {}

        try:
            if 'pass' not in param:
                raise ParameterError("Missing parameter: 'pass'")

            passw = param['pass']

            transid = param.get('state', None)
            if transid is not None:
                param['transactionid'] = transid
                del param['state']

            if transid is None:
                transid = param.get('transactionid', None)

            if transid is None:
                raise Exception("missing parameter: state or transactionid!")

            vh = ValidationHandler()
            (ok, opt) = vh.check_by_transactionid(transid=transid,
                                                  passw=passw,
                                                  options=param)

            value['value'] = ok
            value['failcount'] = int(opt.get('failcount', 0))

            c.audit['success'] = ok
            Session.commit()

            qr = param.get('qr', None)
            if qr and opt and 'message' in opt:
                try:
                    dataobj = opt.get('message')
                    param['alt'] = "%s" % opt
                    if 'transactionid' in opt:
                        param['transactionid'] = opt['transactionid']
                    return sendQRImageResult(response, dataobj, param)
                except Exception as exc:
                    log.warning("failed to send QRImage: %r " % exc)
                    return sendQRImageResult(response, opt, param)
            else:
                return sendResult(response, value, 1, opt=opt)

        except Exception as exx:
            log.exception("[check_t] validate/check_t failed: %r" % exx)
            c.audit['info'] = unicode(exx)
            Session.rollback()
            return sendResult(response, False, 0)

        finally:
            Session.close()
Example #6
0
    def check_t(self):

        param = self.request_params.copy()
        value = {}
        ok = False
        opt = {}

        try:
            if "pass" not in param:
                raise ParameterError("Missing parameter: 'pass'")

            passw = param["pass"]

            transid = param.get("state", None)
            if transid is not None:
                param["transactionid"] = transid
                del param["state"]

            if transid is None:
                transid = param.get("transactionid", None)

            if transid is None:
                raise Exception("missing parameter: state or transactionid!")

            vh = ValidationHandler()
            (ok, opt) = vh.check_by_transactionid(
                transid=transid, passw=passw, options=param
            )

            value["value"] = ok
            value["failcount"] = int(opt.get("failcount", 0))

            g.audit["success"] = ok
            db.session.commit()

            qr = param.get("qr", None)
            if qr and opt and "message" in opt:
                try:
                    dataobj = opt.get("message")
                    param["alt"] = "%s" % opt
                    if "transactionid" in opt:
                        param["transactionid"] = opt["transactionid"]
                    return sendQRImageResult(response, dataobj, param)
                except Exception as exc:
                    log.warning("failed to send QRImage: %r ", exc)
                    return sendQRImageResult(response, opt, param)
            else:
                return sendResult(response, value, 1, opt=opt)

        except Exception as exx:
            log.error("[check_t] validate/check_t failed: %r", exx)
            g.audit["info"] = str(exx)
            db.session.rollback()
            return sendResult(response, False, 0)
Example #7
0
    def reject_transaction(self):

        """
        rejects a transaction.

        needs the mandatory url query parameters:

            * transactionid: unique id for the transaction
            * signature: signature for the rejection
        """

        try:

            param = self.request_params.copy()

            # -------------------------------------------------------------- --

            # check the parameters

            if 'signature' not in param:
                raise ParameterError("Missing parameter: 'signature'!")

            if 'transactionid' not in param:
                raise ParameterError("Missing parameter: 'transactionid'!")

            # -------------------------------------------------------------- --

            # start the processing

            passw = {'reject': param['signature']}
            transid = param['transactionid']

            vh = ValidationHandler()
            ok, _opt = vh.check_by_transactionid(transid=transid,
                                                 passw=passw,
                                                 options=param)

            # -------------------------------------------------------------- --

            # finish the result

            if 'serial' in _opt:
                c.audit['serial'] = _opt['serial']

            if 'token_type' in _opt:
                c.audit['token_type'] = _opt['token_type']

            c.audit['info'] = 'reject transaction: %r' % ok

            c.audit['success'] = ok
            Session.commit()

            return sendResult(response, ok)

        except Exception as exx:

            log.exception("validate/reject_transaction failed: %r" % exx)
            c.audit['info'] = "%r" % exx
            Session.rollback()

            return sendResult(response, False, 0)

        finally:
            Session.close()
Example #8
0
    def confirm_transaction(self):
        """
        verfiy the transaction
        - the next verification step in a multifactor authentication.

        * param action: accept or deny
        * param signature: signature of the accepted or denied
                                    transaction
        * param: transactionid * : the continuation id of the authorisation /
                                   authentication processing
        """

        try:

            param = {}
            param.update(request.params)

            # -------------------------------------------------------------- --

            # check the parameters

            if 'signature' not in param:
                raise ParameterError("Missing parameter: 'signature'!")

            if 'transactionid' not in param:
                raise ParameterError("Missing parameter: 'transactionid'!")

            if 'action' not in param:
                raise ParameterError("Missing parameter: 'action'!")

            if param['action'] not in ['accept', 'reject']:
                raise ParameterError("Missing action parameter value:"
                                     " 'accept' or 'reject'!")

            # -------------------------------------------------------------- --

            # start the processing

            action = param['action']
            passw = {action: param['signature']}
            transid = param['transactionid']

            vh = ValidationHandler()
            ok, _opt = vh.check_by_transactionid(transid=transid,
                                                 passw=passw,
                                                 options=param)

            # -------------------------------------------------------------- --

            # finish the result

            value = {action: ok}
            c.audit['info'] = '%s transaction: %r' % (action, ok)

            c.audit['success'] = ok
            Session.commit()

            return sendResult(response, value)

        except Exception as exx:

            log.exception("validate/check_transaction failed: %r" % exx)
            c.audit['info'] = "%r" % exx
            Session.rollback()

            return sendResult(response, False, 0)

        finally:
            Session.close()