Ejemplo n.º 1
0
def login():
    error = None
    if request.method == 'POST':
        user = controls.get_user_info(request.form['username'])
        if len(user) <= 0:
            error = 'Invalid username'
        elif request.form['password'] != user['password']:
            error = 'Invalid password' 
        else:
            session['logged_in'] = True
            session['username'] = request.form['username']
            session['first_name'] = user['first_name']
            session['last_name'] = user['last_name']
            # CHECK IF THIS HAS BEEN SET YET
            if user['shard_id'] is not None and len(user['shard_id']) > 0: 
                session['shard_id'] = user['shard_id']
            if user['auth_token'] is not None and len(user['auth_token']) > 0:
                session['auth_token'] = user['auth_token']
            if user['is_admin'] is not None and user['is_admin'] > 0:
                session['admin'] = True
            flash('Successfully Logged In')
            return redirect(url_for('index'))
    else:
        if session.get('logged_in'):
            return redirect(url_for('index'))
    return render_template('login.html', error=error)
Ejemplo n.º 2
0
def login():
    error = None
    if request.method == 'POST':
        user = controls.get_user_info(request.form['username'])
        if len(user) <= 0:
            error = 'Invalid username'
        elif request.form['password'] != user['password']:
            error = 'Invalid password'
        else:
            session['logged_in'] = True
            session['username'] = request.form['username']
            session['first_name'] = user['first_name']
            session['last_name'] = user['last_name']
            # CHECK IF THIS HAS BEEN SET YET
            if user['shard_id'] is not None and len(user['shard_id']) > 0:
                session['shard_id'] = user['shard_id']
            if user['auth_token'] is not None and len(user['auth_token']) > 0:
                session['auth_token'] = user['auth_token']
            if user['is_admin'] is not None and user['is_admin'] > 0:
                session['admin'] = True
            flash('Successfully Logged In')
            return redirect(url_for('index'))
    else:
        if session.get('logged_in'):
            return redirect(url_for('index'))
    return render_template('login.html', error=error)
Ejemplo n.º 3
0
def settings():
    if request.method == 'GET':
        # GET USER INFO FOR SETTINGS
        user = controls.get_user_info(session.get('username'))
        if not user:
            return redirect(url_for('logout'))
        authorized_users = controls.get_authorized_users()
        lead = controls.get_lead(session.get('username'))
        if len(lead) == 0:
            lead={'first_name':'', 'last_name':'', 'username':''}
        else:
            lead=lead[0]
        return render_template('settings.html', authorized_users = authorized_users, lead=lead['username'], user=user)   
    elif request.method== 'POST':
        # UPDATE USER INFO WITH: ALL VALUES FROM THE FORM
        lead_id = request.form['lead'] if request.form['lead'] != 'None' else None
        payload ={'first_name':request.form['first_name'],
                  'last_name':request.form['last_name'],
                  'lead_id':lead_id}
        if request.form['password'] != '':
            payload['password']=request.form['password']
        if 'auth' in request.form:
            payload['authorized']=0
            payload['auth_token']=None
            session.pop('shard_id')
            session.pop('auth_token')
            session['authorized'] = 0
        payload['use_email'] = request.form['use_email']
        #payload['use_email'] = 1 if 'use_email' in request.form else 0
        controls.update_user(session.get('username'), **payload)
        flash('Settings Updated Successfully')
        session['first_name'] = request.form['first_name']
        session['last_name'] = request.form['last_name']
        return redirect(url_for('settings', lead=lead_id))
Ejemplo n.º 4
0
def admin():
    """used to administrate the users of the system"""
    if request.method == 'GET':
        # SELECT ALL USERS, ADMIN_USERS, AND LEAD ID
        users = controls.get_users_info()
        # GET LEAD FIRST / LAST BASED ON lead_id
        for user in users:
            # RETURNS A JSON ObJECT OF USERNAME, FIRST AND LAST
            lead = controls.get_lead(user['username'])
            if len(lead) > 0:
                user['lead_first'] = lead['first_name']
                user['lead_last'] = lead['last_name']
        return render_template('admin.html', users=users)
    elif request.method == 'POST':
        users = request.form.getlist('user')
        action = request.form['action']
        for user in users:
            if action == 'delete':
                controls.delete_user(user)
            elif action == 'admin':
                controls.update_user(user, is_admin=1)
            elif action == 'noadmin':
                controls.update_user(user, is_admin=0)
            elif action == 'auth':
                controls.update_user(user,
                                     auth_token=None,
                                     shard_id=None,
                                     authorized=0)
                session['authorized'] = 0
                session.pop('auth_token')
                session.pop('shard_id')
            elif action == 'pwd':
                controls.update_user(user, password='******')
        return redirect(url_for('admin'))
