def jwt_secure_check(arg):
     logging.info("Rest_API_Plugin.jwt_token_secure() called")
     if _get_user().is_anonymous is False and rbac_authentication_enabled is True:
         return func(arg)
     elif rbac_authentication_enabled is False:
         return func(arg)
     else:
         verify_jwt_in_request()
         return jwt_required(func(arg))
Пример #2
0
def handle_create_service():
    data = request.form

    name = data['name']
    description = data['description']
    charge = data['charge']

    service = Service(_get_user(), name, description, charge)
    servicesService.create(service)
    return redirect(f'{service_api_root}')
Пример #3
0
def handle_create_product():
    data = request.form

    name = data['name']
    description = data['description']
    price = data['price']

    product = Product(_get_user(), name, description, price)

    productsService.create(product)
    return redirect(f'{products_api_root}')
Пример #4
0
def handle_create_payment_detail():
    data = request.form
    
    acc_name = data['acc_name']
    bank_name = data['bank_name']
    sort_code = data['sort_code']
    acc_number = data['acc_number']

    payment_detail = PaymentDetail(_get_user(), acc_name, bank_name, sort_code, acc_number)
    paymentDetailService.create(payment_detail) 
    print("payment_detail was sucesifuly created")
    return redirect( f'{api_root}'  )
Пример #5
0
    def get(self):

        request_debug(r, logger)
        user = utils._get_user()
        user = user.dbUser
        user_id = str(user.id)
        args = cluster_list_parser.parse_args()
        page = args['pageNo']
        per_page = args['pageSize']
        result = cluster_handler.list(page_no=page,
                                      page_size=per_page,
                                      user=user)
        # result = cluster_handler.list(page_no=page, page_size=per_page, user_id=user_id)
        return make_ok_resp(data=result)
Пример #6
0
def login_user(user, remember=False, duration=None, force=False, fresh=True):
    '''
    Logs a user in. You should pass the actual user object to this. If the
    user's `is_active` property is ``False``, they will not be logged in
    unless `force` is ``True``.

    This will return ``True`` if the log in attempt succeeds, and ``False`` if
    it fails (i.e. because the user is inactive).

    :param user: The user object to log in.
    :type user: object
    :param remember: Whether to remember the user after their session expires.
        Defaults to ``False``.
    :type remember: bool
    :param duration: The amount of time before the remember cookie expires. If
        ``None`` the value set in the settings is used. Defaults to ``None``.
    :type duration: :class:`datetime.timedelta`
    :param force: If the user is inactive, setting this to ``True`` will log
        them in regardless. Defaults to ``False``.
    :type force: bool
    :param fresh: setting this to ``False`` will log in the user with a session
        marked as not "fresh". Defaults to ``True``.
    :type fresh: bool
    '''
    if not force and not user.is_active:
        return False

    user_id = getattr(user, current_app.login_manager.id_attribute)()
    session['user_id'] = user_id
    session['user_data'] = get_user_data(user)
    session['_fresh'] = fresh
    session['_id'] = current_app.login_manager._session_identifier_generator()

    if remember:
        session['remember'] = 'set'
        if duration is not None:
            try:
                # equal to timedelta.total_seconds() but works with Python 2.6
                session['remember_seconds'] = (duration.microseconds +
                                               (duration.seconds +
                                                duration.days * 24 * 3600) *
                                               10**6) / 10.0**6
            except AttributeError:
                raise Exception('duration must be a datetime.timedelta, '
                                'instead got: {0}'.format(duration))

    _request_ctx_stack.top.user = user
    user_logged_in.send(current_app._get_current_object(), user=_get_user())
    return True
Пример #7
0
def handle_create():
    data = request.form

    name = data['name']
    phone = data['phone']
    address_1 = data['address_1']
    address_2 = data['address_2']
    city = data['city']
    post_code = data['post_code']

    client = Client(_get_user(), name, phone, address_1, address_2, city,
                    post_code)
    clientService.create(client)
    print("entity was sucesifuly created")
    return redirect(f'{api_root}')
