def add_project(request): form = ProjectNameForm(request.POST) if not form.is_valid(): return HttpResponseBadRequest() project = Project(owner=request.user) project.code = project.badge_key = str(uuid.uuid4()) project.name = form.cleaned_data["name"] project.save() return redirect("hc-checks", project.code)
def project(request, code): if request.user.is_superuser: q = Project.objects else: q = request.profile.projects() try: project = q.get(code=code) except Project.DoesNotExist: return HttpResponseNotFound() is_owner = project.owner_id == request.user.id ctx = { "page": "project", "project": project, "is_owner": is_owner, "show_api_keys": "show_api_keys" in request.GET, "project_name_status": "default", "api_status": "default", "team_status": "default", } if request.method == "POST": if "create_api_keys" in request.POST: project.set_api_keys() project.save() ctx["show_api_keys"] = True ctx["api_keys_created"] = True ctx["api_status"] = "success" elif "revoke_api_keys" in request.POST: project.api_key = "" project.api_key_readonly = "" project.save() ctx["api_keys_revoked"] = True ctx["api_status"] = "info" elif "show_api_keys" in request.POST: ctx["show_api_keys"] = True elif "invite_team_member" in request.POST: if not is_owner or not project.can_invite(): return HttpResponseForbidden() form = InviteTeamMemberForm(request.POST) if form.is_valid(): if not TokenBucket.authorize_invite(request.user): return render(request, "try_later.html") email = form.cleaned_data["email"] try: user = User.objects.get(email=email) except User.DoesNotExist: user = _make_user(email, with_project=False) project.invite(user) ctx["team_member_invited"] = email ctx["team_status"] = "success" elif "remove_team_member" in request.POST: if not is_owner: return HttpResponseForbidden() form = RemoveTeamMemberForm(request.POST) if form.is_valid(): q = User.objects q = q.filter(email=form.cleaned_data["email"]) q = q.filter(memberships__project=project) farewell_user = q.first() if farewell_user is None: return HttpResponseBadRequest() farewell_user.profile.current_project = None farewell_user.profile.save() Member.objects.filter(project=project, user=farewell_user).delete() ctx["team_member_removed"] = form.cleaned_data["email"] ctx["team_status"] = "info" elif "set_project_name" in request.POST: form = ProjectNameForm(request.POST) if form.is_valid(): project.name = form.cleaned_data["name"] project.save() if request.profile.current_project == project: request.profile.current_project.name = project.name ctx["project_name_updated"] = True ctx["project_name_status"] = "success" # Count members right before rendering the template, in case # we just invited or removed someone ctx["num_members"] = project.member_set.count() return render(request, "accounts/project.html", ctx)
def project(request, code): project = Project.objects.get(code=code, owner_id=request.user.id) ctx = { "page": "profile", "project": project, "show_api_keys": False, "project_name_status": "default", "api_status": "default", "team_status": "default" } if request.method == "POST": if "create_api_keys" in request.POST: project.set_api_keys() project.save() ctx["show_api_keys"] = True ctx["api_keys_created"] = True ctx["api_status"] = "success" elif "revoke_api_keys" in request.POST: project.api_key = "" project.api_key_readonly = "" project.save() ctx["api_keys_revoked"] = True ctx["api_status"] = "info" elif "show_api_keys" in request.POST: ctx["show_api_keys"] = True elif "invite_team_member" in request.POST: if not project.can_invite(): return HttpResponseForbidden() form = InviteTeamMemberForm(request.POST) if form.is_valid(): email = form.cleaned_data["email"] try: user = User.objects.get(email=email) except User.DoesNotExist: user = _make_user(email) project.invite(user) ctx["team_member_invited"] = email ctx["team_status"] = "success" elif "remove_team_member" in request.POST: form = RemoveTeamMemberForm(request.POST) if form.is_valid(): email = form.cleaned_data["email"] farewell_user = User.objects.get(email=email) farewell_user.profile.current_project = None farewell_user.profile.save() Member.objects.filter(project=project, user=farewell_user).delete() ctx["team_member_removed"] = email ctx["team_status"] = "info" elif "set_project_name" in request.POST: form = ProjectNameForm(request.POST) if form.is_valid(): project.name = form.cleaned_data["name"] project.save() if request.project.id == project.id: request.project = project ctx["project_name_updated"] = True ctx["project_name_status"] = "success" # Count members right before rendering the template, in case # we just invited or removed someone ctx["num_members"] = project.member_set.count() return render(request, "accounts/project.html", ctx)
def project(request, code): if request.user.is_superuser: q = Project.objects else: q = request.profile.projects() try: project = q.get(code=code) except Project.DoesNotExist: return HttpResponseNotFound() is_owner = project.owner_id == request.user.id invite_suggestions = project.invite_suggestions() ctx = { "page": "project", "project": project, "is_owner": is_owner, "show_api_keys": "show_api_keys" in request.GET, "project_name_status": "default", "api_status": "default", "team_status": "default", "invite_suggestions": invite_suggestions, } if request.method == "POST": if "create_api_keys" in request.POST: project.set_api_keys() project.save() ctx["show_api_keys"] = True ctx["api_keys_created"] = True ctx["api_status"] = "success" elif "revoke_api_keys" in request.POST: project.api_key = "" project.api_key_readonly = "" project.save() ctx["api_keys_revoked"] = True ctx["api_status"] = "info" elif "show_api_keys" in request.POST: ctx["show_api_keys"] = True elif "invite_team_member" in request.POST: if not is_owner: return HttpResponseForbidden() form = InviteTeamMemberForm(request.POST) if form.is_valid(): email = form.cleaned_data["email"] if not invite_suggestions.filter(email=email).exists(): # We're inviting a new user. Are we within team size limit? if not project.can_invite_new_users(): return HttpResponseForbidden() # And are we not hitting a rate limit? if not TokenBucket.authorize_invite(request.user): return render(request, "try_later.html") try: user = User.objects.get(email=email) except User.DoesNotExist: user = _make_user(email, with_project=False) project.invite(user) ctx["team_member_invited"] = email ctx["team_status"] = "success" elif "remove_team_member" in request.POST: if not is_owner: return HttpResponseForbidden() form = RemoveTeamMemberForm(request.POST) if form.is_valid(): q = User.objects q = q.filter(email=form.cleaned_data["email"]) q = q.filter(memberships__project=project) farewell_user = q.first() if farewell_user is None: return HttpResponseBadRequest() Member.objects.filter(project=project, user=farewell_user).delete() ctx["team_member_removed"] = form.cleaned_data["email"] ctx["team_status"] = "info" elif "set_project_name" in request.POST: form = ProjectNameForm(request.POST) if form.is_valid(): project.name = form.cleaned_data["name"] project.save() ctx["project_name_updated"] = True ctx["project_name_status"] = "success" return render(request, "accounts/project.html", ctx)