Ejemplo n.º 5
0
def admin():
    """used to administrate the users of the system"""
    if request.method == 'GET':
        # SELECT ALL USERS, ADMIN_USERS, AND LEAD ID
        users = controls.get_users_info()
        # GET LEAD FIRST / LAST BASED ON lead_id
        for user in users:
            # RETURNS A JSON ObJECT OF USERNAME, FIRST AND LAST 
            lead = controls.get_lead(user['username'])
            if len(lead) > 0:
                user['lead_first'] = lead['first_name']
                user['lead_last'] = lead['last_name']
        return render_template('admin.html', users=users)
    elif request.method == 'POST':
        users = request.form.getlist('user')
        action = request.form['action']
        for user in users:
            if action == 'delete':
                controls.delete_user(user)
            elif action == 'admin':
                controls.update_user(user, is_admin=1)
            elif action == 'noadmin':
                controls.update_user(user, is_admin=0)
            elif action == 'auth':
                controls.update_user(user, auth_token=None, shard_id=None, authorized=0)
                session['authorized'] = 0
                session.pop('auth_token')
                session.pop('shard_id')
            elif action == 'pwd':
                controls.update_user(user, password='******')
        return redirect(url_for('admin'))
Ejemplo n.º 6
0
def auth_start():
    """Makes a request to Evernote for the request token then redirects the
    user to Evernote to authorize the application using the request token.

    After authorizing, the user will be redirected back to auth_finish()."""
    #CHECK SHARD INFO
    client = get_oauth_client()

    # Make the request for the temporary credentials (Request Token)
    callback_ip = "%s:%d" % (app.config.get('IP'), app.config.get('PORT'))
    callback_url = 'http://%s%s' % (callback_ip, url_for('auth_finish'))
    request_url = '%s?oauth_callback=%s' % (app.config['EN_REQUEST_TOKEN_URL'],
                                            urllib.quote(callback_url,
                                                         safe=":/"))

    resp, content = client.request(request_url, 'GET')

    if resp['status'] != '200':
        raise Exception('Invalid response %s.' % resp['status'])

    request_token = dict(urlparse.parse_qsl(content))

    # Save the request token information for later
    session['oauth_token'] = request_token['oauth_token']
    session['oauth_token_secret'] = request_token['oauth_token_secret']

    # Redirect the user to the Evernote authorization URL
    return redirect(
        '%s?oauth_token=%s' %
        (app.config['EN_AUTHORIZE_URL'], urllib.quote(session['oauth_token'])))
Ejemplo n.º 7
0
def auth_start():
    """Makes a request to Evernote for the request token then redirects the
    user to Evernote to authorize the application using the request token.

    After authorizing, the user will be redirected back to auth_finish()."""
    #CHECK SHARD INFO
    client = get_oauth_client()

    # Make the request for the temporary credentials (Request Token)
    callback_ip = "%s:%d" %(app.config.get('IP'), app.config.get('PORT'))
    callback_url = 'http://%s%s' % (callback_ip, url_for('auth_finish'))
    request_url = '%s?oauth_callback=%s' % (app.config['EN_REQUEST_TOKEN_URL'],
        urllib.quote(callback_url, safe=":/"))

    resp, content = client.request(request_url, 'GET')

    if resp['status'] != '200':
        raise Exception('Invalid response %s.' % resp['status'])

    request_token = dict(urlparse.parse_qsl(content))

    # Save the request token information for later
    session['oauth_token'] = request_token['oauth_token']
    session['oauth_token_secret'] = request_token['oauth_token_secret']

    # Redirect the user to the Evernote authorization URL
    return redirect('%s?oauth_token=%s' % (app.config['EN_AUTHORIZE_URL'],
        urllib.quote(session['oauth_token'])))
