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)
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')
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()
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)
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)
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))
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)
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)
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'})
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)
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)
def __enter__(self): events.bind(self.eventName, self.handlerName, self._callback) return self
def load(self, info): HashedFile(info['apiRoot'].file) FileModel().exposeFields(level=AccessType.READ, fields=SUPPORTED_ALGORITHMS) events.bind('data.process', 'hashsum_download', _computeHashHook)
def load(self, info): events.bind('model.user.save.created', 'autojoin', userCreated)
def load(self, info): ModelImporter.registerModel('job', Job, 'jobs') info['apiRoot'].job = job_rest.Job() events.bind('jobs.schedule', 'jobs', scheduleLocal)
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
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()
def load(self, info): events.bind('model.user.authenticate', 'ldap', _ldapAuth) info['apiRoot'].system.route('GET', ('ldap_server', 'status'), _ldapServerTest)
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)