Exemple #1
0
def create_and_login_user(org, name, email=None, picture=None):
    try:
        user_object = models.User.get_by_name_and_org(name, org)
        if user_object.name != name:
            logger.debug("Updating user name (%r -> %r)", user_object.name,
                         name)
            user_object.name = name
            models.db.session.commit()
    except NoResultFound:
        logger.debug("Creating user object (%r)", name)
        if email is not None:
            user_object = models.User(org=org,
                                      name=name,
                                      email=email,
                                      password_ldap=False,
                                      _profile_image_url=picture,
                                      group_ids=[org.default_group.id])
        else:
            email = name + '@adotmob_ldap.com'
            user_object = models.User(org=org,
                                      name=name,
                                      email=email,
                                      password_ldap=True,
                                      _profile_image_url=picture,
                                      group_ids=[org.default_group.id])
        models.db.session.add(user_object)
        models.db.session.commit()
    print user_object.to_dict()
    login_user(user_object, remember=True)
    return user_object
Exemple #2
0
    def post(self):
        req = request.get_json(force=True)
        require_fields(req, ('name', 'email'))

        user = models.User(org=self.current_org,
                           name=req['name'],
                           email=req['email'],
                           group_ids=[self.current_org.default_group.id])

        try:
            models.db.session.add(user)
            models.db.session.commit()
        except IntegrityError as e:
            if "email" in e.message:
                abort(400, message='Email already taken.')

            abort(500)

        self.record_event({
            'action': 'create',
            'timestamp': int(time.time()),
            'object_id': user.id,
            'object_type': 'user'
        })

        if request.args.get('no_invite') is not None:
            invite_url = invite_link_for_user(user)
        else:
            invite_url = invite_user(self.current_org, self.current_user, user)

        d = user.to_dict()
        d['invite_link'] = invite_url

        return d
Exemple #3
0
    def post(self):
        req = request.get_json(force=True)
        require_fields(req, ('name', 'email'))

        if '@' not in req['email']:
            abort(400, message='Bad email address.')
        name, domain = req['email'].split('@', 1)

        # if domain.lower() in blacklist or domain.lower() == 'qq.com':
        if domain.lower() in blacklist:
            abort(400, message='Bad email address.')

        user = models.User(org=self.current_org,
                           name=req['name'],
                           email=req['email'],
                           is_invitation_pending=True,
                           group_ids=[self.current_org.default_group.id])

        try:
            models.db.session.add(user)
            models.db.session.commit()
        except IntegrityError as e:
            if "email" in e.message:
                abort(400, message='Email already taken.')
            abort(500)

        self.record_event({
            'action': 'create',
            'object_id': user.id,
            'object_type': 'user'
        })

        should_send_invitation = 'no_invite' not in request.args
        return invite_user(self.current_org, self.current_user, user, send_email=should_send_invitation)
Exemple #4
0
def invite(email,
           name,
           inviter_email,
           groups,
           is_admin=False,
           organization='default'):
    """
    Sends an invitation to the given NAME and EMAIL from INVITER_EMAIL.
    """
    org = models.Organization.get_by_slug(organization)
    groups = build_groups(org, groups, is_admin)
    try:
        user_from = models.User.get_by_email_and_org(inviter_email, org)
        user = models.User(org=org, name=name, email=email, groups=groups)

        try:
            user.save()
            invite_url = invite_user(org, user_from, user)
            print "An invitation was sent to [%s] at [%s]." % (name, email)
        except IntegrityError as e:
            if "email" in e.message:
                print "Cannot invite. User already exists [%s]" % email
            else:
                print e
    except models.User.DoesNotExist:
        print "The inviter [%s] was not found." % inviter_email
def create(email,
           name,
           groups,
           is_admin=False,
           google_auth=False,
           password=None,
           organization='default'):
    """
    Create user EMAIL with display name NAME.
    """
    print("Creating user (%s, %s) in organization %s..." %
          (email, name, organization))
    print("Admin: %r" % is_admin)
    print("Login with Google Auth: %r\n" % google_auth)

    org = models.Organization.get_by_slug(organization)
    groups = build_groups(org, groups, is_admin)

    user = models.User(org=org, email=email, name=name, group_ids=groups)
    if not password and not google_auth:
        password = prompt("Password",
                          hide_input=True,
                          confirmation_prompt=True)
    if not google_auth:
        user.hash_password(password)

    try:
        models.db.session.add(user)
        models.db.session.commit()
    except Exception as e:
        print("Failed creating user: %s" % e.message)
        exit(1)