Ejemplo n.º 8
0
def settings():
    if request.method == 'GET':
        # GET USER INFO FOR SETTINGS
        user = controls.get_user_info(session.get('username'))
        if not user:
            return redirect(url_for('logout'))
        authorized_users = controls.get_authorized_users()
        lead = controls.get_lead(session.get('username'))
        if len(lead) == 0:
            lead = {'first_name': '', 'last_name': '', 'username': ''}
        else:
            lead = lead[0]
        return render_template('settings.html',
                               authorized_users=authorized_users,
                               lead=lead['username'],
                               user=user)
    elif request.method == 'POST':
        # UPDATE USER INFO WITH: ALL VALUES FROM THE FORM
        lead_id = request.form[
            'lead'] if request.form['lead'] != 'None' else None
        payload = {
            'first_name': request.form['first_name'],
            'last_name': request.form['last_name'],
            'lead_id': lead_id
        }
        if request.form['password'] != '':
            payload['password'] = request.form['password']
        if 'auth' in request.form:
            payload['authorized'] = 0
            payload['auth_token'] = None
            session.pop('shard_id')
            session.pop('auth_token')
            session['authorized'] = 0
        payload['use_email'] = request.form['use_email']
        #payload['use_email'] = 1 if 'use_email' in request.form else 0
        controls.update_user(session.get('username'), **payload)
        flash('Settings Updated Successfully')
        session['first_name'] = request.form['first_name']
        session['last_name'] = request.form['last_name']
        return redirect(url_for('settings', lead=lead_id))
Ejemplo n.º 9
0
def upload():
    # THIS USES THE NEW_NOTE CALL, so going to move that to en_lib
    if request.method=='POST':
        upload_file = request.files['file']
        if upload_file and lib.allowed_file(upload_file.filename, app.config['ALLOWED_EXTENSIONS']):
            filename = upload_file.filename
            content = upload_file.stream.getvalue()
            # CHECK IF THIS NOTE WAS EXPORTED BY THE DESKTOP CLIENT AND IF SO STRIP OUT COMPONENTS
            pattern = re.compile('(.*?!\[CDATA\[)(.*?<\/en-note>)(.*?\]\]><\/content>.*)', re.DOTALL)
            m = pattern.search(content)
            if m is not None and len(m.group(2)) > 0:
                content = m.group(2) 
            flash(new_note(content=content, title=upload_file.filename))
            with open(os.path.join(app.config['UPLOADED_FILE_DEST'], filename), 'w') as f:
                f.write(content)
        return redirect(url_for('index'))
    else:
        return render_template('upload.html') 
Ejemplo n.º 10
0
def reports():
    """ 
    Creates Report view of all uploaded xml files according to month and release
    """
    # THIS DATA PULLED FROM FILE STRUCTURE
    uploads = app.config['UPLOADED_FILE_DEST']
    teams = os.walk(uploads).next()[1]
    months = {}
    for team in teams:
        months[team] = os.walk(os.path.join(uploads, team)).next()[1]
    #projects = ['360', 'control_panel', 'site_intercept']
    #months = {'360':['04','06'], 'control_panel':['04', '05','06'], 'site_intercept':['04']}
    if request.method == 'POST':
        team = int(request.form['project'])
        month = int(request.form['month'])
        path = os.path.join(teams[team], months[teams[team]][month])
        return redirect('reports/report_view/%s' %path)
        # GET XML Elements from PATH to create an array of XML that can be passed into the client. 
        # return render_template('reports/report_view.html', xml_list = xml_list)
    return render_template('reports/report_index.html', teams = teams, months=months)
