def create(request): type = request.GET.get('type', Problem.MULTIPLE_CHOICE) if type == Problem.MULTIPLE_CHOICE: Form = MultipleChoiceProblemForm else: Form = ShortAnswerProblemForm if request.method == 'POST': form = Form(request.POST) if form.is_valid(): if type == Problem.MULTIPLE_CHOICE: problem = Problem.from_multiple_choice_form(form) else: problem = Problem.from_short_answer_form(form) # get user id auth_service = user_service_container.load(AuthService.__name__) assert isinstance(auth_service,AuthService) user_id = auth_service.get_value("_id",request.session) problem.creator_id = user_id problem_service = lc_service_container.load(ProblemService.__name__) assert isinstance(problem_service, ProblemService) problem_id = problem_service.insert(problem) return HttpResponseRedirect(reverse('problem.read', args=[problem_id])) else: form = Form() available_types = { 'MC': Problem.MULTIPLE_CHOICE, 'SA': Problem.SHORT_ANSWER } return render(request, "problem/create.html", {'form': form, 'type': type, 'available_types': available_types})
def confirm_register(request, _id): user_service = user_service_container.load(UserService.__name__) assert (isinstance(user_service, UserService)) user = user_service.find_by_id(_id=_id) if user is None: return HttpResponseNotFound("User doesn't exist") else: return render(request, 'home/confirm_register.html', {'user': user})
def do_filter(request, **kwargs): auth_service = user_service_container.load(AuthService.__name__) assert (isinstance(auth_service, AuthService)) if not auth_service.is_logged_in(request.session): return HttpResponseRedirect(reverse('login') + "?next=" + request.path + "") else: if not (self.min_role is None) and not auth_service.is_authorized_for(request.session, self.min_role): return HttpResponseForbidden() else: return f(request, **kwargs)
def read(request, _id): problem_service = lc_service_container.load(ProblemService.__name__) user_service = user_service_container.load(UserService.__name__) assert (isinstance(problem_service, ProblemService)) assert (isinstance(user_service, UserService)) problem = problem_service.find_by_id(_id) if problem is None: return HttpResponseNotFound() else: user = user_service.find_by_id(problem.creator_id) return render(request, get_template("read.html"), {"problem": problem, "user": user})
def do_filter(request, **kwargs): auth_service = user_service_container.load(AuthService.__name__) assert (isinstance(auth_service, AuthService)) if not auth_service.is_logged_in(request.session): return HttpResponseRedirect( reverse('login') + "?next=" + request.path + "") else: if not (self.min_role is None) and not auth_service.is_authorized_for( request.session, self.min_role): return HttpResponseForbidden() else: return f(request, **kwargs)
def read(request, _id): problem_service = lc_service_container.load(ProblemService.__name__) user_service = user_service_container.load(UserService.__name__) assert (isinstance(problem_service, ProblemService)) assert (isinstance(user_service, UserService)) problem = problem_service.find_by_id(_id) if problem is None: return HttpResponseNotFound() else: user = user_service.find_by_id(problem.creator_id) return render(request, get_template("read.html"), { "problem": problem, "user": user })
def login(request): login_success = False if request.method == 'POST': form = forms.LoginForm(request.POST) if form.is_valid(): auth_service = user_service_container.load(AuthService.__name__) assert (isinstance(auth_service, AuthService)) user = auth_service.attempt(email=form.cleaned_data['email'], password=form.cleaned_data['password']) if user is None: form.add_error(None, "Invalid email/password") else: auth_service.login(user, request.session) next_url = request.GET.get('next', reverse('home')) return HttpResponseRedirect(next_url) else: form = forms.LoginForm() if not login_success: return render(request, 'home/login.html', {'form': form}) else: return HttpResponse("login_success")
def register(request): register_success = False user = None if request.method == 'POST': form = forms.RegisterForm(request.POST) if form.is_valid(): user_service = user_service_container.load(UserService.__name__) assert (isinstance(user_service, UserService)) if form.cleaned_data['password'] != form.cleaned_data[ 'confirm_password']: form.add_error("confirm_password", "Password doesn't match") elif user_service.find_by_email( email=form.cleaned_data['email']) is None: _id = user_service.add_user( email=form.cleaned_data['email'], password=form.cleaned_data['password'], name=form.cleaned_data['name']) return HttpResponseRedirect( reverse('confirm_register', args=[_id])) else: form.add_error(None, "Email already exist") else: form = forms.RegisterForm() return render(request, 'home/register.html', {'form': form})
def get_auth_service(): auth_service = user_service_container.load(AuthService.__name__) assert (isinstance(auth_service, AuthService)) return auth_service
def authenticate(self, email = None, password = None): user_service = user_service_container.load(UserService.__name__) assert (isinstance(user_service,UserService)) user = user_service.find(email = email,password = password) return user
def logout(request): auth_service = user_service_container.load(AuthService.__name__) assert (isinstance(auth_service, AuthService)) auth_service.logout(request.session) return HttpResponseRedirect(reverse("home"))