Esempio n. 1
0
File: auth.py Progetto: boxed/curia
def embed_data(value):
    import re
    links = list(re.finditer(r'(\[(.*?)\])', value)) # list() because we might need to reverse it later
    
    # examples of use:
    # [images/groups/1/sets/3]

    from django.core import urlresolvers
    from django.conf import settings

    links.reverse() # replace from the end as to not change the string in a way that interferes with the following replace operation
    for link in links:
        resolver = urlresolvers.RegexURLResolver(r'^/', settings.ROOT_URLCONF)
        callback, callback_args, callback_kwargs = resolver.resolve('/'+link.groups()[1]+'/')
        class Foo:
            pass
        request = Foo()
        from curia.authentication import get_public_user
        request.user = get_public_user()
        request.external = True
        request.community = None
        request.META = {'PATH_INFO':link.groups()[1]}
        request.domain = ''
        request.domain = ''
        request.mode = 'embed'
        request.GET = {}
        request.REQUEST = {}
        response = callback(request, *callback_args, **callback_kwargs)
        #replaced = get_content_for(link.groups()[1])
        # foo = dir(response)
        # bar = response.content
        value = value.replace(link.groups()[0], response.content)
            
    return value
Esempio n. 2
0
File: views.py Progetto: boxed/curia
def add_menu_item(request):
    check_perm(request.user, request.community, 'administrate homepage')
    owner_group = request.community
    owner_user = request.user

    choices = [(None, _('<No parent>'))]
    choices.extend([(x.id, x.title)
                    for x in MenuItem.objects.filter(group=owner_group,
                                                     parent__isnull=True)])

    class MenuForm(django.forms.Form):
        parent = django.forms.ChoiceField(required=False, choices=choices)
        title = django.forms.CharField(required=True, label=_('Title'))
        contents = django.forms.CharField(required=False,
                                          widget=django.forms.Textarea,
                                          label=_('Text'))

    if request.POST:
        form = MenuForm(request.POST)

        if form.is_valid():
            from curia.documents.models import Document, Version
            from curia.authentication import grant_access, get_public_user

            # create document
            document = Document.objects.create(owner_group=owner_group,
                                               owner_user=owner_user,
                                               is_presentation=False)
            new_version = Version(document=document,
                                  title=form.cleaned_data['title'],
                                  contents=form.cleaned_data['contents'],
                                  owner=request.user)
            new_version.save()

            # set up access rights
            grant_access(command='view', user=get_public_user(), obj=document)

            # create menu item
            parent = None
            if form.cleaned_data['parent'] != 'None':
                parent = MenuItem.objects.get(pk=form.cleaned_data['parent'])
            MenuItem.objects.create(group=owner_group,
                                    content_type=get_content_type(document),
                                    object_id=document.id,
                                    title=form.cleaned_data['title'],
                                    url=document.get_absolute_url(),
                                    order=0,
                                    parent=parent)

            return HttpResponseRedirect("/")
    else:
        initial = {}
        if MenuItem.objects.count() == 0:
            initial['title'] = _('Home')
        form = MenuForm(initial=initial)

    return render_to_response(request, 'homepage/add_menu_item.html',
                              {'form': form})
Esempio n. 3
0
File: views.py Progetto: boxed/curia
def register(request):    
    class RegisterForm(django.forms.Form):
        email =  django.forms.CharField(label=_('E-mail address'))

    if request.POST:
        form = RegisterForm(request.POST)

        # validate email
        email = form.data['email']
        if not EmailValidator(email):
            form.errors['email'].append(_('%s is not a valid email address') % email)

        if form.is_valid():
            email = form.cleaned_data['email']

            password = None
            try:
                user = User.objects.get(email=email)
                return HttpResponseRedirect('/registration/request_new_password/')
            except User.DoesNotExist:
                password = User.objects.make_random_password(6)
                user = User.objects.create(email=email, username=User.objects.make_random_password(30), is_active=False)     
                user.set_password(password)
                user.save()

            if Invite.objects.filter(group=request.community, user=user, choice='-').count() == 0:
                Invite.objects.create(user=user, group=request.community, inviter=get_public_user(), message='')

            from django.template import loader, Context

            t = loader.get_template('registration/register_email.html')
            c = {
                'password': password,
                'email': email,
                'domain': request.domain,
                'community': request.community,
                } 
            subject =  _('Confirm e-mail for %s') % request.community
            html_message = t.render(Context(c))

            from curia.html2text import html2text
            from curia.mail import send_html_mail_with_attachments
            text_message = html2text(html_message)
            from django.contrib.sites.models import Site
            send_html_mail_with_attachments(subject=subject, message=text_message, html_message=html_message, from_email='register@'+Site.objects.get_current().domain, recipient_list=[email])

            return render_to_response(request, 'registration/register_email_sent.html', {})
    else:
        form = RegisterForm(initial={})

    return render_to_response(request, 'registration/register.html', {'form':form})
