io.permit.sdk.PermitConfig Maven / Gradle / Ivy
Go to download
Show more of this group Show more artifacts with this name
Show all versions of permit-sdk-java Show documentation
Show all versions of permit-sdk-java Show documentation
Java SDK for Permit.io: fullstack permissions for cloud native applications
package io.permit.sdk;
import java.util.ArrayList;
/**
* The {@code PermitConfig} class represents the configuration for the Permit SDK.
*/
public class PermitConfig {
// main config vars
private final String token;
private final String pdp;
private final String apiUrl;
private final Boolean debugMode;
// logger config
private final String logLevel;
private final String logLabel;
private final Boolean logAsJson;
// auto mapping config
private final Boolean autoMappingEnable;
private final ArrayList autoMappingIgnoredUrlPrefixes;
private final Boolean autoMappingReviewMode;
// multi tenancy config
private final String defaultTenant;
private final Boolean useDefaultTenantIfEmpty;
private PermitContext context;
public final String version;
private final static String defaultVersion = "unknown";
private PermitConfig(Builder builder) {
this.token = builder.token;
this.pdp = builder.pdp;
this.apiUrl = builder.apiUrl;
this.debugMode = builder.debugMode;
this.logLevel = builder.logLevel;
this.logLabel = builder.logLabel;
this.logAsJson = builder.logAsJson;
this.autoMappingEnable = builder.autoMappingEnable;
this.autoMappingIgnoredUrlPrefixes = builder.autoMappingIgnoredUrlPrefixes;
this.autoMappingReviewMode = builder.autoMappingReviewMode;
this.defaultTenant = builder.defaultTenant;
this.useDefaultTenantIfEmpty = builder.useDefaultTenantIfEmpty;
this.context = builder.context;
String runtimeVersion = Permit.class.getPackage().getImplementationVersion();
this.version = (runtimeVersion == null) ? defaultVersion : runtimeVersion;
}
/**
* Returns the API Key (token) used to authenticate against the Permit API.
*
* @return The API Key (token).
*/
public String getToken() {
return token;
}
/**
* Returns the configured URL of the Permit REST API.
* Unless you are an enterprise Permit user, it's unlikely you need to change the default (api.permit.io).
*
* @return The URL of the Permit REST API.
*/
public String getApiUrl() {
return apiUrl;
}
/**
* Returns the URL of the Policy Decision Point (PDP) used to evaluate authorization queries (i.e: permission checks).
*
* @return The PDP URL.
*/
public String getPdpAddress() {
return pdp;
}
/**
* Returns whether the Permit SDK is in debug mode.
*
* @return {@code true} if debug mode is enabled, {@code false} otherwise.
*/
public Boolean isDebugMode() {
return debugMode;
}
/**
* Returns the log level configured for the Permit SDK Logger.
*
* @return The log level.
*/
public String getLogLevel() {
return logLevel;
}
/**
* Returns the label configured for logs emitted by the Permit SDK Logger.
*
* @return The log label.
*/
public String getLogLabel() {
return logLabel;
}
/**
* Returns whether the log output should be in JSON format.
*
* @return {@code true} if log output should be in JSON format, {@code false} otherwise.
*/
public Boolean shouldLogAsJson() {
return logAsJson;
}
/**
* Returns whether auto mapping of urls to resources is enabled in the Permit configuration.
*
* @return {@code true} if auto-mapping is enabled, {@code false} otherwise.
* @deprecated
*/
public Boolean isAutoMappingEnabled() {
return autoMappingEnable;
}
/**
* Returns the list of URL prefixes to be ignored during auto-mapping.
*
* @return The list of ignored URL prefixes.
* @deprecated
*/
public ArrayList getAutoMappingIgnoredUrlPrefixes() {
return autoMappingIgnoredUrlPrefixes;
}
/**
* Returns whether auto-mapping is in review mode in the Permit configuration.
*
* @return {@code true} if auto-mapping is in review mode, {@code false} otherwise.
* @deprecated
*/
public Boolean getAutoMappingReviewMode() {
return autoMappingReviewMode;
}
/**
* Returns the key of the default tenant used for permission checks if a tenant
* is not specified (or known) for the resource provided to permit.check().
*
* @return The key of the tenant configured as the default tenant.
*/
public String getDefaultTenant() {
return defaultTenant;
}
/**
* Returns whether the default tenant should be used if the resource tenant is not specified.
*
* @return {@code true} if the default tenant should be used as fallback, {@code false} otherwise.
*/
public Boolean shouldUseDefaultTenantIfEmpty() {
return useDefaultTenantIfEmpty;
}
/**
* Returns the scope in which API objects are referenced for the SDK API methods.
* A scope can be: the entire workspace, a specific project, or a specific environment.
* Most API methods require an environment scope (e.g: in order to create a role you
* need to know in which environment to place it), but some methods can work in higher
* scopes (for example: creating a project can be done with a workspace-level scope).
*
* @return The default context for permission checks.
*/
public PermitContext getContext() {
return context;
}
/**
* Sets the scope context for the API key used by the SDK.
*
* You can only set a scope that is larger than the one granted by the API key.
* E.g: if the API key is a project-level API key - you can select an org-level scope
* or a project-level scope (because both are known from the API key), but you cannot
* set an environment-level scope.
*
* @param context The Permit context to be set.
*/
public void setContext(PermitContext context) {
this.context = context;
}
/**
* The {@code Builder} class provides a builder interface for constructing {@code PermitConfig} objects.
*/
public static class Builder {
// main config vars
private String token;
private String pdp = "http://localhost:7766";
private String apiUrl = "https://api.permit.io";
private Boolean debugMode = false;
// logger config
private String logLevel = "info";
private String logLabel = "PermitSDK";
private Boolean logAsJson = false;
// auto mapping config
private Boolean autoMappingEnable = false;
private ArrayList autoMappingIgnoredUrlPrefixes = new ArrayList();
private Boolean autoMappingReviewMode = false;
// multi tenancy config
private String defaultTenant = "default";
private Boolean useDefaultTenantIfEmpty = true;
private PermitContext context;
/**
* Constructs a new instance of the {@code Builder} class with the specified token (API Key).
*
* @param token The token (API Key) for the Permit configuration.
*/
public Builder(String token) {
this.token = token;
this.context = (new PermitContext.Builder()).build();
}
/**
* Configures the Policy Decision Point (PDP) address.
*
* @param pdp The PDP address to be set.
* @return The updated {@code Builder} object.
*/
public Builder withPdpAddress(String pdp) {
this.pdp = pdp;
return this;
}
/**
* Configures the URL of the Permit REST API.
*
* @param apiUrl The API URL to be set.
* @return The updated {@code Builder} object.
*/
public Builder withApiUrl(String apiUrl) {
this.apiUrl = apiUrl;
return this;
}
/**
* Configures whether the SDK should run in debug mode.
*
* @param debugMode The debug mode to be set.
* @return The updated {@code Builder} object.
*/
public Builder withDebugMode(Boolean debugMode) {
this.debugMode = debugMode;
return this;
}
/**
* Sets the log level configured for the Permit SDK Logger.
*
* @param logLevel The log level to be set.
* @return The updated {@code Builder} object.
*/
public Builder withLogLevel(String logLevel) {
this.logLevel = logLevel;
return this;
}
/**
* Sets the label configured for logs emitted by the Permit SDK Logger.
*
* @param logLabel The logger label to be set.
* @return The updated {@code Builder} object.
*/
public Builder withLogLabel(String logLabel) {
this.logLabel = logLabel;
return this;
}
/**
* Sets whether the SDK log output should be in JSON format.
*
* @param logAsJson {@code true} if log output should be in JSON format, {@code false} otherwise.
* @return The updated {@code Builder} object.
*/
public Builder withLogAsJson(Boolean logAsJson) {
this.logAsJson = logAsJson;
return this;
}
/**
* Returns whether auto mapping of urls to resources is enabled in the Permit configuration.
*
* @param autoMappingEnable {@code true} if auto-mapping is enabled, {@code false} otherwise.
* @return The updated {@code Builder} object.
* @deprecated
*/
public Builder withAutoMappingEnable(Boolean autoMappingEnable) {
this.autoMappingEnable = autoMappingEnable;
return this;
}
/**
* Sets the list of URL prefixes to be ignored during auto-mapping.
*
* @param autoMappingIgnoredUrlPrefixes The list of ignored URL prefixes to be set.
* @return The updated {@code Builder} object.
* @deprecated
*/
public Builder withAutoMappingIgnoredUrlPrefixes(ArrayList autoMappingIgnoredUrlPrefixes) {
this.autoMappingIgnoredUrlPrefixes = autoMappingIgnoredUrlPrefixes;
return this;
}
/**
* Sets whether auto URL mapping is in review mode.
*
* @param autoMappingReviewMode {@code true} if auto-mapping is in review mode, {@code false} otherwise.
* @return The updated {@code Builder} object.
* @deprecated
*/
public Builder withAutoMappingReviewMode(Boolean autoMappingReviewMode) {
this.autoMappingReviewMode = autoMappingReviewMode;
return this;
}
/**
* Sets the default tenant that will be used as fallback for permission checks.
*
* @param defaultTenant The default tenant to be set.
* @return The updated {@code Builder} object.
*/
public Builder withDefaultTenant(String defaultTenant) {
this.defaultTenant = defaultTenant;
return this;
}
/**
* Sets whether the default tenant should be used if a tenant
* is not specified for the permission check resource parameter.
*
* @param useDefaultTenantIfEmpty {@code true} if the default tenant should be used if no tenant was specified, {@code false} otherwise.
* @return The updated {@code Builder} object.
*/
public Builder withUseDefaultTenantIfEmpty(Boolean useDefaultTenantIfEmpty) {
this.useDefaultTenantIfEmpty = useDefaultTenantIfEmpty;
return this;
}
/**
* Sets the scope context for the API key used by the SDK.
*
* You can only set a scope that is larger than the one granted by the API key.
* E.g: if the API key is a project-level API key - you can select an org-level scope
* or a project-level scope (because both are known from the API key), but you cannot
* set an environment-level scope.
*
* @param context The Permit context to be set.
* @return The updated {@code Builder} object.
*/
public Builder withContext(PermitContext context) {
this.context = context;
return this;
}
/**
* builds a PermitConfig instance from the builder configuration.
*
* @return The instance of the {@code PermitConfig} object.
*/
public PermitConfig build() {
PermitConfig config = new PermitConfig(this);
return config;
}
}
}