Search in sources :

Example 1 with ResourceEncodingProvider

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();
    }
}
Also used : Response(javax.ws.rs.core.Response) ResourceEncodingProvider(org.keycloak.encoding.ResourceEncodingProvider) InputStream(java.io.InputStream) Theme(org.keycloak.theme.Theme) Path(javax.ws.rs.Path) GET(javax.ws.rs.GET)

Example 2 with ResourceEncodingProvider

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();
    }
}
Also used : Response(javax.ws.rs.core.Response) ResourceEncodingProvider(org.keycloak.encoding.ResourceEncodingProvider) InputStream(java.io.InputStream) CacheControl(javax.ws.rs.core.CacheControl)

Aggregations

InputStream (java.io.InputStream)2 Response (javax.ws.rs.core.Response)2 ResourceEncodingProvider (org.keycloak.encoding.ResourceEncodingProvider)2 GET (javax.ws.rs.GET)1 Path (javax.ws.rs.Path)1 CacheControl (javax.ws.rs.core.CacheControl)1 Theme (org.keycloak.theme.Theme)1