示例#1
0
    def initialize(self):
        self.name = 'user'
        self.ensureIndices(['login', 'email', 'groupInvites.groupId', 'size',
                            'created', 'deviceId'])
        self.prefixSearchFields = (
            'login', ('firstName', 'i'), ('displayName', 'i'), 'email')
        self.ensureTextIndex({
            'login': 1,
            'displayName': 1,
            'email': 1,
        }, language='none')
        self.exposeFields(level=AccessType.READ, fields=(
            '_id', 'login', 'public', 'displayName', 'firstName', 'lastName',
            'admin', 'email', 'created')) # 🔥 delete firstName, lastName and email once fully deprecated
        self.exposeFields(level=AccessType.ADMIN, fields=(
            'size', 'status', 'emailVerified', 'creatorId'))

        # To ensure compatibility with authenticator apps, other defaults shouldn't be changed
        self._TotpFactory = TOTP.using(
            # An application secret could be set here, if it existed
            wallet=None
        )

        self._cryptContext = CryptContext(
            schemes=['bcrypt']
        )

        events.bind('model.user.save.created',
                    CoreEventHandler.USER_SELF_ACCESS, self._grantSelfAccess)
        events.bind('model.user.save.created',
                    CoreEventHandler.USER_DEFAULT_FOLDERS,
                    self._addDefaultFolders)
示例#2
0
    def load(self, info):
        # Bind REST events
        events.bind('model.file.download.request', 'download_statistics',
                    _onDownloadFileRequest)
        events.bind('model.file.download.complete', 'download_statistics',
                    _onDownloadFileComplete)

        # Add download count fields to file model
        File().exposeFields(level=AccessType.READ, fields='downloadStatistics')
示例#3
0
    def load(self, info):
        User().ensureIndex((
            (('oauth.provider', SortDir.ASCENDING),
             ('oauth.id', SortDir.ASCENDING)), {}))
        User().reconnect()

        events.bind('no_password_login_attempt', 'oauth', checkOauthUser)

        info['apiRoot'].oauth = rest.OAuth()
示例#4
0
    def load(self, info):
        Item().exposeFields(level=AccessType.READ, fields={'dicom'})
        events.bind('data.process', 'dicom_viewer', _uploadHandler)

        # Add the DICOM search mode only once
        search.addSearchMode('dicom', dicomSubstringSearchHandler)

        dicomItem = DicomItem()
        info['apiRoot'].item.route('POST', (':id', 'parseDicom'),
                                   dicomItem.makeDicomItem)
示例#5
0
    def initialize(self):
        self.name = 'group'
        self.ensureIndices(['lowerName'])
        self.ensureTextIndex({'name': 10, 'description': 1})

        self.exposeFields(level=AccessType.READ,
                          fields=('_id', 'name', 'public', 'description',
                                  'created', 'updated', 'addAllowed',
                                  'openRegistration', '_addToGroupPolicy'))

        events.bind('model.group.save.created',
                    CoreEventHandler.GROUP_CREATOR_ACCESS,
                    self._grantCreatorAccess)
示例#6
0
    def load(self, info):
        name = 'virtual_folders'
        events.bind('model.folder.validate', name, _validateFolder)
        events.bind('model.item.validate', name, _validateItem)
        events.bind('rest.get.item.before', name, _virtualChildItems)
        events.bind('rest.post.folder.after', name, _folderUpdate)
        events.bind('rest.put.folder/:id.after', name, _folderUpdate)

        Folder().exposeFields(level=AccessType.READ, fields={'isVirtual'})
        Folder().exposeFields(level=AccessType.SITE_ADMIN, fields={
            'virtualItemsQuery', 'virtualItemsSort'})

        for endpoint in (FolderResource.updateFolder, FolderResource.createFolder):
            (endpoint.description
                .param('isVirtual', 'Whether this is a virtual folder.', required=False,
                       dataType='boolean')
                .param('virtualItemsQuery', 'Query to use to do virtual item lookup, as JSON.',
                       required=False)
                .param('virtualItemsSort', 'Sort to use during virtual item lookup, as JSON.',
                       required=False))
示例#7
0
    def initialize(self):
        from girderformindlogger.utility import assetstore_utilities

        self.name = 'file'
        self.ensureIndices(['itemId', 'assetstoreId', 'exts'] +
                           assetstore_utilities.fileIndexFields())
        self.ensureTextIndex({'name': 1})
        self.resourceColl = 'item'
        self.resourceParent = 'itemId'

        self.exposeFields(level=AccessType.READ,
                          fields=('_id', 'mimeType', 'itemId', 'exts', 'name',
                                  'created', 'creatorId', 'size', 'updated',
                                  'linkUrl'))

        self.exposeFields(level=AccessType.SITE_ADMIN,
                          fields=('assetstoreId', ))

        events.bind('model.file.save.created',
                    CoreEventHandler.FILE_PROPAGATE_SIZE,
                    self._propagateSizeToItem)
