예제 #1
0
 def verify_email(self):
     email = self.request.params["email"]
     verification = EmailVerification(email)
     DBSession.add(verification)
     DBSession.flush()
     user = verification.email.user
     mailer = self.request.registry["mailer"]
     message = Message(
         recipients=[email],
         subject="%s email verification" % self.request.registry.settings["site_title"],
         body=render_template(
             "../templates/account/verify_email.txt", view=self, request=self.request, verification=verification
         ),
     )
     mailer.send(message)
     return dict(verification=verification)
예제 #2
0
 def create(self):
     # TODO Determine user timezone as default
     form = Form(self.request, schema=AccountCreateSchema)
     if form.validate():
         new_user = form.bind(User())
         DBSession.add(new_user)
         new_email = form.bind(EmailAddress())
         new_email.user = new_user
         DBSession.add(new_email)
         new_collection = Collection()
         new_collection.name = 'Default'
         new_collection.owner = new_user.full_name
         owner_role = DBSession.query(Role).filter(Role.id == 'owner').one()
         new_user.collections[new_collection] = owner_role
         return HTTPFound(location=self.request.route_url(
             'account_verify_email', _query=dict(email=form.data['email'])))
     return dict(form=FormRenderer(form))
예제 #3
0
 def create(self):
     form = Form(
         self.request,
         schema=CollectionCreateSchema,
         variable_decode=True,
         defaults=dict(owner=self.request.user.full_name))
     if form.validate():
         new_collection = form.bind(Collection())
         # Hard-code ownership to currently authenticated user
         new_collection.users[self.request.user] = DBSession.query(Role).\
             filter(Role.id==OWNER_ROLE).one()
         DBSession.add(new_collection)
         DBSession.flush()
         return HTTPFound(
             location=self.request.route_url(
                 'collections_view', collection_id=new_collection.id))
     return dict(form=FormRenderer(form))
예제 #4
0
 def create(self):
     # TODO Determine user timezone as default
     form = Form(self.request, schema=AccountCreateSchema)
     if form.validate():
         new_user = form.bind(User())
         DBSession.add(new_user)
         new_email = form.bind(EmailAddress())
         new_email.user = new_user
         DBSession.add(new_email)
         new_collection = Collection()
         new_collection.name = "Default"
         new_collection.owner = new_user.full_name
         owner_role = DBSession.query(Role).filter(Role.id == "owner").one()
         new_user.collections[new_collection] = owner_role
         return HTTPFound(
             location=self.request.route_url("account_verify_email", _query=dict(email=form.data["email"]))
         )
     return dict(form=FormRenderer(form))
예제 #5
0
 def verify_email(self):
     email = self.request.params['email']
     verification = EmailVerification(email)
     DBSession.add(verification)
     DBSession.flush()
     user = verification.email.user
     mailer = self.request.registry['mailer']
     message = Message(
         recipients=[email],
         subject='%s email verification' %
         self.request.registry.settings['site_title'],
         body=render(renderer_name='../templates/account/verify_email.txt',
                     value=dict(view=self,
                                request=self.request,
                                verification=verification),
                     request=self.request))
     mailer.send(message)
     return dict(verification=verification)
예제 #6
0
 def split(self):
     sample = self.context.sample
     form = Form(
         self.request,
         schema=SampleSplitSchema,
         obj=sample,
         defaults=dict(aliquots=2),
         variable_decode=True)
     if form.validate():
         # XXX Check for EDIT_COLLECTION on new collection
         aliquots = sample.split(
             self.request.user, form.data['collection'],
             form.data['aliquots'], form.data['aliquant'],
             location=form.data['location'])
         for aliquot in aliquots:
             DBSession.add(aliquot)
         return HTTPFound(
             location=self.request.route_url(
                 'samples_view', sample_id=sample.id))
     return dict(form=FormRenderer(form))
예제 #7
0
 def verify_email(self):
     email = self.request.params['email']
     verification = EmailVerification(email)
     DBSession.add(verification)
     DBSession.flush()
     user = verification.email.user
     mailer = self.request.registry['mailer']
     message = Message(
         recipients=[email],
         subject='%s email verification' % self.request.registry.settings['site_title'],
         body=render(
             renderer_name='../templates/account/verify_email.txt',
             value=dict(
                 view=self,
                 request=self.request,
                 verification=verification
                 ),
             request=self.request))
     mailer.send(message)
     return dict(verification=verification)
예제 #8
0
 def split(self):
     sample = self.context.sample
     form = Form(
         self.request,
         schema=SampleSplitSchema,
         obj=sample,
         defaults=dict(aliquots=2),
         variable_decode=True)
     if form.validate():
         # XXX Check for EDIT_COLLECTION on new collection
         aliquots = sample.split(
             self.request.user, form.data['collection'],
             form.data['aliquots'], form.data['aliquant'],
             location=form.data['location'])
         for aliquot in aliquots:
             DBSession.add(aliquot)
         return HTTPFound(
             location=self.request.route_url(
                 'samples_view', sample_id=sample.id))
     return dict(form=FormRenderer(form))
