Пример #1
0
def changepassword(request, g_id):
    '''
    Handler for changing gateway password. Since it can't use precheck because of password reasons,
    must verify POST-ness itself.
    '''
    session = request.session
    username = session['login_email']
    g_id = int(g_id)

    # Precheck
    if request.method != "POST":
        return redirect('/syn/AG/viewgateway/' + str(g_id))

    try:
        g = db.read_acquisition_gateway(g_id)
        if not g:
            raise Exception("No gateway exists.")
    except Exception as e:
        logging.error("Error reading gateway with ID %d : Exception: %s" %
                      (g_id, e))
        message = "No acquisition gateway with the ID %d exists." % g_id
        t = loader.get_template("gateway_templates/viewgateway_failure.html")
        c = Context({'message': message, 'username': username})
        return HttpResponse(t.render(c))

    form = libforms.ChangePassword(request.POST)

    if not form.is_valid():
        session['message'] = "You must fill out all password fields."
        return redirect('django_ag.views.viewgateway', g_id)
    else:
        # Check password hash
        if not AG.authenticate(g, form.cleaned_data['oldpassword']):
            session['message'] = "Incorrect password."
            return redirect('django_ag.views.viewgateway', g_id)
        elif form.cleaned_data['newpassword_1'] != form.cleaned_data[
                'newpassword_2']:
            session['message'] = "Your new passwords did not match each other."
            return redirect('django_ag.views.viewgateway', g_id)
        # Ok to change password, then redirect
        else:
            new_hash = AG.generate_password_hash(
                form.cleaned_data['newpassword_1'])
            fields = {'ms_password_hash': new_hash}
            try:
                db.update_acquisition_gateway(g_id, **fields)
            except Exception as e:
                logging.error(
                    "Unable to update acquisition gateway %d. Exception %s" %
                    (g_id, e))
                session['message'] = "Unable to update gateway."
                return redirect('django_ag.views.viewgateway', g_id)

            session['new_change'] = "We've changed your gateways's password."
            session['next_url'] = '/syn/AG/viewgateway/' + str(g_id)
            session['next_message'] = "Click here to go back to your gateway."
            return redirect('/syn/thanks')
Пример #2
0
def changepassword(request, g_id):
    '''
    Handler for changing gateway password. Since it can't use precheck because of password reasons,
    must verify POST-ness itself.
    '''
    session = request.session
    username = session['login_email']
    g_id = int(g_id)


    # Precheck
    if request.method != "POST":
        return redirect('/syn/AG/viewgateway/' + str(g_id))

    try:
        g = db.read_acquisition_gateway(g_id)
        if not g:
            raise Exception("No gateway exists.")
    except Exception as e:
        logging.error("Error reading gateway with ID %d : Exception: %s" % (g_id, e))
        message = "No acquisition gateway with the ID %d exists." % g_id
        t = loader.get_template("gateway_templates/viewgateway_failure.html")
        c = Context({'message':message, 'username':username})
        return HttpResponse(t.render(c))



    form = libforms.ChangePassword(request.POST)

    if not form.is_valid():
        session['message'] = "You must fill out all password fields."
        return redirect('django_ag.views.viewgateway', g_id)
    else:
        # Check password hash
        if not AG.authenticate(g, form.cleaned_data['oldpassword']):
            session['message'] = "Incorrect password."
            return redirect('django_ag.views.viewgateway', g_id)
        elif form.cleaned_data['newpassword_1'] != form.cleaned_data['newpassword_2']:
            session['message'] = "Your new passwords did not match each other."
            return redirect('django_ag.views.viewgateway', g_id)
        # Ok to change password, then redirect
        else:
            new_hash = AG.generate_password_hash(form.cleaned_data['newpassword_1'])
            fields = {'ms_password_hash':new_hash}
            try:
                db.update_acquisition_gateway(g_id, **fields)
            except Exception as e:
                logging.error("Unable to update acquisition gateway %d. Exception %s" % (g_id, e))
                session['message'] = "Unable to update gateway."
                return redirect('django_ag.views.viewgateway', g_id)

            session['new_change'] = "We've changed your gateways's password."
            session['next_url'] = '/syn/AG/viewgateway/' + str(g_id)
            session['next_message'] = "Click here to go back to your gateway."
            return redirect('/syn/thanks')
