def user_settings(request): if request.GET.get('index_delete') == 'true': rest_user = RestUser(username=request.user.username) index_delete_result = rest_user.get(path='deleteIndex/') if index_delete_result and 'messages' in index_delete_result: for msg in index_delete_result['messages']: messages.add_message(request, messages.INFO, _(msg)) form = UserSettingsForm(request.user, request.POST or None) if form.is_valid(): result = form.save() if result and 'errorMessage' in result: messages.add_message(request, messages.ERROR, _(result['errorMessage'])) if result and 'messages' in result: for msg in result['messages']: if msg == "Account password has been changed" and result['type'] == 'success': request.session['key_ring'] = request.POST['new_password1'] messages.add_message(request, messages.INFO, _(msg)) if 'index_deactivated' in result and result['index_deactivated'] == True: url = reverse('user-settings') return HttpResponseRedirect(url + "?index_deactivated=true") return redirect('user-settings') return render_to_response( 'www/access/user_settings.html', { "form": form, }, context_instance=RequestContext(request) )
def clean_old_password(self): """ Validates that the old_password field is correct. """ old_password = self.cleaned_data["old_password"] remote_user = RestUser(self.user.username) if not remote_user.check_login({'password': old_password}): raise forms.ValidationError(_("Your old password was entered incorrectly. Please enter it again.")) return old_password
def zip_files(request): rest_user = RestUser(username=request.user.username) user = rest_user.get() user_id = int(user['userId']) try: file_list = [f for f in sorted(os.listdir(settings.ZIP_ARCHIVES_PATH % user_id)) if re.match(settings.ZIP_ARCHIVES_MATCH_PATTERN, f)] except: file_list=[] return render_to_response('www/zip_file_list.html', { 'file_list': file_list, }, context_instance=RequestContext(request))
def authenticate(self, username=None, password=None): """foo""" remote_user = RestUser(username) login_result = remote_user.check_login({'password':password}) if not 'errorMessage' in login_result: try: user = User.objects.get(username=username) except User.DoesNotExist: # user will have an empty password user = User.objects.create_user(username, '') user.save() return user return None
def save(self): rest_api = RestUser(self.user.username) data = {} old_password = self.cleaned_data['old_password'] new_password = self.cleaned_data.get('new_password1', False) new_key_ring = self.cleaned_data.get('new_password1', False) new_email = self.cleaned_data.get('email', self.user.username) data['oldPassword'] = old_password data['oldKeyRing'] = old_password if new_password: data['password'] = new_password if new_key_ring: data['newKeyRing'] = new_key_ring if not new_email == self.user.username: data['email'] = new_email data['username'] = new_email result_rest = rest_api.put(data) if result_rest == True and not new_email == self.user.username: self.user.username = new_email self.user.email = new_email self.user.save() rest_properties = RestProperties(username=self.user.username) for key in self.cleaned_data: # check for existing actions_value_N (always "true" if exists) if key.startswith('actions_value_'): if self.cleaned_data[key] != self.action_old_values[key]: actionId = self.cleaned_data[key.replace('_value_', '_key_')] if self.cleaned_data[key] == True: string_value = 'true' if actionId == 'org.backmeup.indexer': result_rest['messages'].append(_('Indexing new backup jobs has been activated.')) else: string_value = 'false' if actionId == 'org.backmeup.indexer': result_rest['messages'].append(_('Indexing new backup jobs has been deactivated.')) result_rest['index_deactivated'] = True result_property = rest_properties.post(actionId=actionId, value=string_value) return result_rest
def clean_email(self): email = self.cleaned_data["email"] try: # check if remote api knows user remote_user = RestUser(email) result = remote_user.get() if 'errorType' in result and result['errorType'] == 'org.backmeup.model.exceptions.UnknownUserException': # remote api doesn't know user, thus check with local db old_user = User.objects.get(username=email) # seems like the user exists (no exception) in "our" db, but not # according to the rest api. thus the user is deleted. old_user.delete() return email except User.DoesNotExist: return email raise forms.ValidationError(_("A user with that email already exists."))
def save(self, commit=True): user = super(UserCreationForm, self).save(commit=False) user.set_password("") user.username = self.cleaned_data['email'] user.email = self.cleaned_data['email'] remote_user = RestUser(user.username) response = remote_user.post({ 'password': self.cleaned_data["password1"], 'keyRing': self.cleaned_data['password1'], 'email': self.cleaned_data['email'], }) if response == False: raise Exception if commit: user.save() return user
def zip_download(request): """ Send a file through Django without loading the whole file into memory at once. The FileWrapper will turn the file object into an iterator for chunks of 8KB. (performance might be improved by using apache mod_xsendfile.) """ rest_user = RestUser(username=request.user.username) user = rest_user.get() user_id = int(user['userId']) filename = settings.ZIP_ARCHIVES_PATH % user_id filename = filename + request.GET['f'] wrapper = FileWrapper(file(filename)) response = HttpResponse(wrapper, content_type='application/zip') response['Content-Disposition'] = 'attachment; filename=' + request.GET['f'] response['Content-Length'] = os.path.getsize(filename) return response