Exemple #6
0
 def post(self):
     json = request.get_json(force=True)
     u = models.User(name=json['name'],
                     email=json["email"],
                     groups=json["groups"])
     u.save()
     return u.to_dict()
def invite(email,
           name,
           inviter_email,
           groups,
           is_admin=False,
           organization='default'):
    """
    Sends an invitation to the given NAME and EMAIL from INVITER_EMAIL.
    """
    org = models.Organization.get_by_slug(organization)
    groups = build_groups(org, groups, is_admin)
    try:
        user_from = models.User.get_by_email_and_org(inviter_email, org)
        user = models.User(org=org, name=name, email=email, group_ids=groups)
        models.db.session.add(user)
        try:
            models.db.session.commit()
            invite_user(org, user_from, user)
            print("An invitation was sent to [%s] at [%s]." % (name, email))
        except IntegrityError as e:
            if "email" in e.message:
                print("Cannot invite. User already exists [%s]" % email)
            else:
                print(e)
    except NoResultFound:
        print("The inviter [%s] was not found." % inviter_email)
Exemple #8
0
def create(email,
           name,
           groups,
           is_admin=False,
           google_auth=False,
           password=None):
    print "Creating user (%s, %s)..." % (email, name)
    print "Admin: %r" % is_admin
    print "Login with Google Auth: %r\n" % google_auth
    if isinstance(groups, basestring):
        groups = groups.split(',')
        groups.remove('')  # in case it was empty string

    if is_admin:
        groups += ['admin']

    user = models.User(email=email, name=name, groups=groups)
    if not google_auth:
        password = password or prompt_pass("Password")
        user.hash_password(password)

    try:
        user.save()
    except Exception, e:
        print "Failed creating user: %s" % e.message
Exemple #9
0
def create_and_login_user(org, name, email, picture=None):
    try:
        user_object = models.User.get_by_email_and_org(email, org)
        if user_object.is_disabled:
            return None
        if user_object.is_invitation_pending:
            user_object.is_invitation_pending = False
            models.db.session.commit()
        if user_object.name != name:
            logger.debug("Updating user name (%r -> %r)", user_object.name,
                         name)
            user_object.name = name
            models.db.session.commit()
    except NoResultFound:
        logger.debug("Creating user object (%r)", name)
        user_object = models.User(
            org=org,
            name=name,
            email=email,
            is_invitation_pending=False,
            _profile_image_url=picture,
            group_ids=[org.default_group.id],
        )
        models.db.session.add(user_object)
        models.db.session.commit()

    login_user(user_object, remember=True)

    return user_object
Exemple #10
0
    def post(self):
        req = request.get_json(force=True)
        require_fields(req, ('name', 'email'))

        user = models.User(org=self.current_org,
                           name=req['name'],
                           email=req['email'],
                           is_invitation_pending=False,
                           group_ids=[])

        user.hash_password('Abcd1234')

        try:
            models.db.session.add(user)
            models.db.session.commit()
        except IntegrityError as e:
            if "email" in e.message:
                abort(400, message='Username already taken.')
            abort(500)

        self.record_event({
            'action': 'create',
            'object_id': user.id,
            'object_type': 'user'
        })

        should_send_invitation = 'no_invite' not in request.args
        return invite_user(self.current_user,
                           user,
                           send_email=should_send_invitation)
Exemple #11
0
    def post(self):
        req = request.get_json(force=True)
        require_fields(req, ("name", "email"))

        if "@" not in req["email"]:
            abort(400, message="非法的电子邮箱。")
        require_allowed_email(req["email"])

        user = models.User(
            org=self.current_org,
            name=req["name"],
            email=req["email"],
            is_invitation_pending=True,
            group_ids=[self.current_org.default_group.id],
        )

        try:
            models.db.session.add(user)
            models.db.session.commit()
        except IntegrityError as e:
            if "email" in str(e):
                abort(400, message="电子邮箱已占用。")
            abort(500)

        self.record_event(
            {"action": "create", "object_id": user.id, "object_type": "user"}
        )

        should_send_invitation = "no_invite" not in request.args
        return invite_user(
            self.current_org, self.current_user, user, send_email=should_send_invitation
        )
