use of org.keycloak.encoding.ResourceEncodingProvider in project keycloak by keycloak.
the class ThemeResource method getResource.
/**
* Get theme content
*
* @param themType
* @param themeName
* @param path
* @return
*/
@GET
@Path("/{version}/{themeType}/{themeName}/{path:.*}")
public Response getResource(@PathParam("version") String version, @PathParam("themeType") String themType, @PathParam("themeName") String themeName, @PathParam("path") String path) {
if (!version.equals(Version.RESOURCES_VERSION)) {
return Response.status(Response.Status.NOT_FOUND).build();
}
try {
String contentType = MimeTypeUtil.getContentType(path);
Theme theme = session.theme().getTheme(themeName, Theme.Type.valueOf(themType.toUpperCase()));
ResourceEncodingProvider encodingProvider = session.theme().isCacheEnabled() ? ResourceEncodingHelper.getResourceEncodingProvider(session, contentType) : null;
InputStream resource;
if (encodingProvider != null) {
resource = encodingProvider.getEncodedStream(() -> theme.getResourceAsStream(path), themType, themeName, path.replace('/', File.separatorChar));
} else {
resource = theme.getResourceAsStream(path);
}
if (resource != null) {
Response.ResponseBuilder rb = Response.ok(resource).type(contentType).cacheControl(CacheControlUtil.getDefaultCacheControl());
if (encodingProvider != null) {
rb.encoding(encodingProvider.getEncoding());
}
return rb.build();
} else {
return Response.status(Response.Status.NOT_FOUND).build();
}
} catch (Exception e) {
ServicesLogger.LOGGER.failedToGetThemeRequest(e);
return Response.serverError().build();
}
}
use of org.keycloak.encoding.ResourceEncodingProvider in project keycloak by keycloak.
the class JsResource method getJs.
private Response getJs(String name, String version) {
CacheControl cacheControl;
if (version != null) {
if (!version.equals(Version.RESOURCES_VERSION)) {
return Response.status(Response.Status.NOT_FOUND).build();
}
cacheControl = CacheControlUtil.getDefaultCacheControl();
} else {
cacheControl = CacheControlUtil.noCache();
}
String contentType = "text/javascript";
Cors cors = Cors.add(request).allowAllOrigins();
ResourceEncodingProvider encodingProvider = ResourceEncodingHelper.getResourceEncodingProvider(session, contentType);
InputStream inputStream;
if (encodingProvider != null) {
inputStream = encodingProvider.getEncodedStream(() -> getClass().getClassLoader().getResourceAsStream(name), "js", name);
} else {
inputStream = getClass().getClassLoader().getResourceAsStream(name);
}
if (inputStream != null) {
Response.ResponseBuilder rb = Response.ok(inputStream).type(contentType).cacheControl(cacheControl);
if (encodingProvider != null) {
rb.encoding(encodingProvider.getEncoding());
}
return cors.builder(rb).build();
} else {
return cors.builder(Response.status(Response.Status.NOT_FOUND)).build();
}
}
Aggregations