Пример #8
0
        def wrapper(*args, **kwargs):
            user = _get_user()

            if user.is_authenticated:
                # Case when accessing via UI, because cookie is set
                return func(*args, **kwargs)

            authorization = request.headers.get('Authorization')
            if not (authorization and len(authorization.split(' ')) == 2):
                return self.login_manager.unauthorized()

            access_token = authorization.split(' ')[1]

            if self.has_valid_permissions(access_token):
                return func(*args, **kwargs)

            return self.login_manager.unauthorized()
Пример #9
0
def handle_create_company():
    data = request.form

    trading_name = data['trading_name']
    contact_person = data['contact_person']
    email = data['email']
    phone = data['phone']
    address_ln_1 = data['address_ln_1']
    address_ln_2 = data['address_ln_2']
    city = data['city']
    postal_code = data['postal_code']

    company = Company(_get_user(), trading_name, contact_person, email, phone,
                      address_ln_1, address_ln_2, city, postal_code)

    companyService.create(company)
    print("company was sucesifuly created")
    return redirect(f'{api_root}')
Пример #10
0
def create():
    user: User = _get_user()
    invoice = Invoice()
    # print("\n\n\n")
    # print(user)
    # print("\n")
    # print(user.companies)
    # print("\n")
    # print(user.invoices)
    # print("\n")
    # print(user.paymentDetails)
    # print("\n")
    # print(user.services)
    # print("\n")
    # print(user.products)
    # print("\n\n\n")

    return render_template(f"{template_files_path}/create-invoice.html",
                           api_root=api_root,
                           user=user,
                           invoice=invoice)
Пример #11
0
def logout_user():
    '''
    Logs a user out. (You do not need to pass the actual user.) This will
    also clean up the remember me cookie if it exists.
    '''

    user = _get_user()

    session.pop('user_id', None)
    session.pop('user_data', None)
    session.pop('_fresh', None)

    cookie_name = current_app.config.get('REMEMBER_COOKIE_NAME', COOKIE_NAME)
    if cookie_name in request.cookies:
        session['remember'] = 'clear'
        if 'remember_seconds' in session:
            session.pop('remember_seconds')

    user_logged_out.send(current_app._get_current_object(), user=user)

    current_app.login_manager.reload_user()
    return True
Пример #12
0
    def post(self):
        user = utils._get_user()
        user = user.dbUser
        user_id = str(user.id)
        args = org_create_parser.parse_args()
        org_name = args.get('name')
        org_domain = args.get('domain')
        org_ca = args.get('ca', 'ca')
        org_peers = args.get('peers')
        org_cluster_id = args.get('cluster_id')

        if not all([org_name, org_domain, org_ca, org_peers, org_cluster_id]):
            return make_fail_resp(error='参数错误')

        cluster = ClusterModel.objects.get(id=org_cluster_id)
        if not cluster:
            return make_fail_resp(error='链不存在')

        orgs = OrgModel.objects(cluster=cluster, org_type='peer')
        if len(orgs) >= 5:
            return make_fail_resp(error='组织数量已达上限')
        for org in orgs:
            if org.name == org_name:
                # if OrgModel.objects(cluster=cluster, org_type='peer', name=org_name):
                return make_fail_resp(error='组织名重复')

        if OrganizationHandler().create(name=org_name,
                                        domain=org_domain,
                                        ca=org_ca,
                                        peers=org_peers,
                                        cluster=cluster,
                                        user=user_id):
            logger.debug("org creation successful")
            return make_ok_resp()
        else:
            logger.debug("org creation failed")
            return make_fail_resp(
                error="Failed to create org {}".format(org_name))
Пример #13
0
def handle_create():
    data = request.form

    name = data['name']
    description = data['description']
    charge = data['charge']

    invoice = Service(_get_user(), name, description, charge)
    invoiceService.create(invoice)
    print("entity was sucesifuly created")
    return redirect(f'{api_root}')


# Select Trading Name to Show on Invoice
# Select Payment details

# Invoice Effective Date

# Select services
# service subtotal
# selet products
# product sub total

# grand total
Пример #14
0
 def get_logged_in_user(self):
     logged_in_user = _get_user()
     return logged_in_user
