Exemplo n.º 1
0
    def test_accountant_mail(self):
        """
        test encryption of email payload
        """
        from c3sintent.utils import accountant_mail
        my_appstruct = {
            'activity': ['composer', 'dj'],
            'firstname': 'John',
            'lastname': 'Doe',
            'address1': 'In the Middle',
            'address2': 'Of Nowhere',
            'postCode': '12345',
            'city': 'Town',
            'email': '*****@*****.**',
            'country': 'af',
            'at_least_three_works': 'yes',
            'member_of_colsoc': 'yes',
            'understood_declaration': 'yes',
            'consider_joining': 'yes',
            'noticed_dataProtection': 'yes'
            }
        result = accountant_mail(my_appstruct)
        from pyramid_mailer.message import Message

        self.assertTrue(isinstance(result, Message))
        self.assertTrue('*****@*****.**' in result.recipients)
        self.assertTrue('-----BEGIN PGP MESSAGE-----' in result.body)
        self.assertTrue('-----END PGP MESSAGE-----' in result.body)
        self.assertTrue('[c3s] Yes! a new letter of intent' in result.subject)
        self.assertEquals('*****@*****.**', result.sender)
Exemplo n.º 2
0
def show_success_pdf(request):
    """
    This view just returns a PDF, given there is valid info in session
    """
    #check if user has used form or 'guessed' this URL
    if ('appstruct' in request.session):
        # we do have valid info from the form in the session
        #print("-- valid session with data found")
        # send mail to accountants // prepare a mailer
        mailer = get_mailer(request)
        # prepare mail
        appstruct = request.session['appstruct']
        the_mail = accountant_mail(appstruct)
        mailer.send(the_mail)

        return generate_pdf(request.session['appstruct'])
    # 'else': send user to the form
    #print("-- no valid session with data found")
    return HTTPFound(location=request.route_url('intent'))
Exemplo n.º 3
0
def show_success_pdf(request):
    """
    This view just returns a PDF, given there is valid info in session
    """
    #check if user has used form or 'guessed' this URL
    if ('appstruct' in request.session):
        # we do have valid info from the form in the session
        #print("-- valid session with data found")
        # send mail to accountants // prepare a mailer
        mailer = get_mailer(request)
        # prepare mail
        appstruct = request.session['appstruct']
        the_mail = accountant_mail(appstruct)
        mailer.send(the_mail)

        return generate_pdf(request.session['appstruct'])
    # 'else': send user to the form
    #print("-- no valid session with data found")
    return HTTPFound(location=request.route_url('intent'))
Exemplo n.º 4
0
    def test_accountant_mail(self):
        """
        test encryption of email payload
        """
        from c3sintent.utils import accountant_mail
        my_appstruct = {
            'activity': ['composer', 'dj'],
            'firstname': 'John',
            'lastname': 'Doe',
            'address1': 'In the Middle',
            'address2': 'Of Nowhere',
            'postCode': '12345',
            'city': 'Town',
            'email': '*****@*****.**',
            'region': 'Hessen',
            'country': 'af',
            'at_least_three_works': 'yes',
            'member_of_colsoc': 'yes',
            'understood_declaration': 'yes',
            'consider_joining': 'yes',
            'noticed_dataProtection': 'yes'
            }
        result = accountant_mail(my_appstruct)
        from pyramid_mailer.message import Message

        self.assertTrue(isinstance(result, Message))
        self.assertTrue('*****@*****.**' in result.recipients)
        self.failUnless('-----BEGIN PGP MESSAGE-----' in result.body,
                        'something missing in the mail body!')
        self.failUnless('-----END PGP MESSAGE-----' in result.body,
                        'something missing in the mail body!')
        self.failUnless(
            '[c3s] Yes! a new letter of intent' in result.subject,
                        'something missing in the mail body!')
        self.failUnless('*****@*****.**' == result.sender,
                        'something missing in the mail body!')
