def launch(self, demo):
     """
     Update records for demo launches
     :param demo: name of the launched demo
     :return:
     """
     try:
         self.cassandra_cluster.session.execute(
             self.cassandra_cluster.insert_launch_statement.bind((
                 self.today,
                 self.request_timeuuid,
                 demo,
                 self.user,
                 self.form_variables,
                 datetime.datetime.now()
             ))
         )
         self.cassandra_cluster.session.execute(
             self.cassandra_cluster.insert_demo_launch_statement.bind((
                 demo,
                 self.request_timeuuid,
                 self.user,
                 self.form_variables,
                 datetime.datetime.now()
             ))
         )
     except:
         logger.exception('Database inaccessible!')
        def __init__(self, cassandra_cluster, user, endpoint, method,
                     form_variables, get_variables, init_log):
            self.cassandra_cluster = cassandra_cluster
            self.user = user

            # https://datastax-oss.atlassian.net/browse/PYTHON-212
            self.today = datetime.datetime.combine(
                datetime.date.today(), datetime.datetime.min.time())
            self.request_timeuuid = generate_timeuuid()

            self.form_variables = _sanatize(form_variables)
            self.get_variables = _sanatize(get_variables)

            if not init_log:
                return

            # store first record of endpoint access
            try:
                self.cassandra_cluster.session.execute(
                    self.cassandra_cluster.insert_access_statement.bind(
                        (self.today, self.request_timeuuid,
                         self.request_timeuuid, self.user, 'init', endpoint,
                         method, self.form_variables, self.get_variables,
                         None)))
                self.cassandra_cluster.session.execute(
                    self.cassandra_cluster.insert_user_access_statement.bind(
                        (self.user, self.request_timeuuid,
                         self.request_timeuuid, 'init', endpoint, method,
                         self.form_variables, self.get_variables, None)))
                self.cassandra_cluster.session.execute(
                    self.cassandra_cluster.insert_last_seen_statement.bind(
                        (self.user, datetime.datetime.now())))
            except:
                logger.exception('Database inaccessible!')
        def __init__(self, cassandra_cluster, user,
                     endpoint, method, form_variables, get_variables,
                     init_log):
            self.cassandra_cluster = cassandra_cluster
            self.user = user

            # https://datastax-oss.atlassian.net/browse/PYTHON-212
            self.today = datetime.datetime.combine(datetime.date.today(),
                                                   datetime.datetime.min.time())
            self.request_timeuuid = generate_timeuuid()

            self.form_variables = _sanatize(form_variables)
            self.get_variables = _sanatize(get_variables)

            if not init_log:
                return

            # store first record of endpoint access
            try:
                self.cassandra_cluster.session.execute(
                    self.cassandra_cluster.insert_access_statement.bind((
                        self.today,
                        self.request_timeuuid,
                        self.request_timeuuid,
                        self.user,
                        'init',
                        endpoint,
                        method,
                        self.form_variables,
                        self.get_variables,
                        None
                    ))
                )
                self.cassandra_cluster.session.execute(
                    self.cassandra_cluster.insert_user_access_statement.bind((
                        self.user,
                        self.request_timeuuid,
                        self.request_timeuuid,
                        'init',
                        endpoint,
                        method,
                        self.form_variables,
                        self.get_variables,
                        None
                    ))
                )
                self.cassandra_cluster.session.execute(
                    self.cassandra_cluster.insert_last_seen_statement.bind((
                        self.user,
                        datetime.datetime.now()
                    ))
                )
            except:
                logger.exception('Database inaccessible!')
    def __init__(self, app):
        try:
            # connect to DSE cluster
            self.cluster = Cluster([app.config['DSE_CLUSTER']])
            self.session = self.cluster.connect()
            self.session.row_factory = ordered_dict_factory

            # ensure schema is created
            self.initialize_schema()

            # prepare access insert and query statements
            self.prepare_statements()
        except:
            logger.exception('Database objects not created!')
    def __init__(self, app):
        try:
            # connect to DSE cluster
            self.cluster = Cluster([app.config['DSE_CLUSTER']])
            self.session = self.cluster.connect()
            self.session.row_factory = ordered_dict_factory

            # ensure schema is created
            self.initialize_schema()

            # prepare access insert and query statements
            self.prepare_statements()
        except:
            logger.exception('Database objects not created!')
 def launch(self, demo):
     """
     Update records for demo launches
     :param demo: name of the launched demo
     :return:
     """
     try:
         self.cassandra_cluster.session.execute(
             self.cassandra_cluster.insert_launch_statement.bind(
                 (self.today, self.request_timeuuid, demo, self.user,
                  self.form_variables, datetime.datetime.now())))
         self.cassandra_cluster.session.execute(
             self.cassandra_cluster.insert_demo_launch_statement.bind(
                 (demo, self.request_timeuuid, self.user,
                  self.form_variables, datetime.datetime.now())))
     except:
         logger.exception('Database inaccessible!')