Пример #3
0
        def ag_wrapper(request, g_id):

            if not request.POST:
                return redirect('django_ag.views.viewgateway', g_id=g_id)

            session = request.session
            username = session['login_email']
            try:
                g = db.read_acquisition_gateway(g_id)
                if not g:
                    raise Exception("No gateway exists.")
            except Exception as e:
                logging.error("Error reading gateway %s : Exception: %s" % (g_id, e))
                message = "No acquisition gateway by the name of %s exists." % g_id
                t = loader.get_template("gateway_templates/viewgateway_failure.html")
                c = Context({'message':message, 'username':username})
                return HttpResponse(t.render(c))

            form = libforms.Password(request.POST)
            if not form.is_valid():
                session['message'] = "Password required."
                return redirect(redirect_view, g_id)
            # Check password hash
            if not AG.authenticate(g, form.cleaned_data['password']):
                session['message'] = "Incorrect password."
                return redirect(redirect_view, g_id)

            return f(request, g_id)
Пример #4
0
        def ag_wrapper(request, g_id):

            if not request.POST:
                return redirect('django_ag.views.viewgateway', g_id=g_id)

            session = request.session
            username = session['login_email']
            try:
                g = db.read_acquisition_gateway(g_id)
                if not g:
                    raise Exception("No gateway exists.")
            except Exception as e:
                logging.error("Error reading gateway %s : Exception: %s" %
                              (g_id, e))
                message = "No acquisition gateway by the name of %s exists." % g_id
                t = loader.get_template(
                    "gateway_templates/viewgateway_failure.html")
                c = Context({'message': message, 'username': username})
                return HttpResponse(t.render(c))

            form = libforms.Password(request.POST)
            if not form.is_valid():
                session['message'] = "Password required."
                return redirect(redirect_view, g_id)
            # Check password hash
            if not AG.authenticate(g, form.cleaned_data['password']):
                session['message'] = "Incorrect password."
                return redirect(redirect_view, g_id)

            return f(request, g_id)
Пример #5
0
def urldelete(request, g_name, g_password):
    '''
    For debugging purposes only, allows deletion of AG via pure URL
    '''
    session = request.session
    username = session['login_email']

    attrs = {"AcquisitionGateway.ms_username ==": g_name}
    ags = db.list_acquisition_gateways(attrs, limit=1)
    if ags:
        ag = ags[0]
    else:
        return HttpResponse("AG %s does not exist." % g_name)
    if not AG.authenticate(ag, g_password):
        return HttpResponse("Incorrect AG password.")
    db.delete_acquisition_gateway(g_name)
    return HttpResponse("Gateway succesfully deleted.")
Пример #6
0
def urldelete(request, g_name, g_password):
    '''
    For debugging purposes only, allows deletion of AG via pure URL
    '''
    session = request.session
    username = session['login_email']

    attrs = {"AcquisitionGateway.ms_username ==":g_name}
    ags = db.list_acquisition_gateways(attrs, limit=1)
    if ags:
        ag = ags[0]
    else:
        return HttpResponse("AG %s does not exist." % g_name)
    if not AG.authenticate(ag, g_password):
        return HttpResponse("Incorrect AG password.")
    db.delete_acquisition_gateway(g_name)
    return HttpResponse("Gateway succesfully deleted.")
