| securis/src/main/java/net/curisit/securis/MainApp.java | patch | view | blame | history | |
| securis/src/main/java/net/curisit/securis/ioc/RequestsModule.java | patch | view | blame | history | |
| securis/src/main/java/net/curisit/securis/services/BasicServices.java | patch | view | blame | history | |
| securis/src/main/java/net/curisit/securis/services/UserResource.java | patch | view | blame | history | |
| securis/src/main/resources/static/favicon.ico | patch | view | blame | history | |
| securis/src/main/resources/static/images/securis_100.png | patch | view | blame | history | |
| securis/src/main/resources/static/images/securis_40.png | patch | view | blame | history | |
| securis/src/main/resources/static/js/login.js | patch | view | blame | history | |
| securis/src/main/resources/static/js/main.js | patch | view | blame | history | |
| securis/src/main/resources/static/login.html | patch | view | blame | history | |
| securis/src/main/resources/static/main.html | patch | view | blame | history |
securis/src/main/java/net/curisit/securis/MainApp.java
.. .. @@ -12,14 +12,16 @@ 12 12 import net.curisit.securis.ioc.RequestsModule; 13 13 import net.curisit.securis.ioc.SecurisModule; 14 14 15 +import org.eclipse.jetty.server.Handler;15 16 import org.eclipse.jetty.server.Server; 16 -import org.eclipse.jetty.servlet.ErrorPageErrorHandler;17 +import org.eclipse.jetty.server.handler.ContextHandlerCollection;18 +import org.eclipse.jetty.server.handler.ResourceHandler;17 19 import org.eclipse.jetty.servlet.FilterHolder; 18 20 import org.eclipse.jetty.servlet.ServletContextHandler; 19 21 import org.eclipse.jetty.servlet.ServletHolder; 22 +import org.eclipse.jetty.util.resource.Resource;20 23 import org.jboss.resteasy.plugins.guice.GuiceResteasyBootstrapServletContextListener; 21 24 import org.jboss.resteasy.plugins.server.servlet.HttpServletDispatcher; 22 -import org.jboss.resteasy.util.HttpResponseCodes;23 25 import org.slf4j.Logger; 24 26 import org.slf4j.LoggerFactory; 25 27 .. .. @@ -52,8 +54,7 @@ 52 54 53 55 private static void startServer(URI uri) throws Exception { 54 56 System.out.println("Starting jetty..."); 55 - // ResourceConfig rc = new PackagesResourceConfig("net.curisit.securis.services", "org.codehaus.jackson.jaxrs");56 - // IoCComponentProviderFactory ioc = new GuiceComponentProviderFactory(rc, injector);57 +57 58 server = new Server(9997); 58 59 ServletContextHandler context = new ServletContextHandler(ServletContextHandler.SESSIONS); 59 60 context.setContextPath("/"); .. .. @@ -64,25 +65,35 @@ 64 65 context.addFilter(new FilterHolder(injector.getInstance(AuthFilter.class)), "/*", null); 65 66 66 67 ServletHolder sh = new ServletHolder(HttpServletDispatcher.class); 67 - // context.addServlet(DefaultServlet.class, "/*");68 - context.addServlet(sh, "/");69 - ErrorPageErrorHandler errorHandler = new ErrorPageErrorHandler();70 - context.setErrorHandler(errorHandler);71 - errorHandler.addErrorPage(HttpResponseCodes.SC_FORBIDDEN, "/login");72 - errorHandler.addErrorPage(HttpResponseCodes.SC_NOT_FOUND, "/");73 - errorHandler.addErrorPage(javax.ws.rs.NotFoundException.class, "/");74 - errorHandler.addErrorPage(javax.ws.rs.ForbiddenException.class, "/");75 - errorHandler.addErrorPage(javax.ws.rs.ForbiddenException.class.getCanonicalName(), "/");76 - errorHandler.addErrorPage(ErrorPageErrorHandler.GLOBAL_ERROR_PAGE, "/");68 + sh.setName("resteasy");69 + context.addServlet(sh, "/*");77 70 71 + ResourceHandler staticResources = new ResourceHandler();72 + staticResources.setBaseResource(Resource.newResource(MainApp.class.getResource("/static").toURI()));73 + staticResources.setWelcomeFiles(new String[]74 + { "/login.html" });75 + context.setHandler(staticResources);76 +77 + // ErrorPageErrorHandler errorHandler = new ErrorPageErrorHandler();78 + // context.setErrorHandler(errorHandler);79 + // errorHandler.addErrorPage(HttpResponseCodes.SC_FORBIDDEN, "/login");80 + // errorHandler.addErrorPage(HttpResponseCodes.SC_NOT_FOUND, "/");81 + // errorHandler.addErrorPage(javax.ws.rs.NotFoundException.class, "/");82 + // errorHandler.addErrorPage(javax.ws.rs.ForbiddenException.class, "/");83 + // errorHandler.addErrorPage(javax.ws.rs.ForbiddenException.class.getCanonicalName(), "/");84 + // errorHandler.addErrorPage(ErrorPageErrorHandler.GLOBAL_ERROR_PAGE, "/");85 + context.setWelcomeFiles(new String[]86 + { "/index" });78 87 log.info("Error Handlers: " + context.getErrorHandler()); 79 - server.setHandler(context);88 + ContextHandlerCollection contexts = new ContextHandlerCollection();80 89 90 + contexts.setHandlers(new Handler[]91 + { staticResources, context });92 + // server.setHandler(contexts);93 +94 + server.setHandler(context);81 95 server.start(); 82 96 server.join(); 83 - // rc.packages("net.curisit.securis.services", "org.codehaus.jackson.jaxrs");84 -85 - // new CLStaticHttpHandler(new URLClassLoader(new URL[] {new URL("file:///home/username/staticfiles.jar")})), "/www")86 97 87 98 } 88 99 .. .. @@ -98,6 +109,8 @@ 98 109 99 110 @Override 100 111 public Response toResponse(Exception e) { 112 + // log.info("Creating DefaultExceptionHandler ");113 + e.printStackTrace();101 114 // For simplicity I am preparing error xml by hand. 102 115 // Ideally we should create an ErrorResponse class to hold the error info. 103 116 StringBuilder response = new StringBuilder("<response>"); securis/src/main/java/net/curisit/securis/ioc/RequestsModule.java
.. .. @@ -2,6 +2,7 @@ 2 2 3 3 import net.curisit.securis.services.BasicServices; 4 4 import net.curisit.securis.services.LicenseServices; 5 +import net.curisit.securis.services.UserResource;5 6 6 7 import org.eclipse.jetty.server.Authentication.User; 7 8 import org.jboss.resteasy.plugins.guice.RequestScoped; .. .. @@ -17,6 +18,7 @@ 17 18 super.configure(); 18 19 bind(BasicServices.class); 19 20 bind(LicenseServices.class); 21 + bind(UserResource.class);20 22 } 21 23 22 24 @Provides securis/src/main/java/net/curisit/securis/services/BasicServices.java
.. .. @@ -1,34 +1,29 @@ 1 1 package net.curisit.securis.services; 2 2 3 -import java.io.IOException;4 3 import java.net.URI; 4 +import java.util.Date;5 5 6 -import javax.annotation.security.RolesAllowed;7 6 import javax.servlet.http.HttpServletRequest; 8 -import javax.ws.rs.FormParam;7 +import javax.servlet.http.HttpSession;9 8 import javax.ws.rs.GET; 10 -import javax.ws.rs.POST;11 9 import javax.ws.rs.Path; 12 10 import javax.ws.rs.Produces; 13 11 import javax.ws.rs.core.Context; 14 12 import javax.ws.rs.core.MediaType; 15 13 import javax.ws.rs.core.Response; 16 -import javax.ws.rs.core.Response.Status;17 14 import javax.ws.rs.core.UriBuilder; 18 15 19 -import org.apache.commons.io.IOUtils;20 16 import org.slf4j.Logger; 21 17 import org.slf4j.LoggerFactory; 22 18 23 19 /** 24 - * Basic services for login a nd basic app wrkflow20 + * Basic services for login and basic app wrkflow25 21 * 26 22 * @author roberto <roberto.sanchez@curisit.net> 27 23 */ 28 24 @Path("/") 29 25 public class BasicServices { 30 26 31 - // private LicenseHelper licenseHelper = InjectorFactory.getInjector().getInstance(LicenseHelper.class);32 27 private static final Logger log = LoggerFactory.getLogger(BasicServices.class); 33 28 34 29 public BasicServices() { .. .. @@ -39,115 +34,24 @@ 39 34 * @return the server version in format majorVersion.minorVersion 40 35 */ 41 36 @GET 37 + @Path("/index")42 38 @Produces( 43 39 { MediaType.TEXT_HTML }) 44 40 public Response index(@Context HttpServletRequest request) { 45 41 log.info("index session: " + request.getSession()); 46 - URI uri = UriBuilder.fromUri("/login").build();42 + HttpSession session = request.getSession(false);43 + String page = session != null && session.getAttribute("user") != null ? "/main.html" : "/login.html";44 + URI uri = UriBuilder.fromUri(page).build();47 45 return Response.seeOther(uri).build(); 48 46 // return Response.ok().entity("License server").build(); 49 47 } 50 48 51 49 @GET 52 - @Path("/login")50 + @Path("/info")53 51 @Produces( 54 - { MediaType.TEXT_HTML })55 - public Response login(@Context HttpServletRequest request) {56 - log.info("index login: " + request.getSession());57 - try {58 - String index = IOUtils.toString(this.getClass().getResourceAsStream("/static/login.html"));59 - return Response.ok().entity(index).build();60 - } catch (IOException e) {61 - // TODO Auto-generated catch block62 - e.printStackTrace();63 - }64 - return Response.serverError().build();52 + { MediaType.TEXT_PLAIN })53 + public Response info(@Context HttpServletRequest request) {54 + return Response.ok().entity("License server running OK. Date: " + new Date()).build();65 55 } 66 -67 - @POST68 - @Path("/login")69 - @Produces(70 - { MediaType.TEXT_HTML })71 - public Response login(@FormParam("user") String user, @FormParam("password") String password, @Context HttpServletRequest request) {72 - log.info("index session: " + request.getSession());73 - log.info("Request: " + request.getParameter("user"));74 - log.info("is user in role: {} == {} ? ", "advance", request.isUserInRole("advance"));75 - // log.info("user: {} == {} ? " + request.getParameter("user"), user);76 - request.getSession().setAttribute("user", user);77 - URI uri = UriBuilder.fromUri("/main").build();78 - return Response.seeOther(uri).build();79 - }80 -81 - /**82 - * @return the version of the three entities that can be synchronized (Users, DataSet and Settings)83 - */84 - @GET85 - @Path("/main")86 - @Produces(87 - { MediaType.TEXT_HTML })88 - @RolesAllowed("advance")89 - public Response main(@Context HttpServletRequest request) {90 - try {91 - log.info("Is user in role advance: {}", request.isUserInRole("advance"));92 - String index = IOUtils.toString(this.getClass().getResourceAsStream("/static/main.html"));93 - return Response.ok().entity(index).build();94 - } catch (IOException e) {95 - // TODO Auto-generated catch block96 - e.printStackTrace();97 - }98 - return Response.status(Status.FORBIDDEN).build();99 -100 - }101 -102 - @GET103 - @Path("/logout")104 - @Produces(105 - { MediaType.TEXT_HTML })106 - public Response logout(@Context HttpServletRequest request) {107 - request.getSession().setAttribute("user", null);108 - URI uri = UriBuilder.fromUri("/login").build();109 - return Response.seeOther(uri).build();110 -111 - }112 -113 - //114 - // private <T> ServiceResponse<T> buildErrorResponse(ServiceResponse<T> response, String msgErrorCode) {115 - // response.setSuccess(false);116 - // response.setErrorMessage(localManager.getString(msgErrorCode));117 - // response.setErrorMessageCode(msgErrorCode);118 - // return response;119 - // }120 - //121 - // private Date calculateCaducation() {122 - // Integer licenseExpiration = systemParams.getParamAsInt(SystemParams.Keys.CONFIG_SERVER_LICENSE_EXPIRATION);123 - // if (licenseExpiration == null)124 - // licenseExpiration = DEFAULT_LICENSE_EXPIRATION;125 - // return Utils.addDays(new Date(), licenseExpiration);126 - // }127 - //128 - // private boolean validateLicense(String license) {129 - // BasicApplication ba = basicApplicationDao.findByLicense(license);130 - // return (ba != null);131 - // }132 - //133 - // private boolean validateVersion(int minorVersion, int majorVersion) {134 - // return (versionManager.getMajorVersion() == majorVersion);135 - // }136 - //137 - // private BasicApplication findBasicApp(String license) {138 - // BasicApplication ba = basicApplicationDao.findByLicense(license);139 - // return ba;140 - // }141 - //142 - // private License generateLicense() {143 - // // TODO complete all field of the license144 - // License license = new License();145 - // license.setCustomerCode(systemParams.getParam(SystemParams.Keys.CONFIG_COMMON_CUSTOMER_CODE));146 - // license.setCSCode(systemParams.getParam(SystemParams.Keys.CONFIG_COMMON_CS_CODE));147 - // license.setCRCLogo("00000000");148 - // license.setExpirationDate(calculateCaducation());149 - // license.setInstallCode(codeGenerator.generateInstalationNumber());150 - // return license;151 - // }152 56 153 57 } securis/src/main/java/net/curisit/securis/services/UserResource.java
.. .. @@ -0,0 +1,123 @@ 1 +package net.curisit.securis.services;2 +3 +import javax.annotation.security.RolesAllowed;4 +import javax.servlet.http.HttpServletRequest;5 +import javax.ws.rs.FormParam;6 +import javax.ws.rs.GET;7 +import javax.ws.rs.POST;8 +import javax.ws.rs.Path;9 +import javax.ws.rs.PathParam;10 +import javax.ws.rs.Produces;11 +import javax.ws.rs.core.Context;12 +import javax.ws.rs.core.MediaType;13 +import javax.ws.rs.core.Response;14 +import javax.ws.rs.core.Response.Status;15 +16 +import net.curisit.integrity.commons.Utils;17 +18 +import org.slf4j.Logger;19 +import org.slf4j.LoggerFactory;20 +21 +/**22 + * User resource23 + *24 + * @author roberto <roberto.sanchez@curisit.net>25 + */26 +@Path("/user")27 +public class UserResource {28 +29 + // private LicenseHelper licenseHelper = InjectorFactory.getInjector().getInstance(LicenseHelper.class);30 + private static final Logger log = LoggerFactory.getLogger(UserResource.class);31 +32 + public UserResource() {33 + }34 +35 + /**36 + *37 + * @return the server version in format majorVersion.minorVersion38 + */39 + @GET40 + @Path("/")41 + @Produces(42 + { MediaType.TEXT_PLAIN })43 + public Response index(@Context HttpServletRequest request) {44 + return Response.ok("User resource").build();45 + }46 +47 + @POST48 + @Path("/login")49 + @Produces(50 + { MediaType.APPLICATION_JSON })51 + public Response login(@FormParam("username") String user, @FormParam("password") String password, @Context HttpServletRequest request) {52 + log.info("index session: " + request.getSession());53 + log.info("user: {}, pass: {}", user, password);54 + log.info("is user in role: {} == {} ? ", "advance", request.isUserInRole("advance"));55 +56 + request.getSession().setAttribute("username", user);57 + if ("no".equals(password))58 + return Response.status(Status.FORBIDDEN).build();59 + return Response.ok(Utils.createMap("name", "Pepito", "username", user)).build();60 + }61 +62 + /**63 + * @return the version of the three entities that can be synchronized (Users, DataSet and Settings)64 + */65 + @GET66 + @Path("/{username}")67 + @Produces(68 + { MediaType.APPLICATION_JSON })69 + @RolesAllowed("advance")70 + public Response main(@PathParam("username") String username) {71 + return Response.ok().entity(Utils.createMap("name", "Pepito", "username", username)).build();72 + }73 +74 + @GET75 + @Path("/logout")76 + @Produces(77 + { MediaType.APPLICATION_JSON })78 + public Response logout(@Context HttpServletRequest request) {79 + request.getSession().invalidate();80 + return Response.ok().build();81 + }82 +83 + //84 + // private <T> ServiceResponse<T> buildErrorResponse(ServiceResponse<T> response, String msgErrorCode) {85 + // response.setSuccess(false);86 + // response.setErrorMessage(localManager.getString(msgErrorCode));87 + // response.setErrorMessageCode(msgErrorCode);88 + // return response;89 + // }90 + //91 + // private Date calculateCaducation() {92 + // Integer licenseExpiration = systemParams.getParamAsInt(SystemParams.Keys.CONFIG_SERVER_LICENSE_EXPIRATION);93 + // if (licenseExpiration == null)94 + // licenseExpiration = DEFAULT_LICENSE_EXPIRATION;95 + // return Utils.addDays(new Date(), licenseExpiration);96 + // }97 + //98 + // private boolean validateLicense(String license) {99 + // BasicApplication ba = basicApplicationDao.findByLicense(license);100 + // return (ba != null);101 + // }102 + //103 + // private boolean validateVersion(int minorVersion, int majorVersion) {104 + // return (versionManager.getMajorVersion() == majorVersion);105 + // }106 + //107 + // private BasicApplication findBasicApp(String license) {108 + // BasicApplication ba = basicApplicationDao.findByLicense(license);109 + // return ba;110 + // }111 + //112 + // private License generateLicense() {113 + // // TODO complete all field of the license114 + // License license = new License();115 + // license.setCustomerCode(systemParams.getParam(SystemParams.Keys.CONFIG_COMMON_CUSTOMER_CODE));116 + // license.setCSCode(systemParams.getParam(SystemParams.Keys.CONFIG_COMMON_CS_CODE));117 + // license.setCRCLogo("00000000");118 + // license.setExpirationDate(calculateCaducation());119 + // license.setInstallCode(codeGenerator.generateInstalationNumber());120 + // return license;121 + // }122 +123 +}securis/src/main/resources/static/favicon.icoBinary files differ
securis/src/main/resources/static/images/securis_100.pngBinary files differ
securis/src/main/resources/static/images/securis_40.pngBinary files differ
securis/src/main/resources/static/js/login.js
.. .. @@ -0,0 +1,46 @@ 1 +(function() {2 + 'use strict';3 +4 + var app = angular.module('app', ['ngRoute']);5 +6 + app.controller('LoginCtrl', ['$scope', '$http', '$window',7 + function($scope, $http, $window) {8 +9 + $scope.$loginerror = false;10 + $('#loginError').removeClass('hide');11 +12 + $scope.hideAlert = function() {13 + $scope.$loginerror = false;14 + $('#user').focus();15 + }16 + $scope.submit = function() {17 + console.log('Sending user: ' + $scope.username + ' pass: ' + $scope.password);18 + $scope.hideAlert();19 + $http({ method: 'POST',20 + url: '/user/login',21 + headers: {22 + "Content-Type": "application/x-www-form-urlencoded"23 + },24 + data: $.param({25 + username: $scope.username,26 + password: $scope.password27 + })28 + }).29 + success(function(data, status, headers, config) {30 + $window.location.href = "/main.html";31 + }).32 + error(function(data, status, headers, config) {33 + console.error(data + " status: "+ status);34 + $scope.$loginerror = true;35 + if (status === 403 /* forbidden */) {36 + $scope.$errormsg = 'Invalid credentials'37 + } else {38 + $scope.$errormsg = 'Unexpected error HTTP ' + status + ' accessing to server. Contact with the administrator.'39 + }40 + $('#user').focus();41 + });42 + return false;43 + }44 + }]);45 +46 +})();securis/src/main/resources/static/js/main.js
.. .. @@ -0,0 +1,4 @@ 1 +(function() {2 +3 +4 +})();securis/src/main/resources/static/login.html
.. .. @@ -1,108 +1,117 @@ 1 1 <!DOCTYPE html> 2 -<html class="no-js" lang="en">3 - <head>4 - <base href="/base">5 - <meta charset="utf-8">6 - <meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1">7 - <title></title>8 - <meta name="description" content="">9 - <meta name="viewport" content="width=device-width">2 +<html class="no-js" lang="en" ng-app="app" xmlns:ng="http://angularjs.org">3 +<head>4 +<meta charset="utf-8">5 +<meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1">6 +<title></title>7 +<meta name="description" content="">8 +<meta name="viewport" content="width=device-width">10 9 11 - <link rel="stylesheet" href="http://netdna.bootstrapcdn.com/bootstrap/3.0.3/css/bootstrap.min.css">12 - <style>13 - body {14 - padding-top: 50px;15 - padding-bottom: 20px;16 - }17 - </style>18 - <link rel="stylesheet" href="//cdnjs.cloudflare.com/ajax/libs/twitter-bootstrap/3.0.3/css/bootstrap-theme.min.css">19 - <link rel="stylesheet" href="http://netdna.bootstrapcdn.com/font-awesome/4.0.3/css/font-awesome.min.css">20 - <link rel="stylesheet" href="css/main.css">21 - <meta name="viewport" content="width=device-width, initial-scale=1.0">22 - <link href="assets/css/bootstrap-responsive.css" rel="stylesheet">10 +<link rel="stylesheet"11 + href="http://netdna.bootstrapcdn.com/bootstrap/3.0.3/css/bootstrap.min.css">12 +<style>13 +body {14 + padding-top: 50px;15 + padding-bottom: 20px;16 +}17 +</style>18 +<link rel="stylesheet"19 + href="//cdnjs.cloudflare.com/ajax/libs/twitter-bootstrap/3.0.3/css/bootstrap-theme.min.css">20 +<link rel="stylesheet"21 + href="http://netdna.bootstrapcdn.com/font-awesome/4.0.3/css/font-awesome.min.css">22 +<!-- <link rel="stylesheet" href="css/main.css"> -->23 +<meta name="viewport" content="width=device-width, initial-scale=1.0">24 +<!-- <link href="assets/css/bootstrap-responsive.css" rel="stylesheet"> -->23 25 24 - <script src="js/vendor/modernizr-2.6.2.min.js"></script>25 - </head>26 - <body>27 - <div class="navbar navbar-inverse navbar-fixed-top">28 - <div class="container">29 - <div class="navbar-header">30 - <button type="button" class="navbar-toggle" data-toggle="collapse" data-target=".navbar-collapse">31 - <span class="icon-bar"></span>32 - <span class="icon-bar"></span>33 - <span class="icon-bar"></span>34 - </button>35 - <a class="navbar-brand" href="#">SeCuris</a>36 - </div>37 - <div class="navbar-collapse collapse">38 - <ul class="nav navbar-nav">39 - <li><a href="#about">About</a></li>40 - <li><a href="#contact">Contact</a></li>41 - </ul>42 - <form class="navbar-form navbar-right">43 - <div class="form-group">44 - <input type="text" placeholder="Email" class="form-control">45 - </div>46 - <div class="form-group">47 - <input type="password" placeholder="Password" class="form-control">48 - </div>49 - <button type="submit" class="btn btn-success">Sign in</button>50 - </form>51 - </div><!--/.navbar-collapse -->52 - </div>53 - </div>54 -55 - <!-- Main jumbotron for a primary marketing message or call to action -->56 - <div class="jumbotron">57 - <div class="container">58 - <h2>SeCuris</h2>59 - <p>Server License for CurisTEC products.</p>60 - </div>61 - </div>62 -63 -<div class="container">64 -<div class="col-md-8 col-md-offset-2">65 - <form role="form" class="form-horizontal" action='/login' method="POST">66 - <fieldset>67 - <div id="legend">68 - <legend class="">Login</legend>69 - </div>70 - <div class="form-group">71 - <!-- Username -->72 - <label class="col-sm-3 control-label" for="username">Username</label>73 - <div class="col-sm-5">74 - <input type="text" id="user" name="user" placeholder="" class="form-control">75 - </div>76 - </div>77 - <div class="form-group">78 - <!-- Password-->79 - <label class="col-sm-3 control-label" for="password">Password</label>80 - <div class="col-sm-5">81 - <input type="password" id="password" name="password" placeholder="" class="form-control">82 - </div>83 - </div>84 - <div class="checkbox">85 - <label>86 - <input type="checkbox"> Remember credentials87 - </label>88 - </div>89 - <button type="submit" class="btn btn-primary">Login</button>90 - </fieldset>91 - </form>26 +<!-- <script src="js/vendor/modernizr-2.6.2.min.js"></script> -->27 +</head>28 +<body>29 + <div class="navbar navbar-inverse navbar-fixed-top">30 + <div class="container">31 + <div class="navbar-header">32 + <button type="button" class="navbar-toggle" data-toggle="collapse"33 + data-target=".navbar-collapse">34 + <span class="icon-bar"></span> <span class="icon-bar"></span> <span35 + class="icon-bar"></span>36 + </button>37 + <a class="navbar-brand" href="#">SeCuris</a>92 38 </div> 93 -</div>39 + <div class="navbar-collapse collapse">40 + <ul class="nav navbar-nav navbar-right">41 + <li><a href="#about">About</a></li>42 + <li><a href="#contact">Contact</a></li>43 + </ul>44 + </div>45 + </div>46 + </div>47 +48 + <!-- Main jumbotron for a primary marketing message or call to action -->49 + <div class="jumbotron">50 + <div class="container">51 + <h2>SeCuris</h2>52 + <p>Server License for CurisTEC products.</p>53 + </div>54 + </div>55 +56 + <div class="container">57 + <div class="col-md-8 col-md-offset-2">58 + <form role="form" class="form-horizontal" ng-controller="LoginCtrl"59 + ng-submit="submit()" name="loginForm">60 + <p class="lead">Sign in application</p>61 + <fieldset>62 + <div class="form-group">63 + <label class="col-md-3 control-label" for="username">Username</label>64 + <div class="col-md-5">65 + <input type="text" id="username" name="username" placeholder=""66 + class="form-control" ng-model="username" required>67 + </div>68 + </div>69 + <div class="form-group">70 + <!-- Password-->71 + <label class="col-md-3 control-label" for="password">Password</label>72 + <div class="col-md-5">73 + <input type="password" id="password" name="password"74 + placeholder="" class="form-control" ng-model="password" required>75 + </div>76 + </div>77 + <div ng-show="$loginerror" class="alert alert-danger col-md-8 hide" id="loginError">78 + <button type="button" class="close" aria-hidden="true" ng-click="hideAlert()">×</button>79 + <span>{{$errormsg}}</span>80 + </div>81 + </fieldset>82 + <button type="submit" class="btn btn-primary">Login</button>83 + </form>84 + </div>85 + </div>94 86 95 87 96 - <hr>97 -<div>98 - <footer>99 - <small style="margin: auto; display:block;" class="text-center">© CurisTEC 2014</small>100 - </footer>101 - </div> <!-- /container -->102 - <script src="//ajax.googleapis.com/ajax/libs/jquery/1.10.1/jquery.min.js"></script>103 -104 - <script type="text/javascript" src="//netdna.bootstrapcdn.com/bootstrap/3.0.3/js/bootstrap.min.js"></script>88 + <hr>89 + <div>90 + <footer>91 + <small style="margin: auto; display: block;" class="text-center">©92 + CurisTEC 2014</small>93 + </footer>94 + </div>95 + <!-- /container -->96 + <script97 + src="//ajax.googleapis.com/ajax/libs/jquery/1.10.1/jquery.min.js"></script>105 98 106 -<!-- <script src="js/main.js"></script> -->107 - </body>99 + <script type="text/javascript"100 + src="//netdna.bootstrapcdn.com/bootstrap/3.0.3/js/bootstrap.min.js"></script>101 + <script type="text/javascript"102 + src="//ajax.googleapis.com/ajax/libs/angularjs/1.2.6/angular.min.js"></script>103 + <script type="text/javascript"104 + src="//code.angularjs.org/1.2.6/angular-route.js"></script>105 + <script type="text/javascript"106 + src="//code.angularjs.org/1.2.6/angular-resource.js"></script>107 + <script type="text/javascript" src="js/login.js"></script>108 +109 + <!-- <script src="js/main.js"></script> -->110 + <script type="text/javascript">111 + $(function() {112 + $('#user').focus();113 + });114 +115 + </script>116 +</body>108 117 </html> securis/src/main/resources/static/main.html
.. .. @@ -1,5 +1,142 @@ 1 -<html>2 - <body>3 - <h1>Main page</h1>4 - </body>1 +<!DOCTYPE html>2 +<html class="no-js" lang="en" ng-app="app" xmlns:ng="http://angularjs.org">3 +<head>4 +<meta charset="utf-8">5 +<meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1">6 +<title></title>7 +<meta name="description" content="">8 +<meta name="viewport" content="width=device-width">9 +10 +<link rel="stylesheet"11 + href="http://netdna.bootstrapcdn.com/bootstrap/3.0.3/css/bootstrap.min.css">12 +<style>13 +body {14 + padding-top: 50px;15 + padding-bottom: 20px;16 +}17 +</style>18 +<link rel="stylesheet"19 + href="//cdnjs.cloudflare.com/ajax/libs/twitter-bootstrap/3.0.3/css/bootstrap-theme.min.css">20 +<link rel="stylesheet"21 + href="http://netdna.bootstrapcdn.com/font-awesome/4.0.3/css/font-awesome.min.css">22 +<!-- <link rel="stylesheet" href="css/main.css"> -->23 +<meta name="viewport" content="width=device-width, initial-scale=1.0">24 +<!-- <link href="assets/css/bootstrap-responsive.css" rel="stylesheet"> -->25 +26 +<!-- <script src="js/vendor/modernizr-2.6.2.min.js"></script> -->27 +</head>28 +<body>29 + <div class="navbar navbar-inverse navbar-fixed-top">30 + <div class="container">31 + <div class="navbar-header">32 + <button type="button" class="navbar-toggle" data-toggle="collapse"33 + data-target=".navbar-collapse">34 + <span class="icon-bar"></span> <span class="icon-bar"></span> <span35 + class="icon-bar"></span>36 + </button>37 + <ul class="nav navbar-nav navbar-left">38 + <li>SeCuris<li>39 + <li><a href="#licenses">Licenses</a></li>40 + <li><a href="#admin">Admin</a></li>41 + </ul>42 + </div>43 + <div class="navbar-collapse collapse">44 + <ul class="nav navbar-nav navbar-right">45 + <li><a href="#about">About</a></li>46 + <li><a href="#contact">Contact</a></li>47 + </ul>48 + </div>49 + </div>50 + </div>51 +52 + <!-- Main jumbotron for a primary marketing message or call to action -->53 + <div class="container">54 + <div class="col-md-4">55 + <div class="panel panel-default">56 + <div class="panel-heading">Packs</div>57 +58 + <table class="table table-striped table-hover">59 + <thead>60 + <tr>61 + <th>Org.</th>62 + <th>Pack</th>63 + </tr>64 + </thead>65 + <tbody>66 + <tr><td>BP UK</td><td>BP-CICS-001</td></tr>67 + <tr><td>BP UK</td><td>BP-CISA-001</td></tr>68 + <tr><td>BP Texas</td><td>BP-CICS-002</td></tr>69 + <tr><td>BP Texas</td><td>BP-CISA-002</td></tr>70 + </tbody>71 + <tfoot>72 + </tfoot>73 + </table>74 + </div>75 + </div>76 + <div class="col-md-8">77 + <div class="panel panel-default">78 + <div class="panel-heading">Licenses</div>79 +80 + <table class="table table-hover">81 + <thead>82 + <tr>83 + <th>License</th>84 + <th>Email</th>85 + <th>Status</th>86 + </tr>87 + </thead>88 + <tbody>89 + <tr><td>BP-CICS-0028HAHAHA UK</td><td>user1@bp.com</td><td class="success"><span class="glyphicon glyphicon-ok-circle"></span></td></tr>90 + <tr><td>BP-CICS-0029HAHAHA UK</td><td>user2@bp.com</td><td class="success"><span class="glyphicon glyphicon-ok-circle"></span></td></tr>91 + <tr><td>BP-CICS-0028HAHAHA UK</td><td>user3@bp.com</td><td class="danger"><span class="glyphicon glyphicon-warning-sign"></span></td></tr>92 + <tr><td>BP-CICS-0128HAHAHA UK</td><td>user4@bp.com</td><td class="danger"><span class="glyphicon glyphicon-warning-sign"></span></td></tr>93 + <tr><td>BP-CICS-00qqasddHA UK</td><td>user5@bp.com</td><td class="success"><span class="glyphicon glyphicon-ok-circle"></span></td></tr>94 + <tr><td>BP-CICS-0028HAaaHA UK</td><td>user6@bp.com</td><td class="warning"><span class="glyphicon glyphicon-question-sign"></span></td></tr>95 + <tr><td>BP-CICS-0028aaaaHA UK</td><td>user7@bp.com</td><td class="warning"><span class="glyphicon glyphicon-question-sign"></span></td></tr>96 + <tr><td>BP-CICS-0028HAHAHA UK</td><td>user8@bp.com</td><td class="success"><span class="glyphicon glyphicon-ok-circle"></span></td></tr>97 + <tr><td>BP-CICS-0028HAHAHA UK</td><td>user9@bp.com</td><td><span class="glyphicon glyphicon-ok-circle"></span></td></tr>98 + <tr><td>BP-CICS-0028HAHAHA UK</td><td>user0@bp.com</td><td><span class="glyphicon glyphicon-ok-circle"></span></td></tr>99 + <tr><td>BP-CICS-0028HAHAHA UK</td><td>user11@bp.com</td><td><span class="glyphicon glyphicon-ok-circle"></span></td></tr>100 + <tr><td>BP-CICS-0028HAHAHA UK</td><td>user12@bp.com</td><td><span class="glyphicon glyphicon-ok-circle"></span></td></tr>101 + <tr><td>BP-CICS-0028HAHAHA UK</td><td>user13@bp.com</td><td><span class="glyphicon glyphicon-ok-circle"></span></td></tr>102 + <tr><td>BP-CICS-0028HAHAHA UK</td><td>user14@bp.com</td><td><span class="glyphicon glyphicon-ok-circle"></span></td></tr>103 + <tr><td>BP-CICS-0028HAHAHA UK</td><td>user15@bp.com</td><td><span class="glyphicon glyphicon-ok-circle"></span></td></tr>104 + <tr><td>BP-CICS-0028HAHAHA UK</td><td>user16@bp.com</td><td><span class="glyphicon glyphicon-ok-circle"></span></td></tr>105 + </tbody>106 + <tfoot>107 + </tfoot>108 + </table>109 + </div>110 + </div>111 + </div>112 +113 + <hr>114 + <div>115 + <footer>116 + <small style="margin: auto; display: block;" class="text-center">©117 + CurisTEC 2014</small>118 + </footer>119 + </div>120 + <!-- /container -->121 + <script122 + src="//ajax.googleapis.com/ajax/libs/jquery/1.10.1/jquery.min.js"></script>123 +124 + <script type="text/javascript"125 + src="//netdna.bootstrapcdn.com/bootstrap/3.0.3/js/bootstrap.min.js"></script>126 + <script type="text/javascript"127 + src="//ajax.googleapis.com/ajax/libs/angularjs/1.2.6/angular.min.js"></script>128 + <script type="text/javascript"129 + src="//code.angularjs.org/1.2.6/angular-route.js"></script>130 + <script type="text/javascript"131 + src="//code.angularjs.org/1.2.6/angular-resource.js"></script>132 + <script type="text/javascript" src="js/login.js"></script>133 +134 + <!-- <script src="js/main.js"></script> -->135 + <script type="text/javascript">136 + $(function() {137 +138 + });139 +140 + </script>141 +</body>5 142 </html>