Browse Source

三方登录

root 5 years ago
parent
commit
1604f10fd7
26 changed files with 10251 additions and 45 deletions
  1. 2 0
      src/main/java/com/kingkong/bljs/config/AuthorizationServerConfiguration.java
  2. 1 0
      src/main/java/com/kingkong/bljs/config/BljsConfig.java
  3. 13 0
      src/main/java/com/kingkong/bljs/config/ResourceServerConfig.java
  4. 10 0
      src/main/java/com/kingkong/bljs/config/WebSecurityConfig.java
  5. 35 0
      src/main/java/com/kingkong/bljs/controller/MainController.java
  6. 38 0
      src/main/java/com/kingkong/bljs/security/MyAuthenticationFailHandler.java
  7. 25 0
      src/main/java/com/kingkong/bljs/security/MyAuthenticationSuccessHandler.java
  8. 587 0
      src/main/resources/public/bootstrap-3.3.7-dist/css/bootstrap-theme.css
  9. 1 0
      src/main/resources/public/bootstrap-3.3.7-dist/css/bootstrap-theme.css.map
  10. 6 0
      src/main/resources/public/bootstrap-3.3.7-dist/css/bootstrap-theme.min.css
  11. 1 0
      src/main/resources/public/bootstrap-3.3.7-dist/css/bootstrap-theme.min.css.map
  12. 6757 0
      src/main/resources/public/bootstrap-3.3.7-dist/css/bootstrap.css
  13. 1 0
      src/main/resources/public/bootstrap-3.3.7-dist/css/bootstrap.css.map
  14. 6 0
      src/main/resources/public/bootstrap-3.3.7-dist/css/bootstrap.min.css
  15. 1 0
      src/main/resources/public/bootstrap-3.3.7-dist/css/bootstrap.min.css.map
  16. BIN
      src/main/resources/public/bootstrap-3.3.7-dist/fonts/glyphicons-halflings-regular.eot
  17. 288 0
      src/main/resources/public/bootstrap-3.3.7-dist/fonts/glyphicons-halflings-regular.svg
  18. BIN
      src/main/resources/public/bootstrap-3.3.7-dist/fonts/glyphicons-halflings-regular.ttf
  19. BIN
      src/main/resources/public/bootstrap-3.3.7-dist/fonts/glyphicons-halflings-regular.woff
  20. BIN
      src/main/resources/public/bootstrap-3.3.7-dist/fonts/glyphicons-halflings-regular.woff2
  21. 2377 0
      src/main/resources/public/bootstrap-3.3.7-dist/js/bootstrap.js
  22. 7 0
      src/main/resources/public/bootstrap-3.3.7-dist/js/bootstrap.min.js
  23. 5 0
      src/main/resources/public/bootstrap-3.3.7-dist/js/jquery.min.js
  24. 13 0
      src/main/resources/public/bootstrap-3.3.7-dist/js/npm.js
  25. 33 0
      src/main/resources/templates/approvale.html
  26. 44 45
      src/main/resources/templates/login.html

+ 2 - 0
src/main/java/com/kingkong/bljs/config/AuthorizationServerConfiguration.java

@@ -64,6 +64,8 @@ public class AuthorizationServerConfiguration extends AuthorizationServerConfigu
64 64
         tokenService.setReuseRefreshToken(false);
65 65
         endpoints.tokenServices(tokenService);
66 66
 
67
+       endpoints.pathMapping("/oauth/confirm_access","/oauth/approvale");
68
+
67 69
     }
68 70
 
69 71
 

+ 1 - 0
src/main/java/com/kingkong/bljs/config/BljsConfig.java