Exemple #12
0
    def post(self):
        # TODO: send invite.
        req = request.get_json(force=True)
        require_fields(req, ('name', 'email', 'password'))

        user = models.User(org=self.current_org, name=req['name'], email=req['email'],
                           groups=[self.current_org.default_group.id])
        user.hash_password(req['password'])

        try:
            user.save()
        except IntegrityError as e:
            if "email" in e.message:
                abort(400, message='Email already taken.')

            abort(500)

        self.record_event({
            'action': 'create',
            'timestamp': int(time.time()),
            'object_id': user.id,
            'object_type': 'user'
        })

        return user.to_dict()
Exemple #13
0
def create(email, name, groups, is_admin=False, google_auth=False, password=None):
    print "Creating user (%s, %s)..." % (email, name)
    print "Admin: %r" % is_admin
    print "Login with Google Auth: %r\n" % google_auth

    org = models.Organization.get_by_slug('default')
    if isinstance(groups, basestring):
        groups= groups.split(',')
        groups.remove('') # in case it was empty string
        groups = [int(g) for g in groups]

    if groups is None:
        groups = [models.Group.get(models.Group.name=="default", models.Group.org==org).id]

    if is_admin:
        groups += [models.Group.get(models.Group.name=="admin", models.Group.org==org).id]

    user = models.User(org=org, email=email, name=name, groups=groups)
    if not google_auth:
        password = password or prompt_pass("Password")
        user.hash_password(password)

    try:
        user.save()
    except Exception, e:
        print "Failed creating user: %s" % e.message
Exemple #14
0
    def post(self):
        req = request.get_json(force=True)
        require_fields(req, ("name", "email"))

        if "@" not in req["email"]:
            abort(400, message="Bad email address.")
        name, domain = req["email"].split("@", 1)

        if domain.lower() in blacklist or domain.lower() == "qq.com":
            abort(400, message="Bad email address.")

        user = models.User(
            org=self.current_org,
            name=req["name"],
            email=req["email"],
            is_invitation_pending=True,
            group_ids=[self.current_org.default_group.id],
        )

        try:
            models.db.session.add(user)
            models.db.session.commit()
        except IntegrityError as e:
            if "email" in str(e):
                abort(400, message="Email already taken.")
            abort(500)

        self.record_event(
            {"action": "create", "object_id": user.id, "object_type": "user"}
        )

        should_send_invitation = "no_invite" not in request.args
        return invite_user(
            self.current_org, self.current_user, user, send_email=should_send_invitation
        )
Exemple #15
0
 def record_event(self, options):
     us = models.User()
     us.id = 1
     us.email = "*****@*****.**"
     us.name = "admin.anonymous"
     if (type(self.current_user) != models.AnonymousUser):
         record_event(self.current_org, self.current_user, options)
     else:
         record_event(self.current_org, us, options)
Exemple #16
0
def create_root(email,
                name,
                google_auth=False,
                password=None,
                organization="default"):
    """
    Create root user.
    """
    print("Creating root user (%s, %s) in organization %s..." %
          (email, name, organization))
    print("Login with Google Auth: %r\n" % google_auth)

    user = models.User.query.filter(models.User.email == email).first()
    if user is not None:
        print("User [%s] is already exists." % email)
        exit(1)

    slug = "default"
    default_org = models.Organization.query.filter(
        models.Organization.slug == slug).first()
    if default_org is None:
        default_org = models.Organization(name=organization,
                                          slug=slug,
                                          settings={})

    admin_group = models.Group(
        name="admin",
        permissions=["admin", "super_admin"],
        org=default_org,
        type=models.Group.BUILTIN_GROUP,
    )
    default_group = models.Group(
        name="default",
        permissions=models.Group.DEFAULT_PERMISSIONS,
        org=default_org,
        type=models.Group.BUILTIN_GROUP,
    )

    models.db.session.add_all([default_org, admin_group, default_group])
    models.db.session.commit()

    user = models.User(
        org=default_org,
        email=email,
        name=name,
        group_ids=[admin_group.id, default_group.id],
    )
    if not google_auth:
        user.hash_password(password)

    try:
        models.db.session.add(user)
        models.db.session.commit()
    except Exception as e:
        print("Failed creating root user: %s" % e)
        exit(1)