Ejemplo n.º 11
0
def register_user():
    """Create a user in the database"""
    error = None
    # REST CALLS
    authorized_users = controls.get_authorized_users()
    if request.method == 'POST':
        if len(request.form['username'].strip()) <= 0:
            error = 'Username cannot be blank'
        else:
            if controls.user_exists(request.form['username'].strip()):
                error = 'Username already exists'
            elif len(request.form['password'].strip()) <= 0:
                error = 'Password cannot be blank'
            elif not  lib.valid_email(request.form['email_address']):
                error='Invalid Email Address'
            else:
                if request.form['lead'] == 'None':
                    lead = None
                else:
                    lead = request.form['lead']
                if request.form['use_email'] == 'True':
                    use_email = 1
                else:
                    use_email = 0
                controls.create_user(request.form['username'], 
                                     request.form['password'],
                                     request.form['first_name'],
                                     request.form['last_name'],
                                     request.form['email_address'],
                                     lead,
                                     use_email)
                flash("New User was successfully registered")
                session['logged_in'] = True
                session['first_name'] = request.form['first_name']
                session['last_name'] = request.form['last_name']
                session['username'] = request.form['username']
                return redirect(url_for('login'))
    return render_template('register.html', 
                           error=error, 
                           authorized_users=authorized_users)
Ejemplo n.º 12
0
def upload():
    # THIS USES THE NEW_NOTE CALL, so going to move that to en_lib
    if request.method == 'POST':
        upload_file = request.files['file']
        if upload_file and lib.allowed_file(upload_file.filename,
                                            app.config['ALLOWED_EXTENSIONS']):
            filename = upload_file.filename
            content = upload_file.stream.getvalue()
            # CHECK IF THIS NOTE WAS EXPORTED BY THE DESKTOP CLIENT AND IF SO STRIP OUT COMPONENTS
            pattern = re.compile(
                '(.*?!\[CDATA\[)(.*?<\/en-note>)(.*?\]\]><\/content>.*)',
                re.DOTALL)
            m = pattern.search(content)
            if m is not None and len(m.group(2)) > 0:
                content = m.group(2)
            flash(new_note(content=content, title=upload_file.filename))
            with open(os.path.join(app.config['UPLOADED_FILE_DEST'], filename),
                      'w') as f:
                f.write(content)
        return redirect(url_for('index'))
    else:
        return render_template('upload.html')
Ejemplo n.º 13
0
def reports():
    """ 
    Creates Report view of all uploaded xml files according to month and release
    """
    # THIS DATA PULLED FROM FILE STRUCTURE
    uploads = app.config['UPLOADED_FILE_DEST']
    teams = os.walk(uploads).next()[1]
    months = {}
    for team in teams:
        months[team] = os.walk(os.path.join(uploads, team)).next()[1]
    #projects = ['360', 'control_panel', 'site_intercept']
    #months = {'360':['04','06'], 'control_panel':['04', '05','06'], 'site_intercept':['04']}
    if request.method == 'POST':
        team = int(request.form['project'])
        month = int(request.form['month'])
        path = os.path.join(teams[team], months[teams[team]][month])
        return redirect('reports/report_view/%s' % path)
        # GET XML Elements from PATH to create an array of XML that can be passed into the client.
        # return render_template('reports/report_view.html', xml_list = xml_list)
    return render_template('reports/report_index.html',
                           teams=teams,
                           months=months)
Ejemplo n.º 14
0
def register_user():
    """Create a user in the database"""
    error = None
    # REST CALLS
    authorized_users = controls.get_authorized_users()
    if request.method == 'POST':
        if len(request.form['username'].strip()) <= 0:
            error = 'Username cannot be blank'
        else:
            if controls.user_exists(request.form['username'].strip()):
                error = 'Username already exists'
            elif len(request.form['password'].strip()) <= 0:
                error = 'Password cannot be blank'
            elif not lib.valid_email(request.form['email_address']):
                error = 'Invalid Email Address'
            else:
                if request.form['lead'] == 'None':
                    lead = None
                else:
                    lead = request.form['lead']
                if request.form['use_email'] == 'True':
                    use_email = 1
                else:
                    use_email = 0
                controls.create_user(request.form['username'],
                                     request.form['password'],
                                     request.form['first_name'],
                                     request.form['last_name'],
                                     request.form['email_address'], lead,
                                     use_email)
                flash("New User was successfully registered")
                session['logged_in'] = True
                session['first_name'] = request.form['first_name']
                session['last_name'] = request.form['last_name']
                session['username'] = request.form['username']
                return redirect(url_for('login'))
    return render_template('register.html',
                           error=error,
                           authorized_users=authorized_users)