Esempio n. 4
0
File: views.py Progetto: boxed/curia
def external(request):
    if request.community == None:
        return render_to_response(request, '404_community.html')

    # get first menu item and display it
    from curia.homepage.models import MenuItem
    try:
        home = MenuItem.objects.filter(parent__isnull=True, group=request.community)[0]
        from curia.documents.views import version_response, get_latest
        v = get_latest(home.object_id)
        check_access(get_public_user(), obj=v.document, command='view')
        if v == None:
            raise Http404
        return version_response(request, v)
    except IndexError:
        return render_to_response(request, 'no_external_page_error.html')
Esempio n. 5
0
File: views.py Progetto: boxed/curia
def external(request):
    if request.community == None:
        return render_to_response(request, '404_community.html')

    # get first menu item and display it
    from curia.homepage.models import MenuItem
    try:
        home = MenuItem.objects.filter(parent__isnull=True,
                                       group=request.community)[0]
        from curia.documents.views import version_response, get_latest
        v = get_latest(home.object_id)
        check_access(get_public_user(), obj=v.document, command='view')
        if v == None:
            raise Http404
        return version_response(request, v)
    except IndexError:
        return render_to_response(request, 'no_external_page_error.html')
Esempio n. 6
0
File: views.py Progetto: boxed/curia
def add_menu_item(request):
    check_perm(request.user, request.community, 'administrate homepage')
    owner_group = request.community
    owner_user = request.user
    
    choices = [(None, _('<No parent>'))]
    choices.extend([(x.id,x.title) for x in MenuItem.objects.filter(group=owner_group, parent__isnull=True)])
    
    class MenuForm(django.forms.Form):
        parent = django.forms.ChoiceField(required=False, choices=choices)
        title = django.forms.CharField(required=True, label=_('Title'))
        contents = django.forms.CharField(required=False, widget = django.forms.Textarea, label=_('Text'))

    if request.POST:
        form = MenuForm(request.POST)
        
        if form.is_valid():
            from curia.documents.models import Document, Version
            from curia.authentication import grant_access, get_public_user
            
            # create document
            document = Document.objects.create(owner_group=owner_group, owner_user=owner_user, is_presentation=False)
            new_version = Version(document=document,title=form.cleaned_data['title'], contents=form.cleaned_data['contents'], owner=request.user)
            new_version.save()
            
            # set up access rights
            grant_access(command='view', user=get_public_user(), obj=document)
            
            # create menu item
            parent = None
            if form.cleaned_data['parent'] != 'None':
                parent = MenuItem.objects.get(pk=form.cleaned_data['parent'])
            MenuItem.objects.create(group=owner_group, content_type=get_content_type(document), object_id=document.id, title=form.cleaned_data['title'], url=document.get_absolute_url(), order=0, parent=parent)
            
            return HttpResponseRedirect("/")
    else:
        initial = {}
        if MenuItem.objects.count() == 0:
            initial['title'] = _('Home')
        form = MenuForm(initial=initial)
    
    return render_to_response(request, 'homepage/add_menu_item.html', {'form':form})
Esempio n. 7
0
def embed_data(value):
    import re
    links = list(
        re.finditer(r'(\[(.*?)\])',
                    value))  # list() because we might need to reverse it later

    # examples of use:
    # [images/groups/1/sets/3]

    from django.core import urlresolvers
    from django.conf import settings

    links.reverse(
    )  # replace from the end as to not change the string in a way that interferes with the following replace operation
    for link in links:
        resolver = urlresolvers.RegexURLResolver(r'^/', settings.ROOT_URLCONF)
        callback, callback_args, callback_kwargs = resolver.resolve(
            '/' + link.groups()[1] + '/')

        class Foo:
            pass

        request = Foo()
        from curia.authentication import get_public_user
        request.user = get_public_user()
        request.external = True
        request.community = None
        request.META = {'PATH_INFO': link.groups()[1]}
        request.domain = ''
        request.domain = ''
        request.mode = 'embed'
        request.GET = {}
        request.REQUEST = {}
        response = callback(request, *callback_args, **callback_kwargs)
        #replaced = get_content_for(link.groups()[1])
        # foo = dir(response)
        # bar = response.content
        value = value.replace(link.groups()[0], response.content)

    return value
