Exemplo n.º 1
0
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))
Exemplo n.º 2
0
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))
Exemplo n.º 3
0
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")
Exemplo n.º 4
0
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)))
Exemplo n.º 5
0
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)
Exemplo n.º 6
0
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)
Exemplo n.º 7
0
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"
Exemplo n.º 8
0
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")