Exemplo n.º 5
0
def declare_intent(request):

    # if another language was chosen by clicking on a flag
    # the add_locale_to_cookie subscriber has planted an attr on the request
    if hasattr(request, '_REDIRECT_'):
        #print("request._REDIRECT_: " + str(request._REDIRECT_))

        _query = request._REDIRECT_
        #print("_query: " + _query)
        # set language cookie
        request.response.set_cookie('_LOCALE_', _query)
        request._LOCALE_ = _query
        locale_name = _query
        #print("locale_name (from query_string): " + locale_name)
        from pyramid.httpexceptions import HTTPFound
        #print("XXXXXXXXXXXXXXX ==> REDIRECTING ")
        return HTTPFound(location=request.route_url('intent'),
                         headers=request.response.headers)
    # # if another language was chosen, pick it
    # if request._REDIRECT_ is not '':
    #     print("request.query_string: " + str(request.query_string))
    #     _query = request.query_string
    #     print("_query: " + _query)
    #     # set language cookie
    #     request.response.set_cookie('_LOCALE_', _query)
    #     request._LOCALE_ = _query
    #     locale_name = _query
    #     print("locale_name (from query_string): " + locale_name)
    #     from pyramid.httpexceptions import HTTPFound
    #     print("XXXXXXXXXXXXXXX ==> REDIRECTING ")
    #     return HTTPFound(location=request.route_url('intent'),
    #                      headers=request.response.headers)
    else:
        #locale_name = request._LOCALE_
        locale_name = get_locale_name(request)
        #print("locale_name (from request): " + locale_name)

    # check if user clicked on language symbol to have page translated
    # #print("request.query_string: " + str(request.query_string))
    # if 'l' in request.query_string:
    #     print("request.query_string: " + str(request.query_string))
    #     print("request.query_string[0]: " + str(request.query_string[0]))

    # from pyramid.httpexceptions import HTTPFound
    # if (request.query_string == '_LOCALE_=%s' % (locale_name)) or (
    #     request.query_string == 'l=%s' % (locale_name)):
    #     # set language cookie
    #     request.response.set_cookie('_LOCALE_', locale_name)
    #     return HTTPFound(location=request.route_url('intent'),
    #                      headers=request.response.headers)

    if DEBUG:  # pragma: no cover
        print "-- locale_name: " + str(locale_name)

    country_codes = [
        ('AT', _(u'Austria')),
        ('BE', _(u'Belgium')),
        ('BG', _(u'Bulgaria')),
        ('CH', _(u'Switzerland')),
        ('CZ', _(u'Czech Republic')),
        ('DE', _(u'Germany')),
        ('DK', _(u'Denmark')),
        ('ES', _(u'Spain')),
        ('EE', _(u'Estonia')),
        ('FI', _(u'Finland')),
        ('FR', _(u'France')),
        ('GB', _(u'United Kingdom')),
        ('GR', _(u'Greece')),
        ('HU', _(u'Hungary')),
        ('HR', _(u'Croatia')),
        ('IL', _(u'Israel')),
        ('IE', _(u'Ireland')),
        ('IT', _(u'Italy')),
        ('LT', _(u'Lithuania')),
        ('LV', _(u'Latvia')),
        ('LU', _(u'Luxembourg')),
        ('MT', _(u'Malta')),
        ('NL', _(u'Netherlands')),
        ('PL', _(u'Poland')),
        ('PT', _(u'Portugal')),
        ('SK', _(u'Slovakia')),
        ('SI', _(u'Slovenia')),
        ('SE', _(u'Sweden'))
        ]

   # set default of Country select widget according to locale
    LOCALE_COUNTRY_MAPPING = {
        'de': 'DE',
        'da': 'DK',
        'en': 'GB',
        'es': 'ES',
        'fr': 'FR',
        }
    country_default = LOCALE_COUNTRY_MAPPING.get(locale_name)
    if DEBUG:  # pragma: no cover
        print("== locale is :" + str(locale_name))
        print("== choosing :" + str(country_default))

    class DeclarationOfIntent(colander.MappingSchema):
        """
        colander schema for declaration of intent/ application form
        """
        firstname = colander.SchemaNode(colander.String(),
                                       title=_(u"First Name"))
        lastname = colander.SchemaNode(colander.String(),
                                       title=_(u"Last Name"))
        type_of_creator = (('composer', _(u'composer')),
                           ('lyricist', _(u'lyricist')),
                           ('musician', _(u'musician')),
                           ('music producer', _(u'music producer')),
                           ('remixer', _(u'remixer')),
                           ('dj', _(u'DJ')))

        activity = colander.SchemaNode(
            deform.Set(),
            title=_(
                u'Yes, I am musically active as a '
                '(multiple selection possible)'),
            widget=deform.widget.CheckboxChoiceWidget(values=type_of_creator))

        yes_no = (('yes', _(u'Yes')),
                  ('no', _(u'No')))

        at_least_three_works = colander.SchemaNode(
            colander.String(),
            title=_(u'I have been the (co-)creator of at least three titles '
                    'in one of the functions mentioned under (1)'),
            validator=colander.OneOf([x[0] for x in yes_no]),
            widget=deform.widget.RadioChoiceWidget(values=yes_no))
        member_of_colsoc = colander.SchemaNode(
            colander.String(),
            title=_(u'I am a member of a collecting society.'),
            validator=colander.OneOf([x[0] for x in yes_no]),
            widget=deform.widget.RadioChoiceWidget(values=yes_no),
            )
        email = colander.SchemaNode(colander.String(),
                                    title=_(u'Email'),
                                    validator=colander.Email())
        address1 = colander.SchemaNode(colander.String(),
                                       title=_(u'Street & No.'))
        address2 = colander.SchemaNode(colander.String(),
                                       missing=unicode(''),
                                       title=_(u"address cont'd"))
        postCode = colander.SchemaNode(colander.String(),
                                       title=_(u'Post Code'))
        city = colander.SchemaNode(colander.String(),
                                   title=_(u'City'))
        region = colander.SchemaNode(
            colander.String(),
            title=_(u'Federal State / Province / County'),
            missing=unicode(''))
        country = colander.SchemaNode(colander.String(),
                                      title=_(u'Country'),
                                      default=country_default,
                                      widget=deform.widget.SelectWidget(
                values=country_codes),)
        #print(country_codes())
        understood_declaration = colander.SchemaNode(
            colander.String(),
            title=_(u'I have read and understood the text of the '
                    'declaration of intent.'),
#            validator=colander.OneOf(),
            widget=deform.widget.CheckboxChoiceWidget(
                values=(('yes', _(u'Yes')),)),
            )
        consider_joining = colander.SchemaNode(
            colander.String(),
            title=_(u'I seriously consider to join the C3S and want to '
                    'be notified via e-mail about its foundation.'),
#            validator=colander.OneOf([x[0] for x in yes_no]),
            widget=deform.widget.CheckboxChoiceWidget(
                values=(('yes', _(u'Yes')),)),
            )
        noticed_dataProtection = colander.SchemaNode(
            colander.String(),
            title=_(u'I have taken note of the Data Protection Declaration '
                    'which is part of this text and can be read separately '
                    'at http://www.c3s.cc/disclaimer-en.html and agree with '
                    'it. I know that I may revoke this consent at any time.'),
#            validator=colander.OneOf([x[0] for x in yes_no]),
            widget=deform.widget.CheckboxChoiceWidget(
                values=(('yes', _(u'Yes')),)),
            )
        _LOCALE_ = colander.SchemaNode(colander.String(),
                                       widget=deform.widget.HiddenWidget(),
                                       default=locale_name)

    schema = DeclarationOfIntent()

    form = deform.Form(schema,
                       buttons=[deform.Button('submit', _(u'Submit'))],
                       use_ajax=True,
                       renderer=zpt_renderer
                       )

    if 'submit' in request.POST:
        controls = request.POST.items()
        try:
            appstruct = form.validate(controls)
            if DEBUG:  # pragma: no cover
                print(appstruct)
        except ValidationFailure, e:
            print(e)
            #message.append(
            request.session.flash(
                _(u"Please note: There were errors, "
                  "please check the form below."),
                'message_above_form',
                allow_duplicate=False)
            return{'form': e.render()}

        # send mail to accountants // prepare a mailer
        mailer = get_mailer(request)
        # prepare mail
        the_mail = accountant_mail(appstruct)
        mailer.send(the_mail)

        return generate_pdf(appstruct)