Ejemplo n.º 15
0
def configure(guid_list=None):
    if request.method=='POST':
        guid_list = request.form.getlist('notebook')
        controls.update_user(session.get('username'), notebook_ids=','.join(guid_list))
        return redirect(url_for('configure'))
    else:    
        # CHECK IF THIS NEEDS SHARD/AUTH
        notebook_list=get_notebook_list(session.get('auth_token'), session.get('shard_id'))
        if guid_list is None:
            # CHECK AND SEE IF USER HAS SELECTED NOTEBOOKS
            guid_list = controls.get_notebook_ids(session.get('username'))
            if len(guid_list) == 1:
                guid_list = guid_list[0]['ids'].split(',')
            else:
                guid_list = None
        if guid_list is not None:
            for notebook in notebook_list:
                for guid in guid_list:
                    if guid == notebook['guid']:
                        notebook['selected'] = True
                        break    
    return render_template('configure.html', notebooks=notebook_list)
Ejemplo n.º 16
0
def auth_finish():
    """After the user has authorized this application on Evernote's website,
    they will be redirected back to this URL to finish the process."""

    oauth_verifier = request.args.get('oauth_verifier', '')

    token = oauth.Token(session['oauth_token'], 
                        session['oauth_token_secret'])
    token.set_verifier(oauth_verifier)

#    client = get_oauth_client()
    client = get_oauth_client(token)

    # Retrieve the token credentials (Access Token) from Evernote
    resp, content = client.request(app.config['EN_ACCESS_TOKEN_URL'], 'POST')

    if resp['status'] != '200':
        raise Exception('Invalid response %s.' % resp['status'])

    access_token = dict(urlparse.parse_qsl(content))
    authToken = access_token['oauth_token']
    
    # MAY NEED SHARD/AUTH
    userStore = get_userstore()
    user = userStore.getUser(authToken)

    # Save the users information to so we can make requests later
    session['shard_id'] = user.shardId
    session['auth_token'] = authToken
    
    # INSERT THE SESSION AND LINK TO THE USERID
    controls.update_user(session.get('username'),
                         auth_token=session.get('auth_token'), 
                         shard_id=session.get('shard_id'),
                         authorized=1)
    flash("Evernote Test Session Authorized!!")
    return redirect(url_for('index'))
Ejemplo n.º 17
0
def auth_finish():
    """After the user has authorized this application on Evernote's website,
    they will be redirected back to this URL to finish the process."""

    oauth_verifier = request.args.get('oauth_verifier', '')

    token = oauth.Token(session['oauth_token'], session['oauth_token_secret'])
    token.set_verifier(oauth_verifier)

    #    client = get_oauth_client()
    client = get_oauth_client(token)

    # Retrieve the token credentials (Access Token) from Evernote
    resp, content = client.request(app.config['EN_ACCESS_TOKEN_URL'], 'POST')

    if resp['status'] != '200':
        raise Exception('Invalid response %s.' % resp['status'])

    access_token = dict(urlparse.parse_qsl(content))
    authToken = access_token['oauth_token']

    # MAY NEED SHARD/AUTH
    userStore = get_userstore()
    user = userStore.getUser(authToken)

    # Save the users information to so we can make requests later
    session['shard_id'] = user.shardId
    session['auth_token'] = authToken

    # INSERT THE SESSION AND LINK TO THE USERID
    controls.update_user(session.get('username'),
                         auth_token=session.get('auth_token'),
                         shard_id=session.get('shard_id'),
                         authorized=1)
    flash("Evernote Test Session Authorized!!")
    return redirect(url_for('index'))
Ejemplo n.º 18
0
def configure(guid_list=None):
    if request.method == 'POST':
        guid_list = request.form.getlist('notebook')
        controls.update_user(session.get('username'),
                             notebook_ids=','.join(guid_list))
        return redirect(url_for('configure'))
    else:
        # CHECK IF THIS NEEDS SHARD/AUTH
        notebook_list = get_notebook_list(session.get('auth_token'),
                                          session.get('shard_id'))
        if guid_list is None:
            # CHECK AND SEE IF USER HAS SELECTED NOTEBOOKS
            guid_list = controls.get_notebook_ids(session.get('username'))
            if len(guid_list) == 1:
                guid_list = guid_list[0]['ids'].split(',')
            else:
                guid_list = None
        if guid_list is not None:
            for notebook in notebook_list:
                for guid in guid_list:
                    if guid == notebook['guid']:
                        notebook['selected'] = True
                        break
    return render_template('configure.html', notebooks=notebook_list)