@@ -44,6 +44,7 @@ public class BljsConfig implements  WebMvcConfigurer {
44 44
     public void addViewControllers(ViewControllerRegistry registry) {
45 45
         registry.addViewController("/").setViewName("redirect:/index.html");
46 46
         registry.setOrder(Ordered.HIGHEST_PRECEDENCE);
47
+        //registry.addViewController("/oauth/confirm_access").setViewName("approvale");
47 48
         // super.
48 49
         // super.addViewControllers(registry);
49 50
     }

+ 13 - 0
src/main/java/com/kingkong/bljs/config/ResourceServerConfig.java

@@ -1,5 +1,8 @@
1 1
 package com.kingkong.bljs.config;
2 2
 
3
+import com.kingkong.bljs.security.MyAuthenticationFailHandler;
4
+import com.kingkong.bljs.security.MyAuthenticationSuccessHandler;
5
+import org.springframework.beans.factory.annotation.Autowired;
3 6
 import org.springframework.context.annotation.Configuration;
4 7
 import org.springframework.core.annotation.Order;
5 8
 import org.springframework.security.config.annotation.web.builders.HttpSecurity;
@@ -12,6 +15,13 @@ import org.springframework.security.oauth2.config.annotation.web.configuration.R
12 15
 @EnableResourceServer
13 16
 public class ResourceServerConfig extends ResourceServerConfigurerAdapter {
14 17
 
18
+
19
+    @Autowired
20
+    private MyAuthenticationFailHandler myAuthenticationFailHandler;
21
+
22
+    @Autowired
23
+    private MyAuthenticationSuccessHandler myAuthenticationSuccessHandler;
24
+
15 25
     @Override
16 26
     public void configure(HttpSecurity http) throws Exception{
17 27
 
@@ -25,6 +35,9 @@ public class ResourceServerConfig extends ResourceServerConfigurerAdapter {
25 35
                 .antMatchers("/oauth/authorize","/oauth/token","/api/app","/api/i18n","/test","/api/report","/api/lang").permitAll()
26 36
                 .antMatchers("/api/**").authenticated()
27 37
                 .and().formLogin()
38
+                .loginPage("/login")
39
+                .failureHandler(myAuthenticationFailHandler)
40
+                //.successHandler(myAuthenticationSuccessHandler)
28 41
                 //.authenticationDetailsSource(authenticationDetailsSource)
29 42
                 .and().logout().permitAll().and().cors().and().csrf().disable();
30 43
 

+ 10 - 0
src/main/java/com/kingkong/bljs/config/WebSecurityConfig.java

@@ -2,6 +2,8 @@ package com.kingkong.bljs.config;
2 2
 
3 3
 import com.kingkong.bljs.security.CustomUserDetailsService;
4 4
 import com.kingkong.bljs.security.CustomtAuthenticationProvider;
5
+import com.kingkong.bljs.security.MyAuthenticationFailHandler;
6
+import com.kingkong.bljs.security.MyAuthenticationSuccessHandler;
5 7
 import org.springframework.beans.factory.annotation.Autowired;
6 8
 import org.springframework.context.annotation.Bean;
7 9
 import org.springframework.context.annotation.Configuration;
@@ -31,6 +33,8 @@ public class WebSecurityConfig extends WebSecurityConfigurerAdapter {
31 33
     @Autowired
32 34
     private CustomUserDetailsService customUserDetailsService;
33 35
 
36
+    @Autowired
37
+    private MyAuthenticationFailHandler myAuthenticationFailHandler;
34 38
 
35 39
 
36 40
     @Autowired
@@ -40,6 +44,9 @@ public class WebSecurityConfig extends WebSecurityConfigurerAdapter {
40 44
     private AuthenticationDetailsSource<HttpServletRequest, WebAuthenticationDetails> authenticationDetailsSource;
41 45
 
42 46
 
47
+    @Autowired
48
+    private MyAuthenticationSuccessHandler myAuthenticationSuccessHandler;
49
+
43 50
     @Override
44 51
     protected void configure(HttpSecurity http) throws Exception {
45 52
         //设置规则
@@ -48,6 +55,9 @@ public class WebSecurityConfig extends WebSecurityConfigurerAdapter {
48 55
                 .antMatchers("/oauth/*","/api/app","/api/i18n","/test","/api/report").permitAll()
49 56
                 .antMatchers("/**").authenticated()
50 57
                 .and().formLogin()
58
+                .loginPage("/login")
59
+                .failureHandler(myAuthenticationFailHandler)
60
+                //.successHandler(myAuthenticationSuccessHandler)
51 61
                 //.authenticationDetailsSource(authenticationDetailsSource)
52 62
                 .and().logout().permitAll().and().cors().and().csrf().disable();
53 63
 

+ 35 - 0
src/main/java/com/kingkong/bljs/controller/MainController.java

@@ -0,0 +1,35 @@
1
+package com.kingkong.bljs.controller;
2
+
3
+import org.springframework.security.oauth2.provider.AuthorizationRequest;
4
+import org.springframework.stereotype.Controller;
5
+import org.springframework.web.bind.annotation.*;
6
+import org.springframework.web.servlet.ModelAndView;
7
+
8
+import javax.servlet.http.HttpServletRequest;
9
+import java.util.ArrayList;
10
+import java.util.List;
11
+import java.util.Map;
12
+
13
+@Controller
14
+@SessionAttributes({ "authorizationRequest" })
15
+public class MainController {
16
+
17
+
18
+    @GetMapping("/login")
19
+    public ModelAndView login(@RequestParam(name="error",required=false)String error,
20
+                              @RequestParam(name="logout",required=false)String logout) {
21
+        ModelAndView page = new ModelAndView();
22
+        page.setViewName("login");
23
+        page.addObject("error",error);
24
+        return page;
25
+    }
26
+
27
+    @RequestMapping("/oauth/approvale")
28
+    public ModelAndView getAccessConfirmation(Map<String, Object> model, HttpServletRequest request) throws Exception {
29
+        AuthorizationRequest authorizationRequest = (AuthorizationRequest) model.get("authorizationRequest");
30
+        ModelAndView view = new ModelAndView();
31
+        view.setViewName("approvale");
32
+        view.addObject("clientId", authorizationRequest.getClientId());
33
+        return view;
34
+    }
35
+}

+ 38 - 0
src/main/java/com/kingkong/bljs/security/MyAuthenticationFailHandler.java

@@ -0,0 +1,38 @@
1
+package com.kingkong.bljs.security;
2
+
3
+import com.alibaba.fastjson.JSONObject;
4
+import org.springframework.beans.factory.annotation.Autowired;
5
+import org.springframework.security.core.AuthenticationException;
6
+import org.springframework.security.web.DefaultRedirectStrategy;
7
+import org.springframework.security.web.RedirectStrategy;
8
+import org.springframework.security.web.authentication.AuthenticationFailureHandler;
9
+import org.springframework.stereotype.Component;
10
+
11
+import javax.servlet.ServletException;
12
+import javax.servlet.http.HttpServletRequest;
13
+import javax.servlet.http.HttpServletResponse;
14
+import java.io.IOException;
15
+import java.net.URLEncoder;
16
+import java.util.HashMap;
17
+import java.util.Map;
18
+
19
+@Component
20
+public class MyAuthenticationFailHandler implements AuthenticationFailureHandler {
21
+
22
+
23
+
24
+    private RedirectStrategy redirectStrategy = new DefaultRedirectStrategy();
25
+
26
+    @Override
27
+    public void onAuthenticationFailure(HttpServletRequest request, HttpServletResponse response, AuthenticationException exception) throws IOException, ServletException {
28
+//        JSONObject result = new JSONObject();
29
+//        result.put("error",exception.getMessage());
30
+//        response.setContentType("application/json;charset=UTF-8");
31
+//        response.getWriter().write(result.toString());
32
+       // response.encodeRedirectURL("/login?error=11111111111");
33
+        //super.setDefaultFailureUrl("/login/index?error=true"); // 登录失败,跳转到登录界面
34
+        //super.onAuthenticationFailure(request, response, exception);
35
+        response.sendRedirect("/login?error=" + URLEncoder.encode( exception.getMessage(),"utf-8" ));
36
+    }
37
+
38
+}

+ 25 - 0
src/main/java/com/kingkong/bljs/security/MyAuthenticationSuccessHandler.java

@@ -0,0 +1,25 @@
1
+package com.kingkong.bljs.security;
2
+
3
+import org.springframework.security.core.Authentication;
4
+import org.springframework.security.web.DefaultRedirectStrategy;
5
+import org.springframework.security.web.RedirectStrategy;
6
+import org.springframework.security.web.authentication.AuthenticationSuccessHandler;
7
+import org.springframework.stereotype.Component;
8
+
9
+import javax.servlet.ServletException;
10
+import javax.servlet.http.HttpServletRequest;
11
+import javax.servlet.http.HttpServletResponse;
12
+import java.io.IOException;
13
+import java.util.HashMap;
14
+import java.util.Map;
15
+
16
+@Component
17
+public class MyAuthenticationSuccessHandler implements AuthenticationSuccessHandler {
18
+
19
+    private RedirectStrategy redirectStrategy = new DefaultRedirectStrategy();
20
+
21
+    @Override
22
+    public void onAuthenticationSuccess(HttpServletRequest request, HttpServletResponse response, Authentication authentication) throws IOException, ServletException {
23
+        System.out.println("xx");
24
+    }
25
+}

+ 587 - 0
src/main/resources/public/bootstrap-3.3.7-dist/css/bootstrap-theme.css

@@ -0,0 +1,587 @@
1
+/*!
2
+ * Bootstrap v3.3.7 (http://getbootstrap.com)
3
+ * Copyright 2011-2016 Twitter, Inc.
4
+ * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)
5
+ */
6
+.btn-default,
7
+.btn-primary,
8
+.btn-success,
9
+.btn-info,
10
+.btn-warning,
11
+.btn-danger {
12
+  text-shadow: 0 -1px 0 rgba(0, 0, 0, .2);
13
+  -webkit-box-shadow: inset 0 1px 0 rgba(255, 255, 255, .15), 0 1px 1px rgba(0, 0, 0, .075);
14
+          box-shadow: inset 0 1px 0 rgba(255, 255, 255, .15), 0 1px 1px rgba(0, 0, 0, .075);
15
+}
16
+.btn-default:active,
17
+.btn-primary:active,
18
+.btn-success:active,
19
+.btn-info:active,
20
+.btn-warning:active,
21
+.btn-danger:active,
22
+.btn-default.active,
23
+.btn-primary.active,
24
+.btn-success.active,
25
+.btn-info.active,
26
+.btn-warning.active,
27
+.btn-danger.active {
28
+  -webkit-box-shadow: inset 0 3px 5px rgba(0, 0, 0, .125);
29
+          box-shadow: inset 0 3px 5px rgba(0, 0, 0, .125);
30
+}
31
+.btn-default.disabled,
32
+.btn-primary.disabled,
33
+.btn-success.disabled,
34
+.btn-info.disabled,
35
+.btn-warning.disabled,
36
+.btn-danger.disabled,
37
+.btn-default[disabled],
38
+.btn-primary[disabled],
39
+.btn-success[disabled],
40
+.btn-info[disabled],
41
+.btn-warning[disabled],
42
+.btn-danger[disabled],
43
+fieldset[disabled] .btn-default,
44
+fieldset[disabled] .btn-primary,
45
+fieldset[disabled] .btn-success,
46
+fieldset[disabled] .btn-info,
47
+fieldset[disabled] .btn-warning,
48
+fieldset[disabled] .btn-danger {
49
+  -webkit-box-shadow: none;
50
+          box-shadow: none;
51
+}
52
+.btn-default .badge,
53
+.btn-primary .badge,
54
+.btn-success .badge,
55
+.btn-info .badge,
56
+.btn-warning .badge,
57
+.btn-danger .badge {
58
+  text-shadow: none;
59
+}
60
+.btn:active,
61
+.btn.active {
62
+  background-image: none;
63
+}
64
+.btn-default {
65
+  text-shadow: 0 1px 0 #fff;
66
+  background-image: -webkit-linear-gradient(top, #fff 0%, #e0e0e0 100%);
67
+  background-image:      -o-linear-gradient(top, #fff 0%, #e0e0e0 100%);
68
+  background-image: -webkit-gradient(linear, left top, left bottom, from(#fff), to(#e0e0e0));
69
+  background-image:         linear-gradient(to bottom, #fff 0%, #e0e0e0 100%);
70
+  filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffffffff', endColorstr='#ffe0e0e0', GradientType=0);
71
+  filter: progid:DXImageTransform.Microsoft.gradient(enabled = false);
72
+  background-repeat: repeat-x;
73
+  border-color: #dbdbdb;
74
+  border-color: #ccc;
75
+}
76
+.btn-default:hover,
77
+.btn-default:focus {
78
+  background-color: #e0e0e0;
79
+  background-position: 0 -15px;
80
+}
81
+.btn-default:active,
82
+.btn-default.active {
83
+  background-color: #e0e0e0;
84
+  border-color: #dbdbdb;
85
+}
86
+.btn-default.disabled,
87
+.btn-default[disabled],
88
+fieldset[disabled] .btn-default,
89
+.btn-default.disabled:hover,
90
+.btn-default[disabled]:hover,
91
+fieldset[disabled] .btn-default:hover,
92
+.btn-default.disabled:focus,
93
+.btn-default[disabled]:focus,
94
+fieldset[disabled] .btn-default:focus,
95
+.btn-default.disabled.focus,
96
+.btn-default[disabled].focus,
97
+fieldset[disabled] .btn-default.focus,
98
+.btn-default.disabled:active,
99
+.btn-default[disabled]:active,
100
+fieldset[disabled] .btn-default:active,
101
+.btn-default.disabled.active,
102
+.btn-default[disabled].active,
103
+fieldset[disabled] .btn-default.active {
104
+  background-color: #e0e0e0;
105
+  background-image: none;
106
+}
107
+.btn-primary {
108
+  background-image: -webkit-linear-gradient(top, #337ab7 0%, #265a88 100%);
109
+  background-image:      -o-linear-gradient(top, #337ab7 0%, #265a88 100%);
110
+  background-image: -webkit-gradient(linear, left top, left bottom, from(#337ab7), to(#265a88));
111
+  background-image:         linear-gradient(to bottom, #337ab7 0%, #265a88 100%);
112
+  filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff337ab7', endColorstr='#ff265a88', GradientType=0);
113
+  filter: progid:DXImageTransform.Microsoft.gradient(enabled = false);
114
+  background-repeat: repeat-x;
115
+  border-color: #245580;
116
+}
117
+.btn-primary:hover,
118
+.btn-primary:focus {
119
+  background-color: #265a88;
120
+  background-position: 0 -15px;
121
+}
122
+.btn-primary:active,
123
+.btn-primary.active {
124
+  background-color: #265a88;
125
+  border-color: #245580;
126
+}
127
+.btn-primary.disabled,
128
+.btn-primary[disabled],
129
+fieldset[disabled] .btn-primary,
130
+.btn-primary.disabled:hover,
131
+.btn-primary[disabled]:hover,
132
+fieldset[disabled] .btn-primary:hover,
133
+.btn-primary.disabled:focus,
134
+.btn-primary[disabled]:focus,
135
+fieldset[disabled] .btn-primary:focus,
136
+.btn-primary.disabled.focus,
137
+.btn-primary[disabled].focus,
138
+fieldset[disabled] .btn-primary.focus,
139
+.btn-primary.disabled:active,
140
+.btn-primary[disabled]:active,
141
+fieldset[disabled] .btn-primary:active,
142
+.btn-primary.disabled.active,
143
+.btn-primary[disabled].active,
144
+fieldset[disabled] .btn-primary.active {
145
+  background-color: #265a88;
146
+  background-image: none;
147
+}
148
+.btn-success {
149
+  background-image: -webkit-linear-gradient(top, #5cb85c 0%, #419641 100%);
150
+  background-image:      -o-linear-gradient(top, #5cb85c 0%, #419641 100%);
151
+  background-image: -webkit-gradient(linear, left top, left bottom, from(#5cb85c), to(#419641));
152
+  background-image:         linear-gradient(to bottom, #5cb85c 0%, #419641 100%);
153
+  filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff5cb85c', endColorstr='#ff419641', GradientType=0);
154
+  filter: progid:DXImageTransform.Microsoft.gradient(enabled = false);
155
+  background-repeat: repeat-x;
156
+  border-color: #3e8f3e;
157
+}
158
+.btn-success:hover,
159
+.btn-success:focus {
160
+  background-color: #419641;
161
+  background-position: 0 -15px;
162
+}
163
+.btn-success:active,
164
+.btn-success.active {
165
+  background-color: #419641;
166
+  border-color: #3e8f3e;
167
+}
168
+.btn-success.disabled,
169
+.btn-success[disabled],
170
+fieldset[disabled] .btn-success,
171
+.btn-success.disabled:hover,
172
+.btn-success[disabled]:hover,
173
+fieldset[disabled] .btn-success:hover,
174
+.btn-success.disabled:focus,
175
+.btn-success[disabled]:focus,
176
+fieldset[disabled] .btn-success:focus,
177
+.btn-success.disabled.focus,
178
+.btn-success[disabled].focus,
179
+fieldset[disabled] .btn-success.focus,
180
+.btn-success.disabled:active,
181
+.btn-success[disabled]:active,
182
+fieldset[disabled] .btn-success:active,
183
+.btn-success.disabled.active,
184
+.btn-success[disabled].active,
185
+fieldset[disabled] .btn-success.active {
186
+  background-color: #419641;
187
+  background-image: none;
188
+}
189
+.btn-info {
190
+  background-image: -webkit-linear-gradient(top, #5bc0de 0%, #2aabd2 100%);
191
+  background-image:      -o-linear-gradient(top, #5bc0de 0%, #2aabd2 100%);
192
+  background-image: -webkit-gradient(linear, left top, left bottom, from(#5bc0de), to(#2aabd2));
193
+  background-image:         linear-gradient(to bottom, #5bc0de 0%, #2aabd2 100%);
194
+  filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff5bc0de', endColorstr='#ff2aabd2', GradientType=0);
195
+  filter: progid:DXImageTransform.Microsoft.gradient(enabled = false);
196
+  background-repeat: repeat-x;
197
+  border-color: #28a4c9;
198
+}
199
+.btn-info:hover,
200
+.btn-info:focus {
201
+  background-color: #2aabd2;
202
+  background-position: 0 -15px;
203
+}
204
+.btn-info:active,
205
+.btn-info.active {
206
+  background-color: #2aabd2;
207
+  border-color: #28a4c9;
208
+}
209
+.btn-info.disabled,
210
+.btn-info[disabled],
211
+fieldset[disabled] .btn-info,
212
+.btn-info.disabled:hover,
213
+.btn-info[disabled]:hover,
214
+fieldset[disabled] .btn-info:hover,
215
+.btn-info.disabled:focus,
216
+.btn-info[disabled]:focus,
217
+fieldset[disabled] .btn-info:focus,
218
+.btn-info.disabled.focus,
219
+.btn-info[disabled].focus,
220
+fieldset[disabled] .btn-info.focus,
221
+.btn-info.disabled:active,
222
+.btn-info[disabled]:active,
223
+fieldset[disabled] .btn-info:active,
224
+.btn-info.disabled.active,
225
+.btn-info[disabled].active,
226
+fieldset[disabled] .btn-info.active {
227
+  background-color: #2aabd2;
228
+  background-image: none;
229
+}
230
+.btn-warning {
231
+  background-image: -webkit-linear-gradient(top, #f0ad4e 0%, #eb9316 100%);
232
+  background-image:      -o-linear-gradient(top, #f0ad4e 0%, #eb9316 100%);
233
+  background-image: -webkit-gradient(linear, left top, left bottom, from(#f0ad4e), to(#eb9316));
234
+  background-image:         linear-gradient(to bottom, #f0ad4e 0%, #eb9316 100%);
235
+  filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#fff0ad4e', endColorstr='#ffeb9316', GradientType=0);
236
+  filter: progid:DXImageTransform.Microsoft.gradient(enabled = false);
237
+  background-repeat: repeat-x;
238
+  border-color: #e38d13;
239
+}
240
+.btn-warning:hover,
241
+.btn-warning:focus {
242
+  background-color: #eb9316;
243
+  background-position: 0 -15px;
244
+}
245
+.btn-warning:active,
246
+.btn-warning.active {
247
+  background-color: #eb9316;
248
+  border-color: #e38d13;
249
+}
250
+.btn-warning.disabled,
251
+.btn-warning[disabled],
252
+fieldset[disabled] .btn-warning,
253
+.btn-warning.disabled:hover,
254
+.btn-warning[disabled]:hover,
255
+fieldset[disabled] .btn-warning:hover,
256
+.btn-warning.disabled:focus,
257
+.btn-warning[disabled]:focus,
258
+fieldset[disabled] .btn-warning:focus,
259
+.btn-warning.disabled.focus,
260
+.btn-warning[disabled].focus,
261
+fieldset[disabled] .btn-warning.focus,
262
+.btn-warning.disabled:active,
263
+.btn-warning[disabled]:active,
264
+fieldset[disabled] .btn-warning:active,
265
+.btn-warning.disabled.active,
266
+.btn-warning[disabled].active,
267
+fieldset[disabled] .btn-warning.active {
268
+  background-color: #eb9316;
269
+  background-image: none;
270
+}
271
+.btn-danger {
272
+  background-image: -webkit-linear-gradient(top, #d9534f 0%, #c12e2a 100%);
273
+  background-image:      -o-linear-gradient(top, #d9534f 0%, #c12e2a 100%);
274
+  background-image: -webkit-gradient(linear, left top, left bottom, from(#d9534f), to(#c12e2a));
275
+  background-image:         linear-gradient(to bottom, #d9534f 0%, #c12e2a 100%);
276
+  filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffd9534f', endColorstr='#ffc12e2a', GradientType=0);
277
+  filter: progid:DXImageTransform.Microsoft.gradient(enabled = false);
278
+  background-repeat: repeat-x;
279
+  border-color: #b92c28;
280
+}
281
+.btn-danger:hover,
282
+.btn-danger:focus {
283
+  background-color: #c12e2a;
284
+  background-position: 0 -15px;
285
+}
286
+.btn-danger:active,
287
+.btn-danger.active {
288
+  background-color: #c12e2a;
289
+  border-color: #b92c28;
290
+}
291
+.btn-danger.disabled,
292
+.btn-danger[disabled],
293
+fieldset[disabled] .btn-danger,
294
+.btn-danger.disabled:hover,
295
+.btn-danger[disabled]:hover,
296
+fieldset[disabled] .btn-danger:hover,
297
+.btn-danger.disabled:focus,
298
+.btn-danger[disabled]:focus,
299
+fieldset[disabled] .btn-danger:focus,
300
+.btn-danger.disabled.focus,
301
+.btn-danger[disabled].focus,
302
+fieldset[disabled] .btn-danger.focus,
303
+.btn-danger.disabled:active,
304
+.btn-danger[disabled]:active,
305
+fieldset[disabled] .btn-danger:active,
306
+.btn-danger.disabled.active,
307
+.btn-danger[disabled].active,
308
+fieldset[disabled] .btn-danger.active {
309
+  background-color: #c12e2a;
310
+  background-image: none;
311
+}
312
+.thumbnail,
313
+.img-thumbnail {
314
+  -webkit-box-shadow: 0 1px 2px rgba(0, 0, 0, .075);
315
+          box-shadow: 0 1px 2px rgba(0, 0, 0, .075);
316
+}
317
+.dropdown-menu > li > a:hover,
318
+.dropdown-menu > li > a:focus {
319
+  background-color: #e8e8e8;
320
+  background-image: -webkit-linear-gradient(top, #f5f5f5 0%, #e8e8e8 100%);
321
+  background-image:      -o-linear-gradient(top, #f5f5f5 0%, #e8e8e8 100%);
322
+  background-image: -webkit-gradient(linear, left top, left bottom, from(#f5f5f5), to(#e8e8e8));
323
+  background-image:         linear-gradient(to bottom, #f5f5f5 0%, #e8e8e8 100%);
324
+  filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#fff5f5f5', endColorstr='#ffe8e8e8', GradientType=0);
325
+  background-repeat: repeat-x;
326
+}
327
+.dropdown-menu > .active > a,
328
+.dropdown-menu > .active > a:hover,
329
+.dropdown-menu > .active > a:focus {
330
+  background-color: #2e6da4;
331
+  background-image: -webkit-linear-gradient(top, #337ab7 0%, #2e6da4 100%);
332
+  background-image:      -o-linear-gradient(top, #337ab7 0%, #2e6da4 100%);
333
+  background-image: -webkit-gradient(linear, left top, left bottom, from(#337ab7), to(#2e6da4));
334
+  background-image:         linear-gradient(to bottom, #337ab7 0%, #2e6da4 100%);
335
+  filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff337ab7', endColorstr='#ff2e6da4', GradientType=0);
336
+  background-repeat: repeat-x;
337
+}
338
+.navbar-default {
339
+  background-image: -webkit-linear-gradient(top, #fff 0%, #f8f8f8 100%);
340
+  background-image:      -o-linear-gradient(top, #fff 0%, #f8f8f8 100%);
341
+  background-image: -webkit-gradient(linear, left top, left bottom, from(#fff), to(#f8f8f8));
342
+  background-image:         linear-gradient(to bottom, #fff 0%, #f8f8f8 100%);
343
+  filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffffffff', endColorstr='#fff8f8f8', GradientType=0);
344
+  filter: progid:DXImageTransform.Microsoft.gradient(enabled = false);
345
+  background-repeat: repeat-x;
346
+  border-radius: 4px;
347
+  -webkit-box-shadow: inset 0 1px 0 rgba(255, 255, 255, .15), 0 1px 5px rgba(0, 0, 0, .075);
348
+          box-shadow: inset 0 1px 0 rgba(255, 255, 255, .15), 0 1px 5px rgba(0, 0, 0, .075);
349
+}
350
+.navbar-default .navbar-nav > .open > a,
351
+.navbar-default .navbar-nav > .active > a {
352
+  background-image: -webkit-linear-gradient(top, #dbdbdb 0%, #e2e2e2 100%);
353
+  background-image:      -o-linear-gradient(top, #dbdbdb 0%, #e2e2e2 100%);
354
+  background-image: -webkit-gradient(linear, left top, left bottom, from(#dbdbdb), to(#e2e2e2));
355
+  background-image:         linear-gradient(to bottom, #dbdbdb 0%, #e2e2e2 100%);
356
+  filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffdbdbdb', endColorstr='#ffe2e2e2', GradientType=0);
357
+  background-repeat: repeat-x;
358
+  -webkit-box-shadow: inset 0 3px 9px rgba(0, 0, 0, .075);
359
+          box-shadow: inset 0 3px 9px rgba(0, 0, 0, .075);
360
+}
361
+.navbar-brand,
362
+.navbar-nav > li > a {
363
+  text-shadow: 0 1px 0 rgba(255, 255, 255, .25);
364
+}
365
+.navbar-inverse {
366
+  background-image: -webkit-linear-gradient(top, #3c3c3c 0%, #222 100%);
367
+  background-image:      -o-linear-gradient(top, #3c3c3c 0%, #222 100%);
368
+  background-image: -webkit-gradient(linear, left top, left bottom, from(#3c3c3c), to(#222));
369
+  background-image:         linear-gradient(to bottom, #3c3c3c 0%, #222 100%);
370
+  filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff3c3c3c', endColorstr='#ff222222', GradientType=0);
371
+  filter: progid:DXImageTransform.Microsoft.gradient(enabled = false);
372
+  background-repeat: repeat-x;
373
+  border-radius: 4px;
374
+}
375
+.navbar-inverse .navbar-nav > .open > a,
376
+.navbar-inverse .navbar-nav > .active > a {
377
+  background-image: -webkit-linear-gradient(top, #080808 0%, #0f0f0f 100%);
378
+  background-image:      -o-linear-gradient(top, #080808 0%, #0f0f0f 100%);
379
+  background-image: -webkit-gradient(linear, left top, left bottom, from(#080808), to(#0f0f0f));
380
+  background-image:         linear-gradient(to bottom, #080808 0%, #0f0f0f 100%);
381
+  filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff080808', endColorstr='#ff0f0f0f', GradientType=0);
382
+  background-repeat: repeat-x;
383
+  -webkit-box-shadow: inset 0 3px 9px rgba(0, 0, 0, .25);
384
+          box-shadow: inset 0 3px 9px rgba(0, 0, 0, .25);
385
+}
386
+.navbar-inverse .navbar-brand,
387
+.navbar-inverse .navbar-nav > li > a {
388
+  text-shadow: 0 -1px 0 rgba(0, 0, 0, .25);
389
+}
390
+.navbar-static-top,
391
+.navbar-fixed-top,
392
+.navbar-fixed-bottom {
393
+  border-radius: 0;
394
+}
395
+@media (max-width: 767px) {
396
+  .navbar .navbar-nav .open .dropdown-menu > .active > a,
397
+  .navbar .navbar-nav .open .dropdown-menu > .active > a:hover,
398
+  .navbar .navbar-nav .open .dropdown-menu > .active > a:focus {
399
+    color: #fff;
400
+    background-image: -webkit-linear-gradient(top, #337ab7 0%, #2e6da4 100%);
401
+    background-image:      -o-linear-gradient(top, #337ab7 0%, #2e6da4 100%);
402
+    background-image: -webkit-gradient(linear, left top, left bottom, from(#337ab7), to(#2e6da4));
403
+    background-image:         linear-gradient(to bottom, #337ab7 0%, #2e6da4 100%);
404
+    filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff337ab7', endColorstr='#ff2e6da4', GradientType=0);
405
+    background-repeat: repeat-x;
406
+  }
407
+}
408
+.alert {
409
+  text-shadow: 0 1px 0 rgba(255, 255, 255, .2);
410
+  -webkit-box-shadow: inset 0 1px 0 rgba(255, 255, 255, .25), 0 1px 2px rgba(0, 0, 0, .05);
411
+          box-shadow: inset 0 1px 0 rgba(255, 255, 255, .25), 0 1px 2px rgba(0, 0, 0, .05);
412
+}
413
+.alert-success {
414
+  background-image: -webkit-linear-gradient(top, #dff0d8 0%, #c8e5bc 100%);
415
+  background-image:      -o-linear-gradient(top, #dff0d8 0%, #c8e5bc 100%);
416
+  background-image: -webkit-gradient(linear, left top, left bottom, from(#dff0d8), to(#c8e5bc));
417
+  background-image:         linear-gradient(to bottom, #dff0d8 0%, #c8e5bc 100%);
418
+  filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffdff0d8', endColorstr='#ffc8e5bc', GradientType=0);
419
+  background-repeat: repeat-x;
420
+  border-color: #b2dba1;
421
+}
422
+.alert-info {
423
+  background-image: -webkit-linear-gradient(top, #d9edf7 0%, #b9def0 100%);
424
+  background-image:      -o-linear-gradient(top, #d9edf7 0%, #b9def0 100%);
425
+  background-image: -webkit-gradient(linear, left top, left bottom, from(#d9edf7), to(#b9def0));
426
+  background-image:         linear-gradient(to bottom, #d9edf7 0%, #b9def0 100%);
427
+  filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffd9edf7', endColorstr='#ffb9def0', GradientType=0);
428
+  background-repeat: repeat-x;
429
+  border-color: #9acfea;
430
+}
431
+.alert-warning {
432
+  background-image: -webkit-linear-gradient(top, #fcf8e3 0%, #f8efc0 100%);
433
+  background-image:      -o-linear-gradient(top, #fcf8e3 0%, #f8efc0 100%);
434
+  background-image: -webkit-gradient(linear, left top, left bottom, from(#fcf8e3), to(#f8efc0));
435
+  background-image:         linear-gradient(to bottom, #fcf8e3 0%, #f8efc0 100%);
436
+  filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#fffcf8e3', endColorstr='#fff8efc0', GradientType=0);
437
+  background-repeat: repeat-x;
438
+  border-color: #f5e79e;
439
+}
440
+.alert-danger {
441
+  background-image: -webkit-linear-gradient(top, #f2dede 0%, #e7c3c3 100%);
442
+  background-image:      -o-linear-gradient(top, #f2dede 0%, #e7c3c3 100%);
443
+  background-image: -webkit-gradient(linear, left top, left bottom, from(#f2dede), to(#e7c3c3));
444
+  background-image:         linear-gradient(to bottom, #f2dede 0%, #e7c3c3 100%);
445
+  filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#fff2dede', endColorstr='#ffe7c3c3', GradientType=0);
446
+  background-repeat: repeat-x;
447
+  border-color: #dca7a7;
448
+}
449
+.progress {
450
+  background-image: -webkit-linear-gradient(top, #ebebeb 0%, #f5f5f5 100%);
451
+  background-image:      -o-linear-gradient(top, #ebebeb 0%, #f5f5f5 100%);
452
+  background-image: -webkit-gradient(linear, left top, left bottom, from(#ebebeb), to(#f5f5f5));
453
+  background-image:         linear-gradient(to bottom, #ebebeb 0%, #f5f5f5 100%);
454
+  filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffebebeb', endColorstr='#fff5f5f5', GradientType=0);
455
+  background-repeat: repeat-x;
456
+}
457
+.progress-bar {
458
+  background-image: -webkit-linear-gradient(top, #337ab7 0%, #286090 100%);
459
+  background-image:      -o-linear-gradient(top, #337ab7 0%, #286090 100%);
460
+  background-image: -webkit-gradient(linear, left top, left bottom, from(#337ab7), to(#286090));
461
+  background-image:         linear-gradient(to bottom, #337ab7 0%, #286090 100%);
462
+  filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff337ab7', endColorstr='#ff286090', GradientType=0);
463
+  background-repeat: repeat-x;
464
+}
465
+.progress-bar-success {
466
+  background-image: -webkit-linear-gradient(top, #5cb85c 0%, #449d44 100%);
467
+  background-image:      -o-linear-gradient(top, #5cb85c 0%, #449d44 100%);
468
+  background-image: -webkit-gradient(linear, left top, left bottom, from(#5cb85c), to(#449d44));
469
+  background-image:         linear-gradient(to bottom, #5cb85c 0%, #449d44 100%);
470
+  filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff5cb85c', endColorstr='#ff449d44', GradientType=0);
471
+  background-repeat: repeat-x;
472
+}
473
+.progress-bar-info {
474
+  background-image: -webkit-linear-gradient(top, #5bc0de 0%, #31b0d5 100%);
475
+  background-image:      -o-linear-gradient(top, #5bc0de 0%, #31b0d5 100%);
476
+  background-image: -webkit-gradient(linear, left top, left bottom, from(#5bc0de), to(#31b0d5));
477
+  background-image:         linear-gradient(to bottom, #5bc0de 0%, #31b0d5 100%);
478
+  filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff5bc0de', endColorstr='#ff31b0d5', GradientType=0);
479
+  background-repeat: repeat-x;
480
+}
481
+.progress-bar-warning {
482
+  background-image: -webkit-linear-gradient(top, #f0ad4e 0%, #ec971f 100%);
483
+  background-image:      -o-linear-gradient(top, #f0ad4e 0%, #ec971f 100%);
484
+  background-image: -webkit-gradient(linear, left top, left bottom, from(#f0ad4e), to(#ec971f));
485
+  background-image:         linear-gradient(to bottom, #f0ad4e 0%, #ec971f 100%);
486
+  filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#fff0ad4e', endColorstr='#ffec971f', GradientType=0);
487
+  background-repeat: repeat-x;
488
+}
489
+.progress-bar-danger {
490
+  background-image: -webkit-linear-gradient(top, #d9534f 0%, #c9302c 100%);
491
+  background-image:      -o-linear-gradient(top, #d9534f 0%, #c9302c 100%);
492
+  background-image: -webkit-gradient(linear, left top, left bottom, from(#d9534f), to(#c9302c));
493
+  background-image:         linear-gradient(to bottom, #d9534f 0%, #c9302c 100%);
494
+  filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffd9534f', endColorstr='#ffc9302c', GradientType=0);
495
+  background-repeat: repeat-x;
496
+}
497
+.progress-bar-striped {
498
+  background-image: -webkit-linear-gradient(45deg, rgba(255, 255, 255, .15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, .15) 50%, rgba(255, 255, 255, .15) 75%, transparent 75%, transparent);
499
+  background-image:      -o-linear-gradient(45deg, rgba(255, 255, 255, .15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, .15) 50%, rgba(255, 255, 255, .15) 75%, transparent 75%, transparent);
500
+  background-image:         linear-gradient(45deg, rgba(255, 255, 255, .15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, .15) 50%, rgba(255, 255, 255, .15) 75%, transparent 75%, transparent);
501
+}
502
+.list-group {
503
+  border-radius: 4px;
504
+  -webkit-box-shadow: 0 1px 2px rgba(0, 0, 0, .075);
505
+          box-shadow: 0 1px 2px rgba(0, 0, 0, .075);
506
+}
507
+.list-group-item.active,
508
+.list-group-item.active:hover,
509
+.list-group-item.active:focus {
510
+  text-shadow: 0 -1px 0 #286090;
511
+  background-image: -webkit-linear-gradient(top, #337ab7 0%, #2b669a 100%);
512
+  background-image:      -o-linear-gradient(top, #337ab7 0%, #2b669a 100%);
513
+  background-image: -webkit-gradient(linear, left top, left bottom, from(#337ab7), to(#2b669a));
514
+  background-image:         linear-gradient(to bottom, #337ab7 0%, #2b669a 100%);
515
+  filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff337ab7', endColorstr='#ff2b669a', GradientType=0);
516
+  background-repeat: repeat-x;
517
+  border-color: #2b669a;
518
+}
519
+.list-group-item.active .badge,
520
+.list-group-item.active:hover .badge,
521
+.list-group-item.active:focus .badge {
522
+  text-shadow: none;
523
+}
524
+.panel {
525
+  -webkit-box-shadow: 0 1px 2px rgba(0, 0, 0, .05);
526
+          box-shadow: 0 1px 2px rgba(0, 0, 0, .05);
527
+}
528
+.panel-default > .panel-heading {
529
+  background-image: -webkit-linear-gradient(top, #f5f5f5 0%, #e8e8e8 100%);
530
+  background-image:      -o-linear-gradient(top, #f5f5f5 0%, #e8e8e8 100%);
531
+  background-image: -webkit-gradient(linear, left top, left bottom, from(#f5f5f5), to(#e8e8e8));
532
+  background-image:         linear-gradient(to bottom, #f5f5f5 0%, #e8e8e8 100%);
533
+  filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#fff5f5f5', endColorstr='#ffe8e8e8', GradientType=0);
534
+  background-repeat: repeat-x;
535
+}
536
+.panel-primary > .panel-heading {
537
+  background-image: -webkit-linear-gradient(top, #337ab7 0%, #2e6da4 100%);
538
+  background-image:      -o-linear-gradient(top, #337ab7 0%, #2e6da4 100%);
539
+  background-image: -webkit-gradient(linear, left top, left bottom, from(#337ab7), to(#2e6da4));
540
+  background-image:         linear-gradient(to bottom, #337ab7 0%, #2e6da4 100%);
541
+  filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff337ab7', endColorstr='#ff2e6da4', GradientType=0);
542
+  background-repeat: repeat-x;
543
+}
544
+.panel-success > .panel-heading {
545
+  background-image: -webkit-linear-gradient(top, #dff0d8 0%, #d0e9c6 100%);
546
+  background-image:      -o-linear-gradient(top, #dff0d8 0%, #d0e9c6 100%);
547
+  background-image: -webkit-gradient(linear, left top, left bottom, from(#dff0d8), to(#d0e9c6));
548
+  background-image:         linear-gradient(to bottom, #dff0d8 0%, #d0e9c6 100%);
549
+  filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffdff0d8', endColorstr='#ffd0e9c6', GradientType=0);
550
+  background-repeat: repeat-x;
551
+}
552
+.panel-info > .panel-heading {
553
+  background-image: -webkit-linear-gradient(top, #d9edf7 0%, #c4e3f3 100%);
554
+  background-image:      -o-linear-gradient(top, #d9edf7 0%, #c4e3f3 100%);
555
+  background-image: -webkit-gradient(linear, left top, left bottom, from(#d9edf7), to(#c4e3f3));
556
+  background-image:         linear-gradient(to bottom, #d9edf7 0%, #c4e3f3 100%);
557
+  filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffd9edf7', endColorstr='#ffc4e3f3', GradientType=0);
558
+  background-repeat: repeat-x;
559
+}
560
+.panel-warning > .panel-heading {
561
+  background-image: -webkit-linear-gradient(top, #fcf8e3 0%, #faf2cc 100%);
562
+  background-image:      -o-linear-gradient(top, #fcf8e3 0%, #faf2cc 100%);
563
+  background-image: -webkit-gradient(linear, left top, left bottom, from(#fcf8e3), to(#faf2cc));
564
+  background-image:         linear-gradient(to bottom, #fcf8e3 0%, #faf2cc 100%);
565
+  filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#fffcf8e3', endColorstr='#fffaf2cc', GradientType=0);
566
+  background-repeat: repeat-x;
567
+}
568
+.panel-danger > .panel-heading {
569
+  background-image: -webkit-linear-gradient(top, #f2dede 0%, #ebcccc 100%);
570
+  background-image:      -o-linear-gradient(top, #f2dede 0%, #ebcccc 100%);
571
+  background-image: -webkit-gradient(linear, left top, left bottom, from(#f2dede), to(#ebcccc));
572
+  background-image:         linear-gradient(to bottom, #f2dede 0%, #ebcccc 100%);
573
+  filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#fff2dede', endColorstr='#ffebcccc', GradientType=0);
574
+  background-repeat: repeat-x;
575
+}
576
+.well {
577
+  background-image: -webkit-linear-gradient(top, #e8e8e8 0%, #f5f5f5 100%);
578
+  background-image:      -o-linear-gradient(top, #e8e8e8 0%, #f5f5f5 100%);
579
+  background-image: -webkit-gradient(linear, left top, left bottom, from(#e8e8e8), to(#f5f5f5));
580
+  background-image:         linear-gradient(to bottom, #e8e8e8 0%, #f5f5f5 100%);
581
+  filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffe8e8e8', endColorstr='#fff5f5f5', GradientType=0);
582
+  background-repeat: repeat-x;
583
+  border-color: #dcdcdc;
584
+  -webkit-box-shadow: inset 0 1px 3px rgba(0, 0, 0, .05), 0 1px 0 rgba(255, 255, 255, .1);
585
+          box-shadow: inset 0 1px 3px rgba(0, 0, 0, .05), 0 1px 0 rgba(255, 255, 255, .1);
586
+}
587
+/*# sourceMappingURL=bootstrap-theme.css.map */

File diff suppressed because it is too large
+ 1 - 0
src/main/resources/public/bootstrap-3.3.7-dist/css/bootstrap-theme.css.map


File diff suppressed because it is too large
+ 6 - 0
src/main/resources/public/bootstrap-3.3.7-dist/css/bootstrap-theme.min.css


File diff suppressed because it is too large
+ 1 - 0
src/main/resources/public/bootstrap-3.3.7-dist/css/bootstrap-theme.min.css.map


File diff suppressed because it is too large
+ 6757 - 0
src/main/resources/public/bootstrap-3.3.7-dist/css/bootstrap.css


File diff suppressed because it is too large
+ 1 - 0
src/main/resources/public/bootstrap-3.3.7-dist/css/bootstrap.css.map


File diff suppressed because it is too large
+ 6 - 0
src/main/resources/public/bootstrap-3.3.7-dist/css/bootstrap.min.css


File diff suppressed because it is too large
+ 1 - 0
src/main/resources/public/bootstrap-3.3.7-dist/css/bootstrap.min.css.map


BIN
src/main/resources/public/bootstrap-3.3.7-dist/fonts/glyphicons-halflings-regular.eot


File diff suppressed because it is too large
+ 288 - 0
src/main/resources/public/bootstrap-3.3.7-dist/fonts/glyphicons-halflings-regular.svg


BIN
src/main/resources/public/bootstrap-3.3.7-dist/fonts/glyphicons-halflings-regular.ttf


BIN
src/main/resources/public/bootstrap-3.3.7-dist/fonts/glyphicons-halflings-regular.woff


BIN
src/main/resources/public/bootstrap-3.3.7-dist/fonts/glyphicons-halflings-regular.woff2


File diff suppressed because it is too large
+ 2377 - 0
src/main/resources/public/bootstrap-3.3.7-dist/js/bootstrap.js


File diff suppressed because it is too large
+ 7 - 0
src/main/resources/public/bootstrap-3.3.7-dist/js/bootstrap.min.js


File diff suppressed because it is too large
+ 5 - 0
src/main/resources/public/bootstrap-3.3.7-dist/js/jquery.min.js


+ 13 - 0
src/main/resources/public/bootstrap-3.3.7-dist/js/npm.js

@@ -0,0 +1,13 @@
1
+// This file is autogenerated via the `commonjs` Grunt task. You can require() this file in a CommonJS environment.
2
+require('../../js/transition.js')
3
+require('../../js/alert.js')
4
+require('../../js/button.js')
5
+require('../../js/carousel.js')
6
+require('../../js/collapse.js')
7
+require('../../js/dropdown.js')
8
+require('../../js/modal.js')
9
+require('../../js/tooltip.js')
10
+require('../../js/popover.js')
11
+require('../../js/scrollspy.js')
12
+require('../../js/tab.js')
13
+require('../../js/affix.js')

+ 33 - 0
src/main/resources/templates/approvale.html

@@ -0,0 +1,33 @@
1
+<html lang="zh-CN">
2
+<head>
3
+    <meta charset="utf-8">
4
+    <meta http-equiv="X-UA-Compatible" content="IE=edge">
5
+    <meta name="viewport" content="width=device-width, initial-scale=1">
6
+    <title>中联医院信息管理系统-登录授权</title>
7
+
8
+
9
+    <!-- HTML5 shim 和 Respond.js 是为了让 IE8 支持 HTML5 元素和媒体查询(media queries)功能 -->
10
+    <!-- 警告:通过 file:// 协议(就是直接将 html 页面拖拽到浏览器中)访问页面时 Respond.js 不起作用 -->
11
+    <!--[if lt IE 9]>
12
+    <!--<script src="https://cdn.jsdelivr.net/npm/html5shiv@3.7.3/dist/html5shiv.min.js"></script>-->
13
+    <!--<script src="https://cdn.jsdelivr.net/npm/respond.js@1.4.2/dest/respond.min.js"></script>-->
14
+    <!--<![endif]&ndash;&gt;-->
15
+</head>
16
+<body>
17
+    <div style="text-align: center;background-color: #eee; padding: 10px;" >
18
+        <h1 style="margin-top: 20px; margin-bottom: 10px;">中联医院管理系统授权确认</h1>
19
+        <p>是否同意应用“中联医院管理系统”访问您的基本信息!</p>
20
+        <form  action="/oauth/authorize" method="post">
21
+            <input name="user_oauth_approval" value="true" type="hidden">
22
+            <ul style="display: none;">
23
+                <li>
24
+                    <div class="form-group">scope.all: <input type="radio" name="scope.all" value="true" checked>Approve <input type="radio" name="scope.all" value="false">Deny</div>
25
+                </li>
26
+            </ul>
27
+            <label><input style="background-color: #337ab7; color: white;border: 1px solid #122b40; padding: 10px 16px; font-size: 18px; border-radius: 6px;" name="authorize" value="同意授权" type="submit"></label>
28
+        </form>
29
+
30
+    </div>
31
+
32
+</body>
33
+</html>

+ 44 - 45
src/main/resources/templates/login.html

@@ -1,52 +1,51 @@
1 1
 <!DOCTYPE html>
2
-<html lang="en" xmlns:th="http://www.thymeleaf.org">
2
+<html lang="zh-CN">
3 3
 <head>
4
-    <meta charset="UTF-8">
5
-    <title th:text="#{system.name}"></title>
6
-    <meta name="renderer" content="webkit|ie-comp|ie-stand">
7
-    <meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1">
8
-    <meta name="viewport" content="width=device-width,user-scalable=yes, minimum-scale=0.4, initial-scale=0.8,target-densitydpi=low-dpi" />
9
-    <meta http-equiv="Cache-Control" content="no-siteapp" />
10
-
11
-    <link rel="shortcut icon" href="/favicon.ico" type="image/x-icon" />
12
-    <link rel="stylesheet" href="./css/font.css">
13
-    <link rel="stylesheet" href="./css/xadmin.css">
14
-    <script type="text/javascript" src="https://cdn.bootcss.com/jquery/3.2.1/jquery.min.js"></script>
4
+    <meta charset="utf-8">
5
+    <meta http-equiv="X-UA-Compatible" content="IE=edge">
6
+    <meta name="viewport" content="width=device-width, initial-scale=1">
7
+    <title>中联医院管理系统--登录页面</title>
8
+
9
+    <!-- Bootstrap -->
10
+    <link href="bootstrap-3.3.7-dist/css/bootstrap.min.css" rel="stylesheet">
11
+
12
+    <!-- HTML5 shim 和 Respond.js 是为了让 IE8 支持 HTML5 元素和媒体查询(media queries)功能 -->
13
+    <!-- 警告:通过 file:// 协议(就是直接将 html 页面拖拽到浏览器中)访问页面时 Respond.js 不起作用 -->
14
+    <!--[if lt IE 9]>
15
+    <script src="https://cdn.jsdelivr.net/npm/html5shiv@3.7.3/dist/html5shiv.min.js"></script>
16
+    <script src="https://cdn.jsdelivr.net/npm/respond.js@1.4.2/dest/respond.min.js"></script>
17
+    <![endif]-->
15 18
 </head>
16
-<body class="login-bg">
17
-
18
-<div class="login layui-anim layui-anim-up">
19
-
20
-
21
-    <form method="post" action="/dologin"  class="layui-form" >
22
-        <input name="username" placeholder="用户名"  type="text" lay-verify="required" class="layui-input" >
23
-        <hr class="hr15">
24
-        <input name="password" lay-verify="required" placeholder="密码"  type="password" class="layui-input">
25
-        <hr class="hr15">
26
-        <select name="server" class="layui-select" lay-ignore style="display: none">
27
-            <option value="test2">test2</option>
28
-            <option value="184test">184test</option>
29
-            <option value="zlhis">ZLHIS</option>
30
-        </select>
31
-        <hr class="hr15" />
32
-        <input value="登录" lay-submit lay-filter="login" style="width:100%;" type="submit">
33
-        <hr class="hr20" >
34
-    </form>
19
+<body>
20
+<div class="row" style="margin-top: 10px;">
21
+    <div class="col-xs-4 col-xs-offset-4" style="padding: 20px; border: 1px solid #ddd">
22
+        <h2>中联医院信息管理系统登录</h2>
23
+        <div class="alert alert-danger" role="alert" th:text="${error}" th:if="${error}"></div>
24
+        <form class="form-horizontal" method="post" action="" id="login-form">
25
+            <div class="form-group col-xs-11">
26
+                <label for="exampleInputEmail1">用户名</label>
27
+                <input type="text" class="form-control" name="username" id="username" placeholder="用户名">
28
+            </div>
29
+            <div class="form-group col-xs-11">
30
+                <label for="exampleInputPassword1">密码</label>
31
+                <input type="password" class="form-control" id="password" name="password" placeholder="密码">
32
+            </div>
33
+
34
+            <div class="col-xs-11">
35
+                <button type="submit" class="btn btn-primary">登&nbsp;&nbsp;录</button>
36
+            </div>
37
+
38
+        </form>
39
+    </div>
35 40
 </div>
36 41
 
37
-<script>
38
-    $(function  () {
39
-        $('form').on('submit',function(){
40
-            $.post('dologin',{'username':'a',password:'b'},function(res){
41
-                document.location.href = "/";
42
-            });
43
-            return false;
44
-        });
45
-
46
-    }) ;
47
-
48
-</script>
49
-
50 42
 
43
+<!-- jQuery (Bootstrap 的所有 JavaScript 插件都依赖 jQuery,所以必须放在前边) -->
44
+<script src="bootstrap-3.3.7-dist/js/jquery.min.js"></script>
45
+<!-- 加载 Bootstrap 的所有 JavaScript 插件。你也可以根据需要只加载单个插件。 -->
46
+<script src="bootstrap-3.3.7-dist/js/bootstrap.min.js"></script>
51 47
 </body>
52
-</html>
48
+</html>
49
+<script type="text/javascript">
50
+
51
+</script>