Пример #15
0
    def login_user(
        self,
        user: User,
        remember: Optional[bool] = None,
        duration: Optional[timedelta] = None,
        force: bool = False,
        fresh: bool = True,
    ) -> bool:
        """
        Logs a user in. You should pass the actual user object to this. If the
        user's `active` property is ``False``, they will not be logged in
        unless `force` is ``True``.

        This will return ``True`` if the log in attempt succeeds, and ``False`` if
        it fails (i.e. because the user is inactive).

        :param user: The user object to log in.
        :type user: object
        :param remember: Whether to remember the user after their session expires.
            Defaults to ``False``.
        :type remember: bool
        :param duration: The amount of time before the remember cookie expires. If
            ``None`` the value set in the settings is used. Defaults to ``None``.
        :type duration: :class:`datetime.timedelta`
        :param force: If the user is inactive, setting this to ``True`` will log
            them in regardless. Defaults to ``False``.
        :type force: bool
        :param fresh: setting this to ``False`` will log in the user with a session
            marked as not "fresh". Defaults to ``True``.
        :type fresh: bool
        """
        if not user.active and not force:
            return False

        if (self.security.confirmable and not user.confirmed_at
                and not self.security.login_without_confirmation):
            return False

        session['user_id'] = getattr(user, user.Meta.pk)
        session['_fresh'] = fresh
        session['_id'] = app.login_manager._session_identifier_generator()

        if remember is None:
            remember = app.config.get('SECURITY_DEFAULT_REMEMBER_ME')
        if remember:
            session['remember'] = 'set'
            if duration is not None:
                try:
                    # equal to timedelta.total_seconds() but works with Python 2.6
                    session['remember_seconds'] = (
                        duration.microseconds +
                        (duration.seconds + duration.days * 24 * 3600) *
                        10**6) / 10.0**6
                except AttributeError:
                    raise Exception('duration must be a datetime.timedelta, '
                                    'instead got: {0}'.format(duration))

        _request_ctx_stack.top.user = user
        user_logged_in.send(app._get_current_object(), user=_get_user())
        identity_changed.send(app._get_current_object(),
                              identity=Identity(user.id))
        return True
Пример #16
0
    def post(self):
        user = utils._get_user()
        user_id = str(user.dbUser.id)
        args = user_create_parser.parse_args()
        mobile = args.get('mobile')
        email = args.get('email')
        password = args.get('password')
        org_id = args.get('org_id')
        channel_id = args.get('channel_id')
        cluster_id = args.get('cluster_id')
        is_admin = args.get('is_admin', False)

        if mobile:
            if not re.match('^1[3456789]\d{9}$', mobile):
                return {'stat': '400', 'msg': '手机号格式错误'}
        if email:
            if not re.match('^[a-zA-Z0-9_.-]+@[a-zA-Z0-9-]+(\.[a-zA-Z0-9-]+)*\.[a-zA-Z0-9]{2,6}$', email):
                return {'stat': '400', 'msg': '邮箱格式错误'}
        try:
            user = UserModel.objects.get(mobile=mobile)
            if user:
                return {'stat': "400", 'msg': "手机号已存在"}
        except Exception as exc:
            logger.error(exc)
            pass
        try:
            cluster = ClusterModel.objects.get(id=cluster_id)
            org = OrgModel.objects.get(cluster=cluster, org_type='peer',alias=org_id)
        except Exception as e:
            logger.error(e)
            return {'msg': '组织不存在', 'stat': 400}

        try:
            ChannelModel.objects.get(cluster=cluster, alias=channel_id)
        except Exception as e:
            logger.error(e)
            return {'msg': '通道不存在', 'stat': 400}

        args['password'] = User.set_password(password)
        # args['orgs'] = [org_id]
        args.pop('org_id')
        args.pop('channel_id')
        args.pop('is_admin')
        args.pop('cluster_id')
        if int(is_admin) == 1:
            role = 2
        else:
            role = 3

        try:
            new_user = UserModel(**args, orgs=[org.id], apply_stat=1, active=True, role=role)
            new_user.save()
        except Exception as exc:
            logger.error("exc %s", exc)
            return {'stat': "-1", 'msg': "存储数据库失败"}

        body = {
            "BlockchainSign": str(org.cluster.id),
            "ChannelId": channel_id,
            "OrgId": str(org_id),
            "UserId": str(new_user.id)
        }
        logger.info('add user info:{}'.format(body))
        if not send_new_user_info(str(user_id), body=body):
            new_user.delete()
            return {'stat': 400, 'msg': '添加用户失败'}

        org.update(add_to_set__users=[new_user])

        data = {
            'stat': 200,
            'msg': '成功'
        }

        return data
