All Downloads are FREE. Search and download functionalities are using the official Maven repository.

com.orientechnologies.agent.http.command.OServerCommandDistributedScope Maven / Gradle / Ivy

package com.orientechnologies.agent.http.command;

import com.orientechnologies.agent.operation.OperationResponseFromNode;
import com.orientechnologies.enterprise.server.OEnterpriseServer;
import com.orientechnologies.orient.core.db.ODatabaseDocumentInternal;
import com.orientechnologies.orient.core.db.ODatabaseRecordThreadLocal;
import com.orientechnologies.orient.core.id.ORecordId;
import com.orientechnologies.orient.core.metadata.security.OUser;
import com.orientechnologies.orient.core.record.impl.ODocument;
import com.orientechnologies.orient.core.serialization.serializer.OStringSerializerHelper;
import com.orientechnologies.orient.server.distributed.operation.NodeOperation;
import com.orientechnologies.orient.server.network.protocol.http.OHttpRequest;
import com.orientechnologies.orient.server.network.protocol.http.OHttpResponse;
import com.orientechnologies.orient.server.network.protocol.http.OHttpUtils;
import java.io.IOException;
import java.util.Collections;
import java.util.List;

/** Created by Enrico Risa on 16/11/15. */
public abstract class OServerCommandDistributedScope
    extends OServerCommandDistributedAuthenticated {

  protected final OEnterpriseServer enterpriseServer;

  protected OServerCommandDistributedScope(
      String iRequiredResource, OEnterpriseServer enterpriseServer) {
    super(iRequiredResource);
    this.enterpriseServer = enterpriseServer;
  }

  private List sendTask(OHttpRequest iRequest, NodeOperation op) {

    String node = iRequest.getParameter("node");
    if ("_all".equalsIgnoreCase(node)) {
      return enterpriseServer.getNodesManager().sendAll(op);
    } else {
      return Collections.singletonList(enterpriseServer.getNodesManager().send(node, op));
    }
  }

  List proxyRequest(OHttpRequest iRequest, NodeOperation op) {
    if (op == null) {
      throw new UnsupportedOperationException();
    }
    return sendTask(iRequest, op);
  }

  protected ODatabaseDocumentInternal getProfiledDatabaseInstance(final OHttpRequest iRequest)
      throws InterruptedException {
    // after authentication, if current login user is different compare with current DB user, reset
    // DB user to login user
    ODatabaseDocumentInternal localDatabase = ODatabaseRecordThreadLocal.instance().getIfDefined();

    if (localDatabase == null) {
      final List parts = OStringSerializerHelper.split(iRequest.getAuthorization(), ':');
      localDatabase = server.openDatabase(iRequest.getDatabaseName(), parts.get(0), parts.get(1));
    } else {

      String currentUserId = iRequest.getData().currentUserId;
      if (currentUserId != null
          && currentUserId.length() > 0
          && localDatabase != null
          && localDatabase.getUser() != null) {
        if (!currentUserId.equals(localDatabase.getUser().getIdentity().toString())) {
          ODocument userDoc = localDatabase.load(new ORecordId(currentUserId));
          localDatabase.setUser(new OUser(userDoc));
        }
      }
    }

    iRequest.getData().lastDatabase = localDatabase.getName();
    iRequest.getData().lastUser =
        localDatabase.getUser() != null ? localDatabase.getUser().getName() : null;
    return (ODatabaseDocumentInternal) localDatabase.getDatabaseOwner();
  }

  @Override
  public boolean execute(final OHttpRequest iRequest, final OHttpResponse iResponse)
      throws Exception {
    try {
      if (isLocalNode(iRequest)) {
        if ("GET".equalsIgnoreCase(iRequest.getHttpMethod())) {
          doGet(iRequest, iResponse);
        } else if ("POST".equalsIgnoreCase(iRequest.getHttpMethod())) {
          doPost(iRequest, iResponse);
        } else if ("PUT".equalsIgnoreCase(iRequest.getHttpMethod())) {
          doPut(iRequest, iResponse);
        } else if ("DELETE".equalsIgnoreCase(iRequest.getHttpMethod())) {
          doDelete(iRequest, iResponse);
        }
      } else {
        proxyRequest(iRequest, null);
      }
    } catch (Exception e) {
      iResponse.send(
          OHttpUtils.STATUS_BADREQ_CODE,
          OHttpUtils.STATUS_BADREQ_DESCRIPTION,
          OHttpUtils.CONTENT_TEXT_PLAIN,
          e,
          null);
    }
    return false;
  }

  protected void doGet(OHttpRequest iRequest, OHttpResponse iResponse) throws IOException {}

  protected void doDelete(OHttpRequest iRequest, OHttpResponse iResponse) throws IOException {}

  protected void doPost(OHttpRequest iRequest, OHttpResponse iResponse) throws IOException {}

  protected void doPut(OHttpRequest iRequest, OHttpResponse iResponse) throws IOException {}
}




© 2015 - 2025 Weber Informatics LLC | Privacy Policy