예제 #9
0
 def create(self):
     form = Form(
         self.request,
         schema=SampleCreateSchema,
         variable_decode=True,
         multipart=True)
     if form.validate():
         # XXX Check for EDIT_COLLECTION on selected collection
         # XXX Should be using form collection below
         new_sample = form.bind(
             Sample.create(self.request.user, self.context.collection))
         DBSession.add(new_sample)
         DBSession.flush() # to generate sample.id
         for storage in self.request.POST.getall('attachments'):
             if storage:
                 new_sample.attachments.create(storage.filename, storage.file)
         return HTTPFound(
             location=self.request.route_url(
                 'samples_view', sample_id=new_sample.id))
     return dict(form=FormRenderer(form))
예제 #10
0
def init_instances():
    with transaction.manager:
        admins_group = Group(
            id=ADMINS_GROUP, description='Group of administrators')
        unlimited_limit = UserLimit(
            id='unlimited', collections_limit=1000000, samples_limit=1000000,
            templates_limit=1000000, storage_limit=50000 * 1000000)
        commercial_limit = UserLimit(
            id='commercial', collections_limit=1000, samples_limit=10000,
            templates_limit=10, storage_limit=10000 * 1000000)
        academic_limit = UserLimit(
            id='academic', collections_limit=10, samples_limit=250,
            templates_limit=5, storage_limit=100 * 1000000,
            email_pattern=r'.*\.(edu|ac\.[a-z][a-z])$')
        free_limit = UserLimit(
            id='free', collections_limit=3, samples_limit=50,
            templates_limit=2, storage_limit=1 * 1000000)
        admin_user = User(
            salutation='', given_name='Administrator', surname='',
            limits_id='unlimited')
        admin_email = EmailAddress(
            email='*****@*****.**', verified=datetime.utcnow())
        admin_collection = Collection(name='Default', owner='Administrator')
        owner_role = Role(
            id=OWNER_ROLE,
            description='Owner and administrator of the collection')
        editor_role = Role(
            id=EDITOR_ROLE,
            description='Can add and remove samples from a collection, but '
                        'cannot administer members of the collection')
        auditor_role = Role(
            id=AUDITOR_ROLE,
            description='Can audit samples within the collection but cannot '
                        'manipulate the collection')
        viewer_role = Role(
            id=VIEWER_ROLE,
            description='Can view samples within the collection but cannot '
                        'manipulate the collection')
        DBSession.add(admins_group)
        DBSession.add(unlimited_limit)
        DBSession.add(commercial_limit)
        DBSession.add(academic_limit)
        DBSession.add(free_limit)
        DBSession.add(admin_user)
        DBSession.add(admin_email)
        DBSession.add(admin_collection)
        DBSession.add(owner_role)
        DBSession.add(editor_role)
        DBSession.add(auditor_role)
        DBSession.add(viewer_role)
        admins_group.users.append(admin_user)
        admin_user.emails.append(admin_email)
        admin_user.password = '******'
        admin_user.collections[admin_collection] = owner_role
예제 #11
0
def init_instances():
    with transaction.manager:
        admins_group = Group(id=ADMINS_GROUP,
                             description='Group of administrators')
        unlimited_limit = UserLimit(id='unlimited',
                                    collections_limit=1000000,
                                    samples_limit=1000000,
                                    templates_limit=1000000,
                                    storage_limit=50000 * 1000000)
        commercial_limit = UserLimit(id='commercial',
                                     collections_limit=1000,
                                     samples_limit=10000,
                                     templates_limit=10,
                                     storage_limit=10000 * 1000000)
        academic_limit = UserLimit(id='academic',
                                   collections_limit=10,
                                   samples_limit=250,
                                   templates_limit=5,
                                   storage_limit=100 * 1000000,
                                   email_pattern=r'.*\.(edu|ac\.[a-z][a-z])$')
        free_limit = UserLimit(id='free',
                               collections_limit=3,
                               samples_limit=50,
                               templates_limit=2,
                               storage_limit=1 * 1000000)
        admin_user = User(salutation='',
                          given_name='Administrator',
                          surname='',
                          limits_id='unlimited')
        admin_email = EmailAddress(email='*****@*****.**',
                                   verified=datetime.utcnow())
        admin_collection = Collection(name='Default', owner='Administrator')
        owner_role = Role(
            id=OWNER_ROLE,
            description='Owner and administrator of the collection')
        editor_role = Role(
            id=EDITOR_ROLE,
            description='Can add and remove samples from a collection, but '
            'cannot administer members of the collection')
        auditor_role = Role(
            id=AUDITOR_ROLE,
            description='Can audit samples within the collection but cannot '
            'manipulate the collection')
        viewer_role = Role(
            id=VIEWER_ROLE,
            description='Can view samples within the collection but cannot '
            'manipulate the collection')
        DBSession.add(admins_group)
        DBSession.add(unlimited_limit)
        DBSession.add(commercial_limit)
        DBSession.add(academic_limit)
        DBSession.add(free_limit)
        DBSession.add(admin_user)
        DBSession.add(admin_email)
        DBSession.add(admin_collection)
        DBSession.add(owner_role)
        DBSession.add(editor_role)
        DBSession.add(auditor_role)
        DBSession.add(viewer_role)
        admins_group.users.append(admin_user)
        admin_user.emails.append(admin_email)
        admin_user.password = '******'
        admin_user.collections[admin_collection] = owner_role