示例#8
0
    def load(self, info):
        # Bind REST events
        events.bind('rest.post.item.after', 'item_licenses', postItemAfter)
        events.bind('rest.post.item/:id/copy.after', 'item_licenses', postItemCopyAfter)
        events.bind('rest.put.item/:id.after', 'item_licenses', putItemAfter)

        # Bind validation events
        events.bind('model.item.validate', 'item_licenses', validateItem)

        # Add license field to item model
        Item().exposeFields(level=AccessType.READ, fields='license')

        # Add endpoint to get list of licenses
        info['apiRoot'].item.route('GET', ('licenses',), getLicenses)
示例#9
0
    def load(self, info):
        # Augment the collection creation and edit routes to accept a terms field
        events.bind('rest.post.collection.after', 'terms',
                    afterPostPutCollection)
        events.bind('rest.put.collection/:id.after', 'terms',
                    afterPostPutCollection)
        for handler in [
                Collection.createCollection, Collection.updateCollection
        ]:
            handler.description.param('terms',
                                      'The Terms of Use for the collection.',
                                      required=False)

        # Expose the terms field on all collections
        CollectionModel().exposeFields(level=AccessType.READ, fields={'terms'})

        # Add endpoint for registered users to accept terms
        info['apiRoot'].collection.route('POST', (':id', 'acceptTerms'),
                                         acceptCollectionTerms)

        # Expose the terms field on all users
        User().exposeFields(level=AccessType.ADMIN, fields={'terms'})
示例#10
0
    def load(self, info):
        getPlugin('jobs').load(info)

        name = 'thumbnails'
        info['apiRoot'].thumbnail = rest.Thumbnail()

        for model in (Item(), Collection(), Folder(), User()):
            model.exposeFields(level=AccessType.READ, fields='_thumbnails')
            events.bind('model.%s.remove' % model.name, name, removeThumbnails)

        events.bind('model.file.remove', name, removeThumbnailLink)
        events.bind('data.process', name, _onUpload)
示例#11
0
    def load(self, info):
        quota = QuotaPolicy()
        info['apiRoot'].collection.route('GET', (':id', 'quota'),
                                         quota.getCollectionQuota)
        info['apiRoot'].collection.route('PUT', (':id', 'quota'),
                                         quota.setCollectionQuota)
        info['apiRoot'].user.route('GET', (':id', 'quota'), quota.getUserQuota)
        info['apiRoot'].user.route('PUT', (':id', 'quota'), quota.setUserQuota)

        events.bind('model.upload.assetstore', 'userQuota',
                    quota.getUploadAssetstore)
        events.bind('model.upload.save', 'userQuota', quota.checkUploadStart)
        events.bind('model.upload.finalize', 'userQuota',
                    quota.checkUploadFinalize)
示例#12
0
 def __enter__(self):
     events.bind(self.eventName, self.handlerName, self._callback)
     return self
示例#13
0
    def load(self, info):
        HashedFile(info['apiRoot'].file)
        FileModel().exposeFields(level=AccessType.READ,
                                 fields=SUPPORTED_ALGORITHMS)

        events.bind('data.process', 'hashsum_download', _computeHashHook)
示例#14
0
 def load(self, info):
     events.bind('model.user.save.created', 'autojoin', userCreated)
示例#15
0
 def load(self, info):
     ModelImporter.registerModel('job', Job, 'jobs')
     info['apiRoot'].job = job_rest.Job()
     events.bind('jobs.schedule', 'jobs', scheduleLocal)
示例#16
0
                           password=setting.get(SettingKey.SMTP_PASSWORD))

    logger.info('Sending email to %s through %s', ', '.join(recipients),
                smtp.host)

    with smtp:
        smtp.send(msg['From'], recipients, msg.as_string())


def _sendmail(event):
    msg = event.info['message']
    recipients = event.info['recipients']
    _submitEmail(msg, recipients)


events.bind('_sendmail', 'core.email', _sendmail)


def sendMailSync(subject, text, to, bcc=None):
    """Send an email synchronously."""
    msg, recipients = _createMessage(subject, text, to, bcc)

    _submitEmail(msg, recipients)


def sendMail(subject, text, to, bcc=None):
    """
    Send an email asynchronously.

    :param subject: The subject line of the email.
    :type subject: str
示例#17
0
    def load(self, info):
        name = 'authorized_upload'

        mail_utils.addTemplateDirectory(os.path.join(_HERE, 'mail_templates'))

        events.bind('rest.post.file.before', name, _authorizeInitUpload)
        events.bind('rest.post.file.after', name, _storeUploadId)
        events.bind('rest.post.file/chunk.before', name, _authorizeUploadStep)
        events.bind('rest.post.file/completion.before', name, _authorizeUploadStep)
        events.bind('rest.get.file/offset.before', name, _authorizeUploadStep)
        events.bind('model.file.finalizeUpload.after', name, _uploadComplete)

        info['apiRoot'].authorized_upload = AuthorizedUpload()
示例#18
0
 def load(self, info):
     events.bind('model.user.authenticate', 'ldap', _ldapAuth)
     info['apiRoot'].system.route('GET', ('ldap_server', 'status'), _ldapServerTest)
示例#19
0
    def load(self, info):
        info['apiRoot'].user.route('GET', (':id', 'gravatar'), getGravatar)

        User().exposeFields(level=AccessType.READ, fields='gravatar_baseUrl')

        events.bind('model.user.save', 'gravatar', _userUpdate)