Esempio n. 8
0
File: views.py Progetto: boxed/curia
def accept(request):
    from django.conf import settings
    try:    REGISTRATION_FIELDS = settings.REGISTRATION_FIELDS
    except: REGISTRATION_FIELDS = ('name', 'birthday', 'gender', 'password')
    try:    REGISTRATION_DETAILS = settings.REGISTRATION_DETAILS
    except: REGISTRATION_DETAILS = ()
    
    class EnterCodeForm(django.forms.Form):
        if 'code' in request.REQUEST:
            if 'name' in REGISTRATION_FIELDS:
                first_name = django.forms.CharField(max_length=30,required=True, label=_('First name'))
                last_name = django.forms.CharField(max_length=30,required=True, label=_('Last name'))
            if 'birthday' in REGISTRATION_FIELDS:
                birthday = django.forms.DateField(required=False, label=_('Birthday'), help_text=_('Format is yyyy-MM-dd, e.g. 1980-05-27'))
            if 'gender' in REGISTRATION_FIELDS:
                gender = django.forms.ChoiceField(label=_('Gender'), choices=(('M', 'Male'), ('F', 'Female'),))
            if 'password' in REGISTRATION_FIELDS:
                password = django.forms.CharField(max_length=30,required=True,widget = django.forms.PasswordInput, label=_('Password'))
                confirm_password = django.forms.CharField(max_length=30,required=True,widget = django.forms.PasswordInput, label=_('Confirm password'))
            code = django.forms.CharField(max_length=30,required=True,widget = django.forms.HiddenInput, label=_('code'))
        else:
            password = django.forms.CharField(max_length=30,required=True,widget = django.forms.PasswordInput, label=_('Password'))
        email = django.forms.CharField(max_length=150,required=True,widget = django.forms.HiddenInput, label=_('email'))
        user_contract = django.forms.BooleanField(required=False, widget=CheckboxInput(attrs={'label':_('I have read and accepted the <a href="/registration/user_agreement/" target="blank">user agreement</a>')}), label='')

    if request.POST:
        form = EnterCodeForm(request.REQUEST)
        
        try: 
            form.data["user_contract"]
        except:
            form.errors['user_contract'] = (_("You must accept the user agreement."),)

        try:
            user = User.objects.get(email=request.REQUEST['email'])
            invites = Invite.objects.filter(group=request.community, user=user)
            if len(invites) == 0:
                form.errors['password'] = (_('You have not been invited to this community'),)
                
            if 'code' in request.REQUEST:
                if not user.check_password(request.REQUEST['code']):
                    raise User.DoesNotExist()
            else:
                if not user.check_password(request.REQUEST['password']):
                    raise User.DoesNotExist()
        except User.DoesNotExist:
            form.errors['password'] = (_('Username or password incorrect'),)            
        
        if 'code' in request.REQUEST and form.data['password'] != form.data['confirm_password']:
            form.errors['confirm'] = (_('Passwords did not match.'),)
            
        if form.is_valid():
            if 'code' in request.REQUEST:
                # set user details
                if 'name' in REGISTRATION_FIELDS:
                    user.first_name = form.cleaned_data["first_name"]
                    user.last_name = form.cleaned_data["last_name"]
                user.set_password(form.cleaned_data['password'])
                user.is_active = True
                user.save()
                
                if 'birthday' in REGISTRATION_FIELDS:
                    birthday = form.cleaned_data['birthday']
                else:
                    birthday = None
                if 'gender' in REGISTRATION_FIELDS:
                    gender = form.cleaned_data['gender']
                else:
                    gender = '-'
                meta_user = MetaUser.objects.create(user=user, birthday=birthday, gender=gender)
                #meta_user.picture = 'user-pictures/default_user_image.png'
                #meta_user.thumbnail = 'user-thumbnails/default_user_image.png'
                #meta_user.icon = 'user-icons/default_user_image.png'
                meta_user.language = 'sv'
                meta_user.save()
                
                if 'curia.notifications' in settings.INSTALLED_APPS:
                    Bookmark.objects.create(user=user, url='/users/'+str(user.id)+'/', title=user.first_name)
            
            for member in request.community.user_set.all():
                if member != user:
                    u = get_current_user()
                    if u.is_anonymous():
                        u = get_public_user()
                    SubscriptionResult.objects.create(user=member, content_type=get_content_type(user), object_id=user.pk, originator_user=u, originator_group=get_current_community())

            community = request.community
            community.user_set.add(user)
            community.save()
            everyone = get_everyone_group()
            everyone.user_set.add(user)
            everyone.save()

            #Create invite for each event in the group that has not already passed
            #start_span = start_of_day(datetime.now())-timedelta(hours=3)
            #end_span = start_span+timedelta(weeks=52)
            #active_events = Event.objects.filter(owner_group=community, start_time__lt=end_span, end_time__gt=start_span, repeat='', deleted=False)
            
            #for event in active_events:
            #    Reply.objects.create(inviter=community.meta.created_by, event=event, user=user)
                
            for invite in invites:
                invite.choice = 'Y'
                invite.save()
             
            from django.contrib.auth import authenticate
            user = authenticate(username=user.username, password=form.cleaned_data['password'])
            login(request, user)
            
            try:
                if community.meta.created_by == user and settings.REGISTRATION_SYSTEM == 'invite': 
                    return HttpResponseRedirect('%s/registration/' % community.get_absolute_url())
            except:
                pass
            try:
                return HttpResponseRedirect(settings.REGISTRATION_NEXT)
            except:
                return HttpResponseRedirect(community.get_absolute_url())
                
    else:
        initial = {}
        if 'code' in request.REQUEST:
            initial['code'] = request.REQUEST['code']
        initial['email'] = request.REQUEST['email']
        form = EnterCodeForm(initial=initial)
    
    return render_to_response(request, 'registration/enter_code.html', {'form': form, 'email':request.REQUEST['email'], 'disable_login_box':True})