Ejemplo n.º 19
0
def index():
    error_list = None
    # CHECK IF THE USER IS LOGGED IN, OTHERWISE REDIRECT
    if not session.get('logged_in'):
        return redirect(url_for('login'))
    # GET THE USER INFO, REDIRECT IF NOTHING IS RETURNED
    user = controls.get_user_info(session.get('username'))
    if not user:
        redirect(url_for('logout'))
    authorized_users = controls.get_authorized_users()
    # RETURNS A JSON ObJECT OF USERNAME, FIRST AND LAST
    lead = controls.get_lead(session.get('username'))
    if len(lead) == 0:
        lead = {'username': '', 'first_name': '', 'last_name': ''}
    else:
        lead = lead[0]
    notebooks = []
    if session.get('auth_token'):
        # CHECK AND SEE IF USER HAS SELECTED NOTEBOOKS
        if user['notebook_ids'] is not None and len(user['notebook_ids']) > 0:
            guid_list = user['notebook_ids'].split(',')
            flash("Getting Notebooks and Notes")
            notebooks = get_notebooks(session.get('auth_token'),
                                      session.get('shard_id'), guid_list)
        else:
            return redirect(url_for('configure', guid_list=None))
    # POST REQUESTS
    if request.method == 'POST':
        error_list = []
        note_list = request.form.getlist('note')
        # GET THE NOTE CONTENT FOR EACH NOTES GUID
        for value in note_list:
            try:
                title, guid = value.split(':')
                note = get_note(session.get('auth_token'),
                                session.get('shard_id'), guid)
            except Exception as e:
                error = "Error retrieving note using guid %s" % e
                return render_template('main.html', error=error)
            # ATTEMPT TO PARSE THE NOTE INTO A ENXML OBJECT
            # GET DOCTYPE FROM NOTE CONTENT
            rg = re.compile('(<!DOCTYPE .*?>)')
            m = rg.search(note)
            try:
                # CREATE EN OBJECT INITILIZING WITH NOTE AND DOCTYPE
                en = EN(note, doctype=m.group(1))
                # BREAK OUT TABLES
                en.break_out_tables()
                try:
                    en.set_activity_type('O')
                    en.set_activity_type('I')
                except:
                    error_list.append(
                        "Using an old Template, update your template in the future"
                    )
                    error_list.append(
                        "Unable to set Issues and Activities within the note")
                flash(
                    update_note(session.get('auth_token'),
                                session.get('shard_id'),
                                en.tostring(),
                                guid=guid,
                                title=title))
                # IF EMAIL IS SET
                if user['use_email'] == 1:
                    lib.send_email(en, app.config['EMAIL_SERVER'],
                                   user['email_address'])
                    flash("Note sent as email to %s" % user['email_address'])
                # IF LEAD IS SET
                if request.form['lead'] != 'None':
                    # GET LEAD AUTH_TOKEN
                    lead = controls.get_user_info(request.form['lead'])
                    flash(
                        new_note(shard_id=lead['shard_id'],
                                 content=en.tostring(),
                                 title=title,
                                 auth_token=lead['auth_token']))
                    flash("Sent note to lead: %s" % request.form['lead'])
                    controls.set_lead(session.get('username'),
                                      request.form['lead'])
                # CHANGE THE USERS LEAD ID TO THAT USED
                else:
                    controls.delete_lead(session.get('username'))
                    lead = {'username': '', 'first_name': '', 'last_name': ''}
                flash("Bug Time: %s" % en.times['B'])
                flash("Setup Time: %s" % en.times['S'])
                flash("Test Time: %s" % en.times['T'])
                flash("Session Length: %s" % en.session_length)
                en.export_xml(app.config['UPLOADED_FILE_DEST'],
                              "%s.xml" % title)
            except Exception as e:
                error_list.append(
                    "ERROR parsing out data from note %s. Exception: [%s]" %
                    (title, e))
    return render_template('main.html',
                           notebooks=notebooks,
                           error=error_list,
                           authorized_users=authorized_users,
                           lead=lead)
Ejemplo n.º 20
0
def logout():
    for key in session.keys():
        session.pop(key, None)
    flash('You were logged out')
    return redirect(url_for('index'))
