def create_desktop(request, desktop_name, private): slug = slugify(desktop_name) if not slug: return Result('fail', message='Invalid characters in desktop name.') num_desktops = Desktop.objects.filter(owner=request.user).count() if num_desktops >= 10: return Result('fail', message="Sorry, there is currently a limit of 10 desktops per user.") user = request.user uid = u'%s.%s' % (user.username, slug) private = private != 'false'; try: desktop = Desktop.objects.create( owner=user, name=desktop_name, slug=slug, uid=uid, private=private ) except IntegrityError: return Result('fail', message='You already have a desktop of this name.') user_desktops_changed.send(sender=DesktopAPI, username=user.username) return Result('success', slug=slug, username=user.username, url=desktop.get_edit_url())
def rename_desktop(request, username, desktop_slug, new_name): new_slug = slugify(new_name) if Desktop.objects.filter(owner__username=username, slug=new_slug).count(): return Result('fail', message="Can't rename this desktop, a desktop of that name already exists.") if not new_slug: return Result('fail', message="Invalid name. Desktop was not renamed.") if len(new_slug) >= 30: return Result('fail', message="Name is too long (must be less that 30 characters)") if request.user.username != username and not request.user.is_staff: return Result('nopermission', message="You must be the owner of the desktop to rename it") user_desktops_changed.send(sender=DesktopAPI, username=username) desktop = Desktop.objects.get(owner__username=username, slug=desktop_slug) desktop.name = new_name desktop.slug = new_slug desktop.save() #user_desktops_changed.send(sender=DesktopAPI, username=username) return Result(url=desktop.get_absolute_url())
def _create(request, view_name='create_account'): td = {} td['form_url'] = reverse(view_name) form = request.POST.get errors = defaultdict(list) invite = slugify(request.GET.get('invite', '').strip()) if invite: td['invite'] = invite def add_error(field, error): errors[field].append(error) if request.method == "POST": invite = form('invite', '').strip() first_name = form('first_name', '').strip() last_name = form('last_name', '').strip() email = form('email', '').strip() username = slugify(form('username', '').strip().lower()) password = form('password', '') password_check = form('password_check', '') if settings.REQUIRE_INVITE: if not invite: add_error('invite', 'Invite code is required') else: try: Invite.check(invite) except InviteError, e: add_error('invite', str(e)) if not first_name: add_error('first_name', "First name is required") if not email: add_error('email', 'Email is required') elif not email_re.match(email): add_error('email', "Doesn't look like an email") if email: try: user = User.objects.get(email=email) except User.DoesNotExist: pass else: add_error('email', 'An account with this email address already exists') if username: try: user = User.objects.get(username=username) except User.DoesNotExist: pass else: add_error('username', 'An account with this username address already exists') if not username: add_error('username', 'Username is required') elif len(username) <= 3: add_error('username', 'Username is too short (must be greater than 3 characters)') elif is_reserved_path(username): add_error('username', 'Sorry, this username is reserved') if not password: add_error('password', 'Password is required') elif len(password) <= 3: add_error('password', 'Password is too short (must be greater than 3 characters)') if password != password_check: add_error('password_check', 'Passwords do not match') password = password_check = '' td.update( invite=invite, first_name=first_name, last_name=last_name, email=email, username=username, password=password, password_check=password_check ) if not errors: try: if settings.REQUIRE_INVITE: Invite.use(invite) new_profile = Profile.create( username, password, email, first_name=first_name, last_name=last_name ) except InviteError, e: add_error('invite', str(e)) except ValueError, e: field, msg = str(e).split(':') add_error(field, msg)