Пример #17
0
    def post(self):
        user = utils._get_user()
        user = user.dbUser

        body = cluster_create_parser.parse_args()
        cluster_name = body.get('cluster_name')
        network_type = body.get('network_type')
        consensus_plugin = body.get('consensus_plugin')
        domain = body.get('domain')
        channel = body.get('channel')
        orderer = body.get('orderer')
        peer_orgs = body.get('peer_orgs')
        orderer_org = body.get('orderer_org')

        if not all([cluster_name, network_type, peer_orgs, channel, domain]):
            error_msg = "参数缺失"
            logger.warning(error_msg)
            return make_fail_resp(error=error_msg, data=body)

        host_id = ''
        try:
            hosts = HostModel.objects.all()
            for host in hosts:
                if len(host.clusters) < host.capacity:
                    host_id = host.id
                    break
        except Exception as e:
            logger.error(e)
            return make_fail_resp(error='db error')

        if not host_id:
            return {'stat': 401, 'msg': '服务器已满,请联系客服'}

        if network_type not in NETWORK_TYPES:
            error_msg = "Unknown network_type={}".format(network_type)
            logger.warning(error_msg)
            return make_fail_resp()

        peer_org_list = []

        orderer_org = {
            'name': 'orderer',
            'domain': domain,
            'orderers': ['orderer']
        }

        for peer_org in peer_orgs:
            peer_org = demjson.decode(peer_org)
            if not all([peer_org.get('name'), peer_org.get('peers')]):
                return make_fail_resp(error='参数缺失', data=body)
            peer_org['peers'] = [
                'peer{}'.format(i) for i in range(int(peer_org['peers']))
            ]
            peer_org['domain'] = domain
            peer_org['ca'] = 'ca'
            peer_org_list.append(peer_org)

        cluster = ClusterModel.objects(name=cluster_name)
        if cluster:
            return make_fail_resp(error='链名重复')

        config = FabricNetworkConfig(consensus_plugin=consensus_plugin,
                                     network_type=network_type,
                                     channel=channel,
                                     orderer_org=orderer_org,
                                     peer_orgs=peer_org_list)
        config.domain = domain
        if not config.validate():
            return make_fail_resp(error="config not validated",
                                  data=config.get_data())

        if cluster_handler.create(name=cluster_name,
                                  host_id=host_id,
                                  config=config,
                                  user=user):
            logger.debug("cluster POST successfully")
            return make_ok_resp()
        else:
            logger.debug("cluster creation failed using handlder")
            return make_fail_resp(
                error="Failed to create cluster {}".format(cluster_name))
Пример #18
0
def restrict_services_api_to_logged_in_users():
    logged_in_user = _get_user()
    if logged_in_user == None or logged_in_user.is_authenticated == False:
        return redirect('/auth/login')
Пример #19
0
 def getUser2():
     user = utils._get_user()
     return jsonify(trueReturn(user.columns_to_dict(), API_SUCCESS_MSG))
Пример #20
0
            return None  # valid token, but expired
        except BadSignature:
            return None  # invalid token
        user = users[data['id']]
        return user

    def __str__(self):
        pattern = 'Пользователь: {id: >8}, администратор: {adm!s: >5}, почта: {email}'
        return pattern.format(
            id=self.id,
            email=self.email,
            adm=self.adm,
        )


current_user = LocalProxy(lambda: _get_user())


def admin_required(func):
    """
    Декоратор для представлений, проверяем, что текущий пользователь - админ, иначе запрещаем выполненеи функции
    :param func: The view function to decorate.
    :type func: function
    """
    @wraps(func)
    def decorated_view(*args, **kwargs):
        if not current_user.is_admin():
            user_unauthorized.send(current_app._get_current_object())
            flash("Необходимы права администратора для выполнения операции")
            return redirect("/")
        return func(*args, **kwargs)