Exemple #17
0
def create(email, name, groups, is_admin=False, google_auth=False, password=None, organization='default'):
    print "Creating user (%s, %s) in organization %s..." % (email, name, organization)
    print "Admin: %r" % is_admin
    print "Login with Google Auth: %r\n" % google_auth

    org = models.Organization.get_by_slug(organization)
    groups = build_groups(org, groups, is_admin)

    user = models.User(org=org, email=email, name=name, groups=groups)
    if not google_auth:
        password = password or prompt_pass("Password")
        user.hash_password(password)

    try:
        user.save()
    except Exception, e:
        print "Failed creating user: %s" % e.message
Exemple #18
0
def create_and_login_user(org, name, email):
    try:
        user_object = models.User.get_by_email_and_org(email, org)
        if user_object.name != name:
            logger.debug("Updating user name (%r -> %r)", user_object.name,
                         name)
            user_object.name = name
            models.db.session.commit()
    except NoResultFound:
        logger.debug("Creating user object (%r)", name)
        user_object = models.User(org=org,
                                  name=name,
                                  email=email,
                                  group_ids=[org.default_group.id])
        models.db.session.add(user_object)

    login_user(user_object, remember=True)

    return user_object
Exemple #19
0
    def get(self, dashboard_slug=None):
        """
        Retrieves a dashboard.

        :qparam string slug: Slug of dashboard to retrieve.

        .. _dashboard-response-label:

        :>json number id: Dashboard ID
        :>json string name:
        :>json string slug:
        :>json number user_id: ID of the dashboard creator
        :>json string created_at: ISO format timestamp for dashboard creation
        :>json string updated_at: ISO format timestamp for last dashboard modification
        :>json number version: Revision number of dashboard
        :>json boolean dashboard_filters_enabled: Whether filters are enabled or not
        :>json boolean is_archived: Whether this dashboard has been removed from the index or not
        :>json boolean is_draft: Whether this dashboard is a draft or not.
        :>json array layout: Array of arrays containing widget IDs, corresponding to the rows and columns the widgets are displayed in
        :>json array widgets: Array of arrays containing :ref:`widget <widget-response-label>` data

        .. _widget-response-label:

        Widget structure:

        :>json number widget.id: Widget ID
        :>json number widget.width: Widget size
        :>json object widget.options: Widget options
        :>json number widget.dashboard_id: ID of dashboard containing this widget
        :>json string widget.text: Widget contents, if this is a text-box widget
        :>json object widget.visualization: Widget contents, if this is a visualization widget
        :>json string widget.created_at: ISO format timestamp for widget creation
        :>json string widget.updated_at: ISO format timestamp for last widget modification
        dashboard = get_object_or_404(models.Dashboard.get_by_slug_and_org, dashboard_slug, self.current_org)
        response = dashboard.to_dict(with_widgets=True, user=self.current_user)

        api_key = models.ApiKey.get_by_object(dashboard)
        if api_key:
            response['public_url'] = url_for('redash.public_dashboard', token=api_key.api_key, org_slug=self.current_org.slug, _external=True)
            response['api_key'] = api_key.api_key

        response['can_edit'] = can_modify(dashboard, self.current_user)
"""
        dashboard = get_object_or_404(models.Dashboard.get_by_slug_and_org, dashboard_slug, models.Organization)
        us= models.User()
        us.id =1
        us.email="*****@*****.**"
        us.name="admin"
        m_list=models.MutableList()
        m_list.append(1)
        m_list.append(2)
        us.group_ids=m_list
        us._profile_image_url= "https://www.gravatar.com/avatar/b8e8fe9f3c0bd7e69d86d52033f27460?s=40&d=identicon"
        us.updated_at= datetime.strptime('2018-6-2 18:19:59', '%Y-%m-%d %H:%M:%S')
        us.created_at= datetime.strptime('2018-6-1 18:19:59', '%Y-%m-%d %H:%M:%S')
        if(type(self.current_user)!= models.AnonymousUser):
           response =  dashboard.to_dict(with_widgets=True, user=self.current_user)
           response['can_edit'] =  can_modify(dashboard, self.current_user)
        else:
           response = dashboard.to_dict(with_widgets=True, user=us)
           response['can_edit'] =  True
        api_key = models.ApiKey.get_by_object(dashboard)
        if api_key:
            response['public_url'] = url_for('redash.public_dashboard', token=api_key.api_key, org_slug=self.current_org.slug, _external=True)
            response['api_key'] = api_key.api_key

        return response