def _getMetadata(request): assert request.path_info.startswith("/id/") user = userauth.authenticateRequest(request) if type(user) is str: return _response(user) options = _validateOptions( request, {"prefix_match": [("yes", True), ("no", False)]}) if type(options) is str: return _response(options) if user != None: r = ezid.getMetadata(request.path_info[4:], user, prefixMatch=options.get("prefix_match", False)) else: r = ezid.getMetadata(request.path_info[4:], prefixMatch=options.get("prefix_match", False)) if type(r) is str: if r.startswith("error: forbidden"): if user != None: return _forbidden() else: return _unauthorized() else: return _response(r) s, metadata = r return _response(s, anvlBody=anvl.format(metadata))
def batchDownloadRequest(request): """ Enqueues a batch download request. """ if request.method != "POST": return _methodNotAllowed() options = _validateOptions(request, {}) if type(options) is str: return _response(options) user = userauth.authenticateRequest(request) if type(user) is str: return _response(user) elif not user: return _unauthorized() return _response(download.enqueueRequest(user, request.POST))
def login(request): """ Logs in a user. """ if request.method != "GET": return _methodNotAllowed() options = _validateOptions(request, {}) if type(options) is str: return _response(options) user = userauth.authenticateRequest(request, storeSessionCookie=True) if type(user) is str: return _response(user) elif user == None: return _unauthorized() else: return _response("success: session cookie returned")
def _deleteIdentifier(request): user = userauth.authenticateRequest(request) if type(user) is str: return _response(user) elif not user: return _unauthorized() # Easter egg. options = _validateOptions(request, { "update_external_services": [("yes", True), ("no", False)] }\ if user.isSuperuser else {}) if type(options) is str: return _response(options) assert request.path_info.startswith("/id/") identifier = request.path_info[4:] return _response( ezid.deleteIdentifier(identifier, user, updateExternalServices=options.get( "update_external_services", True)))
def mintIdentifier(request): """ Mints an identifier; interface to ezid.mintIdentifier. """ if request.method != "POST": return _methodNotAllowed() user = userauth.authenticateRequest(request) if type(user) is str: return _response(user) elif not user: return _unauthorized() metadata = _readInput(request) if type(metadata) is str: return _response(metadata) options = _validateOptions(request, {}) if type(options) is str: return _response(options) assert request.path_info.startswith("/shoulder/") shoulder = request.path_info[10:] return _response(ezid.mintIdentifier(shoulder, user, metadata), createRequest=True)
def _createIdentifier(request): user = userauth.authenticateRequest(request) if type(user) is str: return _response(user) elif not user: return _unauthorized() metadata = _readInput(request) if type(metadata) is str: return _response(metadata) options = _validateOptions( request, {"update_if_exists": [("yes", True), ("no", False)]}) if type(options) is str: return _response(options) assert request.path_info.startswith("/id/") identifier = request.path_info[4:] return _response(ezid.createIdentifier(identifier, user, metadata, updateIfExists=options.get( "update_if_exists", False)), createRequest=True)
def pause(request): """ Pauses or unpauses the server. If the server is paused, server status records are streamed back to the client indefinitely. """ if request.method != "GET": return _methodNotAllowed() user = userauth.authenticateRequest(request) if type(user) is str: return _response(user) elif user == None: return _unauthorized() elif not user.isSuperuser: return _forbidden() options = _validateOptions(request, {"op": ["on", "idlewait", "off", "monitor"]}) if type(options) is str: return _response(options) if "op" not in options: return _response("error: bad request - no 'op' parameter") if options["op"] == "on": ezid.pause(True) return django.http.StreamingHttpResponse( _statusLineGenerator(True), content_type="text/plain; charset=UTF-8") elif options["op"] == "idlewait": ezid.pause(True) while True: activeUsers, waitingUsers, isPaused = ezid.getStatus() if len(activeUsers) == 0: break time.sleep(1) return _response("success: server paused and idle") elif options["op"] == "off": ezid.pause(False) return _response("success: server unpaused") elif options["op"] == "monitor": return django.http.StreamingHttpResponse( _statusLineGenerator(False), content_type="text/plain; charset=UTF-8") else: assert False, "unhandled case"
def reload(request): """ Reloads the configuration file; interface to config.reload. """ if request.method != "POST": return _methodNotAllowed() options = _validateOptions(request, {}) if type(options) is str: return _response(options) user = userauth.authenticateRequest(request) if type(user) is str: return _response(user) elif user == None: return _unauthorized() elif not user.isSuperuser: return _forbidden() try: oldValue = ezid.pause(True) # Wait for the system to become quiescent. while True: if len(ezid.getStatus()[0]) == 0: break time.sleep(1) config.reload() finally: ezid.pause(oldValue) return _response("success: configuration file reloaded and caches emptied")