Ejemplo n.º 21
0
def logout():
    for key in session.keys():
        session.pop(key, None)
    flash('You were logged out')
    return redirect(url_for('index'))
Ejemplo n.º 22
0
def index():
    error_list = None
    # CHECK IF THE USER IS LOGGED IN, OTHERWISE REDIRECT
    if not session.get('logged_in'):
        return redirect(url_for('login'))
    # GET THE USER INFO, REDIRECT IF NOTHING IS RETURNED
    user = controls.get_user_info(session.get('username'))
    if not user:
        redirect(url_for('logout'))
    authorized_users = controls.get_authorized_users()
    # RETURNS A JSON ObJECT OF USERNAME, FIRST AND LAST 
    lead = controls.get_lead(session.get('username'))
    if len(lead) == 0:
        lead = {'username':'', 'first_name':'', 'last_name':''}
    else:
        lead = lead[0]
    notebooks = []
    if session.get('auth_token'):
        # CHECK AND SEE IF USER HAS SELECTED NOTEBOOKS
        if user['notebook_ids'] is not None and len(user['notebook_ids']) > 0:
            guid_list = user['notebook_ids'].split(',')
            flash("Getting Notebooks and Notes")
            notebooks = get_notebooks(session.get('auth_token'), 
                                      session.get('shard_id'),
                                      guid_list) 
        else:
            return redirect(url_for('configure', guid_list=None))         
    # POST REQUESTS
    if request.method=='POST':
        error_list = []
        note_list = request.form.getlist('note')
        # GET THE NOTE CONTENT FOR EACH NOTES GUID
        for value in note_list:
            try:
                title, guid = value.split(':')
                note = get_note(session.get('auth_token'), 
                                session.get('shard_id'),
                                guid)
            except Exception as e:
                error = "Error retrieving note using guid %s" %e
                return render_template('main.html', 
                                       error=error)
            # ATTEMPT TO PARSE THE NOTE INTO A ENXML OBJECT
            # GET DOCTYPE FROM NOTE CONTENT
            rg = re.compile('(<!DOCTYPE .*?>)')
            m = rg.search(note)
            try:
                # CREATE EN OBJECT INITILIZING WITH NOTE AND DOCTYPE
                en = EN(note, doctype=m.group(1))
                # BREAK OUT TABLES
                en.break_out_tables()
                try:
                    en.set_activity_type('O')
                    en.set_activity_type('I')
                except:
                    error_list.append("Using an old Template, update your template in the future")
                    error_list.append("Unable to set Issues and Activities within the note")
                flash(update_note(session.get('auth_token'),
                                  session.get('shard_id'),
                                  en.tostring(), 
                                  guid=guid, 
                                  title=title))
                # IF EMAIL IS SET
                if user['use_email'] == 1:
                    lib.send_email(en, app.config['EMAIL_SERVER'], user['email_address'])
                    flash("Note sent as email to %s" %user['email_address'])
                # IF LEAD IS SET
                if request.form['lead'] != 'None':
                    # GET LEAD AUTH_TOKEN
                    lead = controls.get_user_info(request.form['lead'])
                    flash(new_note(shard_id=lead['shard_id'],
                                   content=en.tostring(), 
                                   title=title, 
                                   auth_token=lead['auth_token']))
                    flash("Sent note to lead: %s" %request.form['lead'])
                    controls.set_lead(session.get('username'), request.form['lead'])
                # CHANGE THE USERS LEAD ID TO THAT USED
                else: 
                    controls.delete_lead(session.get('username'))
                    lead = {'username':'', 'first_name':'', 'last_name':''}
                flash("Bug Time: %s" %en.times['B'])
                flash("Setup Time: %s" %en.times['S'])
                flash("Test Time: %s" %en.times['T'])
                flash("Session Length: %s" %en.session_length)
                en.export_xml(app.config['UPLOADED_FILE_DEST'], "%s.xml" %title)
            except Exception as e:
                error_list.append("ERROR parsing out data from note %s. Exception: [%s]" %(title, e))
    return render_template('main.html',
                            notebooks=notebooks, 
                            error=error_list,
                            authorized_users=authorized_users,
                            lead=lead)