/**
* Licensed to the Apache Software Foundation (ASF) under one
* or more contributor license agreements. See the NOTICE file
* distributed with this work for additional information
* regarding copyright ownership. The ASF licenses this file
* to you 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.jooby.crash;
import org.crsh.plugin.CRaSHPlugin;
import org.jooby.Env;
import org.jooby.MediaType;
import org.jooby.Results;
import org.jooby.Route;
import org.jooby.Router;
import com.typesafe.config.Config;
class WebShellPlugin extends CRaSHPlugin<WebShellPlugin> {
@Override
public WebShellPlugin getImplementation() {
return this;
}
static void install(final Env env, final Config conf) {
Router routes = env.router();
String path = conf.getString("crash.webshell.path");
String title = conf.getString("application.name") + " shell";
routes.assets(path + "/css/**", "META-INF/resources/css/{0}");
routes.assets(path + "/js/**", "META-INF/resources/js/{0}");
String rootpath = Route.normalize(conf.getString("application.path") + path);
routes.get(path, req -> Results.ok("<!DOCTYPE HTML>\n" +
"<html>\n" +
"<head>\n" +
" <meta charset=\"utf-8\" />\n" +
" <title>" + title + "</title>\n" +
" <script src=\"" + rootpath + "/js/jquery-1.7.1.min.js\"></script>\n" +
" <script src=\"" + rootpath + "/js/jquery.mousewheel-min.js\"></script>\n" +
" <script src=\"" + rootpath + "/js/jquery.terminal-0.7.12.js\"></script>\n" +
" <script src=\"" + rootpath + "/js/crash.js\"></script>\n" +
" <link href=\"" + rootpath + "/css/jquery.terminal.css\" rel=\"stylesheet\"/>\n" +
"</head>\n" +
"<body>\n" +
"\n" +
"<script>\n" +
"\n" +
" //\n" +
" $(function() {\n" +
" // Create web socket url\n" +
" var protocol;\n" +
" if (window.location.protocol == 'http:') {\n" +
" protocol = 'ws';\n" +
" } else {\n" +
" protocol = 'wss';\n" +
" }\n" +
" var url = protocol + '://' + window.location.host + '" + rootpath + "';\n" +
" var crash = new CRaSH($('#shell'));\n" +
" crash.connect(url);\n" +
" });\n" +
"\n" +
"</script>\n" +
"\n" +
" <div id=\"shell\"></div>\n" +
"\n" +
"</body>\n" +
"</html>").type(MediaType.html));
routes.ws(path, new WebShellHandler()).consumes(MediaType.json).produces(MediaType.json);
}
}