Пример #7
0
def delete(request, g_id):
    '''
    View for deleting AG.
    '''

    # Helper method used to simplify error-handling. When fields are entered incorrectly,
    # a session message is set and this method is called.
    def give_delete_form(username, g, session):
        message = session.pop('message', "")
        form = gatewayforms.DeleteGateway()
        t = loader.get_template(
            'gateway_templates/delete_acquisition_gateway.html')
        c = RequestContext(request, {
            'username': username,
            'g': g,
            'form': form,
            'message': message
        })
        return HttpResponse(t.render(c))

    # Once again isolating transactional for views that update multiple entities
    @transactional(xg=True)
    def delete_and_update(ag_id, attached_volume_ids):
        db.delete_acquisition_gateway(ag_id)
        for v in attached_volume_ids:
            vol = db.read_volume(v)
            if not vol:
                continue
            new_ag_ids = vol.ag_ids
            new_ag_ids.remove(ag_id)
            attrs = {"ag_ids": new_ag_ids}
            db.update_volume(v, **attrs)
        session.pop("ag_initial_data", None)

    session = request.session
    username = session['login_email']
    g_id = int(g_id)

    ag = db.read_acquisition_gateway(g_id)
    if not ag:
        t = loader.get_template(
            'gateway_templates/delete_acquisition_gateway_failure.html')
        c = RequestContext(request, {'username': username})
        return HttpResponse(t.render(c))

    if request.POST:
        # Validate input forms
        form = gatewayforms.DeleteGateway(request.POST)
        if form.is_valid():
            if not AG.authenticate(ag, form.cleaned_data['g_password']):
                session['message'] = "Incorrect Acquisition Gateway password"
                return give_delete_form(username, ag, session)
            if not form.cleaned_data['confirm_delete']:
                session[
                    'message'] = "You must tick the delete confirmation box."
                return give_delete_form(username, ag, session)

            delete_and_update(g_id, ag.volume_ids)
            session['new_change'] = "Your gateway has been deleted."
            session['next_url'] = '/syn/AG/allgateways'
            session[
                'next_message'] = "Click here to see all acquisition gateways."
            return redirect('/syn/thanks/')

        # Invalid forms
        else:
            # Prep error message
            session['message'] = "Invalid form entry: "

            for k, v in form.errors.items():
                session[
                    'message'] = session['message'] + "\"" + k + "\"" + " -> "
                for m in v:
                    session['message'] = session['message'] + m + " "

            return give_delete_form(username, ag, session)
    else:
        # Not a POST, give them blank form
        return give_delete_form(username, ag, session)
Пример #8
0
def delete(request, g_id):
    '''
    View for deleting AG.
    '''

    # Helper method used to simplify error-handling. When fields are entered incorrectly,
    # a session message is set and this method is called.
    def give_delete_form(username, g, session):
        message = session.pop('message', "")
        form = gatewayforms.DeleteGateway()
        t = loader.get_template('gateway_templates/delete_acquisition_gateway.html')
        c = RequestContext(request, {'username':username, 'g':g, 'form':form, 'message':message})
        return HttpResponse(t.render(c))

    # Once again isolating transactional for views that update multiple entities
    @transactional(xg=True)
    def delete_and_update(ag_id, attached_volume_ids):
        db.delete_acquisition_gateway(ag_id)
        for v in attached_volume_ids:
            vol = db.read_volume(v)
            if not vol:
                continue
            new_ag_ids = vol.ag_ids
            new_ag_ids.remove(ag_id)
            attrs = {"ag_ids":new_ag_ids}
            db.update_volume(v, **attrs)
        session.pop("ag_initial_data", None)

    session = request.session
    username = session['login_email']
    g_id = int(g_id)

    ag = db.read_acquisition_gateway(g_id)
    if not ag:
        t = loader.get_template('gateway_templates/delete_acquisition_gateway_failure.html')
        c = RequestContext(request, {'username':username})
        return HttpResponse(t.render(c))

    if request.POST:
        # Validate input forms
        form = gatewayforms.DeleteGateway(request.POST)
        if form.is_valid():
            if not AG.authenticate(ag, form.cleaned_data['g_password']):
                session['message'] = "Incorrect Acquisition Gateway password"
                return give_delete_form(username, ag, session)
            if not form.cleaned_data['confirm_delete']:
                session['message'] = "You must tick the delete confirmation box."
                return give_delete_form(username, ag, session)
            
            delete_and_update(g_id, ag.volume_ids)
            session['new_change'] = "Your gateway has been deleted."
            session['next_url'] = '/syn/AG/allgateways'
            session['next_message'] = "Click here to see all acquisition gateways."
            return redirect('/syn/thanks/')

        # Invalid forms
        else:  
            # Prep error message
            session['message'] = "Invalid form entry: "

            for k, v in form.errors.items():
                session['message'] = session['message'] + "\"" + k + "\"" + " -> " 
                for m in v:
                    session['message'] = session['message'] + m + " "

            return give_delete_form(username, ag, session)
    else:
        # Not a POST, give them blank form
        return give_delete_form(username, ag, session)