Example #7
0
def request_password():
    access_logger = current_app.cluster.get_access_logger(request)
    if request.method == 'POST':
        safe_email = False
        try:
            safe_email = auth.is_valid_domain(request.form['email'],
                                              'datastax.com')

            if not safe_email:
                user_record = current_app.cluster.get_user(
                    request.form['email'])
                if user_record and \
                                user_record[0]['user'] == request.form['email']:
                    safe_email = user_record[0]['user']
        except:
            logger.exception('Email deemed unsafe!')
        if not safe_email:
            msg(access_logger, 'Error occurred when validating email address. '
                               'Please contact administrator.', 'error')
            return render_template('login.jinja2')

        password = auth.create_new_password()
        current_app.cluster.set_password(safe_email,
                                         auth.hash(password,
                                                   current_app.secret_key))

        body = 'Your email and password is: {0} / {1}\n\n' \
               'Feel free to bookmark this personalized address: ' \
               'http://demos.datastax.com:5000/login?email={0}'
        body = body.format(safe_email, password)
        message = Message(subject='DataStax Demo Portal Authentication',
                          recipients=[safe_email],
                          body=body)
        try:
            current_app.mail.send(message)
        except:
            logger.exception('Error sending email.')
            msg(access_logger, 'Error occurred when sending email. '
                               'Please contact administrator.', 'error')
            return render_template('login.jinja2')

        msg(access_logger, 'Password emailed.')
        return redirect('%s?email=%s' % (url_for('authentication_api.login'),
                                         safe_email))
    else:
        return render_template('login.jinja2')
 def update(self, level, message):
     """
     Update record with Flask flash messages
     :param message: flash message
     :return:
     """
     try:
         self.cassandra_cluster.session.execute(
             self.cassandra_cluster.insert_access_statement.bind(
                 (self.today, self.request_timeuuid,
                  generate_timeuuid(), self.user, level, None, None,
                  None, None, message)))
         self.cassandra_cluster.session.execute(
             self.cassandra_cluster.insert_user_access_statement.bind(
                 (self.user, self.request_timeuuid, generate_timeuuid(),
                  level, None, None, None, None, message)))
     except:
         logger.exception('Database inaccessible!')
 def update(self, level, message):
     """
     Update record with Flask flash messages
     :param message: flash message
     :return:
     """
     try:
         self.cassandra_cluster.session.execute(
             self.cassandra_cluster.insert_access_statement.bind((
                 self.today,
                 self.request_timeuuid,
                 generate_timeuuid(),
                 self.user,
                 level,
                 None,
                 None,
                 None,
                 None,
                 message
             ))
         )
         self.cassandra_cluster.session.execute(
             self.cassandra_cluster.insert_user_access_statement.bind((
                 self.user,
                 self.request_timeuuid,
                 generate_timeuuid(),
                 level,
                 None,
                 None,
                 None,
                 None,
                 message
             ))
         )
     except:
         logger.exception('Database inaccessible!')
Example #10
0
def ctool():
    if 'email' not in session:
        return redirect(url_for('authentication_api.login'))
    access_logger = current_app.cluster.get_access_logger(request,
                                                          session['email'])

    # only process form if form has been submitted
    if request.form:
        access_logger.launch('ctool')

        # make a mutable dict copy
        postvars = request.form.copy().to_dict()

        # ensure jQuery doesn't fail
        if not postvars['clustername']:
            msg(access_logger, 'Clustername must be set', 'error')
            return render_template('ctool.jinja2')

        postvars = ctoolutils.process(postvars, session)

        # ensure jQuery doesn't fail
        if postvars['num_nodes'] < 1:
            msg(access_logger, 'Must launch at least one node', 'error')
            return render_template('ctool.jinja2')

        try:
            response = ctoolutils.launch(access_logger, postvars)
            if response:
                return render_template(
                    ctoolutils.error_handling(access_logger, response,
                                              postvars, 'launch'))

            reservation_id = ec2.find_reservation_id_by_tag('cluster_name',
                                                            postvars[
                                                                'full_name'])

            response = ctoolutils.install(access_logger, postvars,
                                          reservation_id)
            if response:
                return render_template(
                    ctoolutils.error_handling(access_logger, response,
                                              postvars, 'install'))

            response = ctoolutils.install_opscenter(access_logger, postvars,
                                                    reservation_id)
            if response:
                return render_template(
                    ctoolutils.error_handling(access_logger, response,
                                              postvars, 'install'))

            response = ctoolutils.start(access_logger, postvars, reservation_id)
            if response:
                return render_template(
                    ctoolutils.error_handling(access_logger, response,
                                              postvars, 'start'))

            response = ctoolutils.start_opscenter(access_logger, postvars,
                                                  reservation_id)
            if response:
                return render_template(
                    ctoolutils.error_handling(access_logger, response,
                                              postvars, 'start'))

            response = ctoolutils.start_agent(access_logger, postvars,
                                              reservation_id)
            if response:
                return render_template(
                    ctoolutils.error_handling(access_logger, response,
                                              postvars, 'start'))

            ec2.tag_reservation(reservation_id, 'status', 'Complete.')
            return redirect('/')
        except:
            logger.exception('Exception seen on /ctool:')
            msg(access_logger, traceback.format_exc(), 'debug')
            return render_template(
                ctoolutils.error_handling(access_logger,'Logic exception.',
                                          postvars, '/ctool'))

    return render_template('ctool.jinja2')