Alt All Responses Worker Code Sample

JFrog Platform Administration Documentation

Content Type
Administration / Platform

The following section provides a sample code for an Alt All Responses worker.

Note

Authorized JFrog Advanced Security (JAS) users can block download from alt all responses. Users without JAS can still use this Worker, but without the Stop Action feature: when trying to use it, the download will not be blocked.

export default async (
  context: PlatformContext,
  data: AltAllResponsesRequest
): Promise<AltAllResponsesResponse> => {
  let status: ActionStatus = ActionStatus.UNSPECIFIED;
  try {
    // The in-browser HTTP client facilitates making calls to the JFrog REST APIs
    //To call an external endpoint, use 'await context.clients.axios.get("https://foo.com")'
    const res = await context.clients.platformHttp.get(
      "/artifactory/api/v1/system/readiness"
    );

    // You should reach this part if the HTTP request status is successful (HTTP Status 399 or lower)
    if (res.status === 200) {
      console.log("Artifactory ping success");
      status = ActionStatus.PROCEED;
    } else {
      console.warn(
        `Request is successful but returned status other than 200. Status code : ${res.status}`
      );
      status = ActionStatus.WARN;
    }
  } catch (error) {
    // The platformHttp client throws PlatformHttpClientError if the HTTP request status is 400 or higher
    console.error(
      `Request failed with status code ${
        error.status || "<none>"
      } caused by : ${error.message}`
    );
    status = ActionStatus.STOP;
  }

  return {
    message: "proceed",
    status,
  };
};

Input Parameters

context

Provides baseUrl, token, and clients to communicate with the JFrog Platform (for more information, see PlatformContext).

data

The request with alt all request details sent by Artifactory.

{
  "metadata": {  // Object containing metadata information about the artifact
    "repoPath": {  // Current path information of the artifact in the repository
      "key": "local-repo",  // Unique key identifier for the repository
      "path": "folder/subfolder/my-file",  // Current path to the specific file within the repository
      "id": "local-repo:folder/subfolder/my-file",  // Unique identifier combining the repository key and path
      "isRoot": false,  // Indicates if the path is a root directory (false means it is not)
      "isFolder": false  // Indicates if the path is a folder (false means it is a file)
    },
    "originalRepoPath": {  // Object containing the original path of the artifact before modification
      "key": "local-repo",  // Unique key identifier for the original repository
      "path": "old/folder/subfolder/my-file",  // Previous path to the file before it was modified
      "id": "local-repo:old/folder/subfolder/my-file",  // Unique identifier for the original path
      "isRoot": false,  // Indicates if the original path is a root directory (false means it is nested)
      "isFolder": false  // Indicates if the original path is a folder (false means it is a file)
    },
    "name": "my-file",  // Name of the file being referenced
    "headOnly": false,  // Indicates whether to process only the header of the request (false means process body as well)
    "checksum": false,  // Indicates whether a checksum should be calculated for the file
    "recursive": false,  // Indicates if the operation should be recursive (false means it operates only on the specified file)
    "modificationTime": 0,  // Timestamp of the last modification (0 indicates no modification)
    "directoryRequest": false,  // Indicates if this request pertains to a directory (false means it relates to a file)
    "metadata": false,  // Indicates if metadata should be included in the request (false means it will not)
    "lastModified": 1,  // Timestamp of when the file was last modified (assumed to be Unix timestamp)
    "ifModifiedSince": 0,  // Timestamp to check if the file has been modified since this time (0 means no check)
    "servletContextUrl": "https://jpd.jfrog.io/artifactory",  // URL for accessing the servlet context
    "uri": "/artifactory/local-repo/folder/subfolder/my-file",  // URI for accessing the artifact
    "clientAddress": "100.100.100.100",  // IP address of the client making the request
    "zipResourcePath": "",  // Path to a ZIP resource if applicable (empty indicates none)
    "zipResourceRequest": false,  // Indicates if the request involves a ZIP resource (false means it does not)
    "replaceHeadRequestWithGet": false,  // Indicates if HEAD requests should be replaced with GET requests
    "repoType": 1  // Numeric identifier representing the repository type (e.g., local = 1, remote = 2, virtual = 3, etc.)
  },
  "userContext": {  // Object containing context information about the user making the request
    "id": "jffe@00xxxxxxxxxxxxxxxxxxxxxxxx/users/bob",  // Unique identifier for the user
    "isToken": true,  // Indicates if the user is authenticated using a token (true means they are)
    "realm": "realm"  // Realm for user authentication context
  },
  "headers": {  // Object containing HTTP headers associated with the request
    "Content-Type": {  // Content-Type header indicating the type of data being sent
      "value": [  // Array of values for the Content-Type header
        "text/plain"  // Indicates that the content type is plain text
      ]
    },
    "Accept": {  // Accept header indicating the formats the client can accept
      "value": [  // Array of values for the Accept header
        "application/json"  // Indicates that the expected response format is JSON
      ]
    }
  }
}
Response
{
 "message": "proceed", // Message to print to the log, in case of an error, it will be printed as a warning
 "status": ActionStatus.PROCEED // The instruction of how to proceed
}

message : This is a mandatory field.

Possible Statuses
  • ActionStatus.PROCEED - The worker allows Artifactory to proceed with alt all response events.

  • ActionStatus.STOP - The worker does not allow Artifactory to alt all response events.

  • ActionStatus.WARN - The worker provides a warning before Artifactory can proceed with alt all response events.