def changewrite(request, g_id): ''' View to change write capabilities of UG ''' session = request.session g_id = int(g_id) g = db.read_user_gateway(g_id) if not g: return redirect('django_ug.views.viewgateway', g_id) if g.read_write: attrs = {'read_write': False} else: attrs = {'read_write': True} try: db.update_user_gateway(g_id, **attrs) except Exception as e: logging.error("Unable to update UG with ID %s. Error was %s." % (g_id, e)) session['message'] = "Error. Unable to change user gateway." return redirect('django_ug.views.viewgateway', g_id) session['new_change'] = "We've updated your UG." session['next_url'] = '/syn/UG/viewgateway/' + str(g_id) session['next_message'] = "Click here to go back to your gateway." return HttpResponseRedirect('/syn/thanks')
def update_ug_and_vol(g_id, gfields, vol1_id, vol2_id): db.update_user_gateway(g_id, **gfields) attrs = {"UG_version": 1} # Force update of UG version db.update_volume(vol1_id, **attrs) db.update_volume(vol2_id, **attrs)
def changelocation(request, g_id): ''' View to enable changing host and port of UG ''' session = request.session g_id = int(g_id) form = gatewayforms.ModifyGatewayLocation(request.POST) if form.is_valid(): new_host = form.cleaned_data['host'] new_port = form.cleaned_data['port'] fields = {'host': new_host, 'port': new_port} try: db.update_user_gateway(g_id, **fields) except Exception as e: logging.error("Unable to update UG with ID %s. Error was %s." % (g_id, e)) session['message'] = "Error. Unable to change user gateway." return redirect('django_ug.views.viewgateway', g_id) session['new_change'] = "We've updated your UG." session['next_url'] = '/syn/UG/viewgateway/' + str(g_id) session['next_message'] = "Click here to go back to your gateway." return HttpResponseRedirect('/syn/thanks') else: session['message'] = "Invalid form entries for gateway location." return redirect('django_ug.views.viewgateway', g_id)
def multi_update(vol, users, usergateways, acquisitiongateways, replicagateways): v_id = vol.volume_id db.delete_volume(v_id) logging.info(users) for user in users: fields = {} if v_id in user.volumes_o: new_volumes_o = user.volumes_o new_volumes_o.remove(v_id) fields['volumes_o'] = new_volumes_o if v_id in user.volumes_rw: new_volumes_rw = user.volumes_rw new_volumes_rw.remove(v_id) fields['volumes_rw'] = new_volumes_rw if v_id in user.volumes_r: new_volumes_r = user.volumes_r new_volumes_r.remove(v_id) fields['volumes_r'] = new_volumes_r if fields: db.update_user(user.email, **fields) for ug in usergateways: fields = {} fields['volume_id'] = 0 db.update_user_gateway(ug.g_id, **fields) for ag in acquisitiongateways: logging.info(ag) fields = {} new_ids = ag.volume_ids.remove(v_id) if not new_ids: fields['volume_ids'] = [] else: fields['volume_ids'] = new_ids db.update_acquisition_gateway(ag.g_id, **fields) for rg in replicagateways: fields = {} new_ids = rg.volume_ids.remove(v_id) if not new_ids: fields['volume_ids'] = [] else: fields['volume_ids'] = new_ids db.update_replica_gateway(rg.g_id, **fields) # Clear initial data session variable to prevent stale tables in ag.views.viewgateway and rg.views.viewgateway session.pop("rg_initial_data" + str(v_id), None) session.pop("ag_initial_data" + str(v_id), None) # Clear initial data session variable to prevent stale data in volume settings, change rgs, and change ags. session.pop("volume_initial_ags" + str(v_id), None) session.pop("volume_initial_rgs" + str(v_id), None)
def changepassword(request, g_id): session = request.session username = session['login_email'] user = db.read_user(username) g_id = int(g_id) if request.method != "POST": return redirect('django_ug.views.viewgateway', g_id) g = db.read_user_gateway(g_id) if not g: logging.error("Error reading gateway %d : Gateway does not exist." % g_id) message = "No user gateway by the name of %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_ug.views.viewgateway', g_id) else: # Check password hash if not UG.authenticate(g, form.cleaned_data['oldpassword']): session['message'] = "Incorrect password." return redirect('django_ug.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_ug.views.viewgateway', g_id) # Ok to change password else: new_hash = UG.generate_password_hash( form.cleaned_data['newpassword_1']) fields = {'ms_password_hash': new_hash} try: db.update_user_gateway(g_id, **fields) except Exception as e: logging.error( "Unable to update user gateway %s. Exception %s" % (g_name, e)) session['message'] = "Unable to update gateway." return redirect('django_ug.views.viewgateway', g_id) session['new_change'] = "We've changed your gateways's password." session['next_url'] = '/syn/UG/viewgateway/' + str(g_id) session['next_message'] = "Click here to go back to your volume." return HttpResponseRedirect('/syn/thanks')
def changevolume(request, g_id): ''' View to enable changing volume attached to UG ''' session = request.session username = session['login_email'] user = db.read_user(username) g_id = int(g_id) g = db.read_user_gateway(g_id) # Isolate DB calls to allow roll-backs via transactions @transactional(xg=True) def update_ug_and_vol(g_id, gfields, vol1_id, vol2_id): db.update_user_gateway(g_id, **gfields) attrs = {"UG_version": 1} # Force update of UG version db.update_volume(vol1_id, **attrs) db.update_volume(vol2_id, **attrs) form = gatewayforms.ChangeVolume(request.POST) if form.is_valid(): attrs = { "Volume.name ==": form.cleaned_data['volume_name'].strip().replace(" ", "_") } vols = db.list_volumes(attrs, limit=1) if vols: new_vol = vols[0] else: session['message'] = "No volume %s exists." % form.cleaned_data[ 'volume_name'] return redirect('django_ug.views.viewgateway', g_id) if (new_vol.volume_id not in user.volumes_r) and (new_vol.volume_id not in user.volumes_rw): session[ 'message'] = "Must have read rights to volume %s to assign UG to it." % form.cleaned_data[ 'volume_name'] return redirect('django_ug.views.viewgateway', g_id) old_vol = g.volume_id #fields = {"volume_id":new_vol.volume_id, "cert_version": True} try: db.update_user_gateway(g_id, volume_id=new_vol.volume_id, cert_version=True) db.update_volume(new_vol.volume_id, version=True, cert_version=True) if g.is_bound_to_volume(): # update the old Volume db.update_volume(old_vol, version=True, cert_version=True) #update_ug_and_vol(g_id, fields, old_vol, new_vol.volume_id) except Exception, e: logging.error("Unable to update UG with ID %s. Error was %s." % (g_id, e)) session['message'] = "Error. Unable to change user gateway." return redirect('django_ug.views.viewgateway', g_id) session['new_change'] = "We've updated your UG." session['next_url'] = '/syn/UG/viewgateway/' + str(g_id) session['next_message'] = "Click here to go back to your gateway." return HttpResponseRedirect('/syn/thanks')