/* * Copyright 2016 Red Hat, Inc. and/or its affiliates * and other contributors as indicated by the @author tags. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package org.keycloak.services.resources; import org.keycloak.Config; import org.keycloak.common.Version; import org.keycloak.utils.MediaType; import javax.ws.rs.GET; import javax.ws.rs.Path; import javax.ws.rs.PathParam; import javax.ws.rs.Produces; import javax.ws.rs.core.CacheControl; import javax.ws.rs.core.Response; import java.io.InputStream; /** * Get keycloak.js file for javascript clients * * @author <a href="mailto:sthorger@redhat.com">Stian Thorgersen</a> */ @Path("/js") public class JsResource { /** * Get keycloak.js file for javascript clients * * @return */ @GET @Path("/keycloak.js") @Produces(MediaType.TEXT_PLAIN_JAVASCRIPT) public Response getKeycloakJs() { return getJs("keycloak.js"); } @GET @Path("/{version}/keycloak.js") @Produces(MediaType.TEXT_PLAIN_JAVASCRIPT) public Response getKeycloakJsWithVersion(@PathParam("version") String version) { if (!version.equals(Version.RESOURCES_VERSION)) { return Response.status(Response.Status.NOT_FOUND).build(); } return getKeycloakJs(); } @GET @Path("/keycloak.min.js") @Produces(MediaType.TEXT_PLAIN_JAVASCRIPT) public Response getKeycloakMinJs() { return getJs("keycloak.min.js"); } @GET @Path("/{version}/keycloak.min.js") @Produces(MediaType.TEXT_PLAIN_JAVASCRIPT) public Response getKeycloakMinJsWithVersion(@PathParam("version") String version) { if (!version.equals(Version.RESOURCES_VERSION)) { return Response.status(Response.Status.NOT_FOUND).build(); } return getKeycloakMinJs(); } /** * Get keycloak-authz.js file for javascript clients * * @return */ @GET @Path("/keycloak-authz.js") @Produces(MediaType.TEXT_PLAIN_JAVASCRIPT) public Response getKeycloakAuthzJs() { return getJs("keycloak-authz.js"); } @GET @Path("/{version}/keycloak-authz.js") @Produces(MediaType.TEXT_PLAIN_JAVASCRIPT) public Response getKeycloakAuthzJsWithVersion(@PathParam("version") String version) { if (!version.equals(Version.RESOURCES_VERSION)) { return Response.status(Response.Status.NOT_FOUND).build(); } return getKeycloakAuthzJs(); } @GET @Path("/keycloak-authz.min.js") @Produces(MediaType.TEXT_PLAIN_JAVASCRIPT) public Response getKeycloakAuthzMinJs() { return getJs("keycloak-authz.min.js"); } @GET @Path("/{version}/keycloak-authz.min.js") @Produces(MediaType.TEXT_PLAIN_JAVASCRIPT) public Response getKeycloakAuthzMinJsWithVersion(@PathParam("version") String version) { if (!version.equals(Version.RESOURCES_VERSION)) { return Response.status(Response.Status.NOT_FOUND).build(); } return getKeycloakAuthzMinJs(); } private Response getJs(String name) { InputStream inputStream = getClass().getClassLoader().getResourceAsStream(name); if (inputStream != null) { CacheControl cacheControl = new CacheControl(); cacheControl.setNoTransform(false); cacheControl.setMaxAge(Config.scope("theme").getInt("staticMaxAge", -1)); return Response.ok(inputStream).type("text/javascript").cacheControl(cacheControl).build(); } else { return Response.status(Response.Status.NOT_FOUND).build(); } } }