Exemplo n.º 6
0
def declare_intent(request):

    locale_name = get_locale_name(request)

    # check if user clicked on language symbol to have page translated
    #print("request.query_string: " + str(request.query_string))
    from pyramid.httpexceptions import HTTPFound
    if request.query_string == '_LOCALE_=%s' % (locale_name):
        # set language cookie
        request.response.set_cookie('_LOCALE_', locale_name)
        return HTTPFound(location=request.route_url('intent'),
                         headers=request.response.headers)

    if DEBUG:  # pragma: no cover
        print "-- locale_name: " + str(locale_name)

    # set default of Country select widget according to locale
    LOCALE_COUNTRY_MAPPING = {
        'de': 'DE',
        'en': 'GB',
        'fr': 'FR',
        }
    country_default = LOCALE_COUNTRY_MAPPING.get(locale_name)

    class DeclarationOfIntent(colander.MappingSchema):
        """
        colander schema for declaration of intent/ application form
        """
        firstname = colander.SchemaNode(colander.String(),
                                       title=_(u"First Name"))
        lastname = colander.SchemaNode(colander.String(),
                                       title=_(u"Last Name"))
        type_of_creator = (('composer', _(u'composer')),
                           ('lyricist', _(u'lyricist')),
                           ('musician', _(u'musician')),
                           ('music producer', _(u'music producer')),
                           ('remixer', _(u'remixer')),
                           ('dj', _(u'DJ')))

        activity = colander.SchemaNode(
            deform.Set(),
            title=_(
                u'Yes, I am musically active as a '
                '(multiple selection possible)'),
            widget=deform.widget.CheckboxChoiceWidget(values=type_of_creator))

        yes_no = (('yes', _(u'Yes')),
                  ('no', _(u'No')))

        at_least_three_works = colander.SchemaNode(
            colander.String(),
            title=_(u'I have been the (co-)creator of at least three titles '
                    'in one of the functions mentioned under (1)'),
            validator=colander.OneOf([x[0] for x in yes_no]),
            widget=deform.widget.RadioChoiceWidget(values=yes_no))
        member_of_colsoc = colander.SchemaNode(
            colander.String(),
            title=_(u'I am a member of a collecting society.'),
            validator=colander.OneOf([x[0] for x in yes_no]),
            widget=deform.widget.RadioChoiceWidget(values=yes_no),
            )
        email = colander.SchemaNode(colander.String(),
                                    title=_(u'Email'),
                                    validator=colander.Email())
        address1 = colander.SchemaNode(colander.String(),
                                       title=_(u'Street & No.'))
        address2 = colander.SchemaNode(colander.String(),
                                       missing=unicode(''),
                                       title=_(u"address cont'd"))
        postCode = colander.SchemaNode(colander.String(),
                                       title=_(u'Post Code'))
        city = colander.SchemaNode(colander.String(),
                                       title=_(u'City'))
        country = colander.SchemaNode(colander.String(),
                                      title=_(u'Country'),
                                      default=country_default,
                                      widget=deform.widget.SelectWidget(
                values=constants.country_codes()),)
        understood_declaration = colander.SchemaNode(
            colander.String(),
            title=_(u'I have read and understood the text of the '
                    'declaration of intent.'),
#            validator=colander.OneOf(),
            widget=deform.widget.CheckboxChoiceWidget(
                values=(('yes', _(u'Yes')),)),
            )
        consider_joining = colander.SchemaNode(
            colander.String(),
            title=_(u'I seriously consider to join the C3S and want to '
                    'be notified via e-mail about its foundation.'),
#            validator=colander.OneOf([x[0] for x in yes_no]),
            widget=deform.widget.CheckboxChoiceWidget(
                values=(('yes', _(u'Yes')),)),
            )
        noticed_dataProtection = colander.SchemaNode(
            colander.String(),
            title=_(u'I have taken note of the Data Protection Declaration '
                    'which is part of this text and can be read separately '
                    'at http://www.c3s.cc/disclaimer-en.html and agree with '
                    'it. I know that I may revoke this consent at any time.'),
#            validator=colander.OneOf([x[0] for x in yes_no]),
            widget=deform.widget.CheckboxChoiceWidget(
                values=(('yes', _(u'Yes')),)),
            )
        _LOCALE_ = colander.SchemaNode(colander.String(),
                                       widget=deform.widget.HiddenWidget(),
                                       default=locale_name)

    schema = DeclarationOfIntent()

    form = deform.Form(schema,
                       buttons=[deform.Button('submit', _(u'Submit'))],
                       use_ajax=True,
                       renderer=zpt_renderer
                       )

    if 'submit' in request.POST:
        controls = request.POST.items()
        try:
            appstruct = form.validate(controls)
            if DEBUG:  # pragma: no cover
                print(appstruct)
        except ValidationFailure, e:
            print(e)
            return{'form': e.render(), }

        # send mail to accountants
        mailer = get_mailer(request)

        the_mail = accountant_mail(appstruct)
        mailer.send(the_mail)

        return generate_pdf(appstruct)