From 4175effadd1b6a3fd1ace789c043cc4340c5b230 Mon Sep 17 00:00:00 2001 From: Joe Grandja Date: Wed, 3 May 2023 06:30:43 -0400 Subject: [PATCH] Update web ui design for demo-authorizationserver Issue gh-1196 --- .../samples-demo-authorizationserver.gradle | 4 +- .../sample/web/DefaultErrorController.java | 18 ++--- .../java/sample/web/DeviceController.java | 6 +- .../resources/static/assets/css/signin.css | 32 +++++++++ .../resources/static/assets/css/style.css | 13 ---- .../resources/static/assets/img/devices.png | Bin 0 -> 19071 bytes .../resources/static/assets/img/github.png | Bin 0 -> 7249 bytes .../resources/static/assets/img/google.png | Bin 0 -> 27629 bytes .../resources/templates/access-denied.html | 20 ------ .../main/resources/templates/activate.html | 33 ---------- .../main/resources/templates/activated.html | 25 ------- .../src/main/resources/templates/consent.html | 62 ++++++++++-------- .../resources/templates/device-activate.html | 33 ++++++++++ .../resources/templates/device-activated.html | 25 +++++++ .../src/main/resources/templates/error.html | 31 +++++---- .../src/main/resources/templates/login.html | 55 ++++++++-------- 16 files changed, 183 insertions(+), 174 deletions(-) create mode 100644 samples/demo-authorizationserver/src/main/resources/static/assets/css/signin.css delete mode 100644 samples/demo-authorizationserver/src/main/resources/static/assets/css/style.css create mode 100644 samples/demo-authorizationserver/src/main/resources/static/assets/img/devices.png create mode 100644 samples/demo-authorizationserver/src/main/resources/static/assets/img/github.png create mode 100644 samples/demo-authorizationserver/src/main/resources/static/assets/img/google.png delete mode 100644 samples/demo-authorizationserver/src/main/resources/templates/access-denied.html delete mode 100644 samples/demo-authorizationserver/src/main/resources/templates/activate.html delete mode 100644 samples/demo-authorizationserver/src/main/resources/templates/activated.html create mode 100644 samples/demo-authorizationserver/src/main/resources/templates/device-activate.html create mode 100644 samples/demo-authorizationserver/src/main/resources/templates/device-activated.html diff --git a/samples/demo-authorizationserver/samples-demo-authorizationserver.gradle b/samples/demo-authorizationserver/samples-demo-authorizationserver.gradle index f761b82e..d8f5beb1 100644 --- a/samples/demo-authorizationserver/samples-demo-authorizationserver.gradle +++ b/samples/demo-authorizationserver/samples-demo-authorizationserver.gradle @@ -21,8 +21,8 @@ dependencies { implementation "org.springframework.boot:spring-boot-starter-jdbc" implementation project(":spring-security-oauth2-authorization-server") implementation "org.webjars:webjars-locator-core" - implementation "org.webjars:bootstrap:3.4.1" - implementation "org.webjars:jquery:3.4.1" + implementation "org.webjars:bootstrap:5.2.3" + implementation "org.webjars:jquery:3.6.4" runtimeOnly "com.h2database:h2" testImplementation "org.springframework.boot:spring-boot-starter-test" diff --git a/samples/demo-authorizationserver/src/main/java/sample/web/DefaultErrorController.java b/samples/demo-authorizationserver/src/main/java/sample/web/DefaultErrorController.java index f4e55c6e..f0fc8a26 100644 --- a/samples/demo-authorizationserver/src/main/java/sample/web/DefaultErrorController.java +++ b/samples/demo-authorizationserver/src/main/java/sample/web/DefaultErrorController.java @@ -15,15 +15,13 @@ */ package sample.web; -import java.util.Map; - import jakarta.servlet.RequestDispatcher; import jakarta.servlet.http.HttpServletRequest; import org.springframework.boot.web.servlet.error.ErrorController; import org.springframework.stereotype.Controller; +import org.springframework.ui.Model; import org.springframework.web.bind.annotation.RequestMapping; -import org.springframework.web.servlet.ModelAndView; /** * @author Steve Riesenberg @@ -33,12 +31,16 @@ import org.springframework.web.servlet.ModelAndView; public class DefaultErrorController implements ErrorController { @RequestMapping("/error") - public ModelAndView handleError(HttpServletRequest request) { - String message = getErrorMessage(request); - if (message.startsWith("[access_denied]")) { - return new ModelAndView("access-denied"); + public String handleError(Model model, HttpServletRequest request) { + String errorMessage = getErrorMessage(request); + if (errorMessage.startsWith("[access_denied]")) { + model.addAttribute("errorTitle", "Access Denied"); + model.addAttribute("errorMessage", "You have denied access."); + } else { + model.addAttribute("errorTitle", "Error"); + model.addAttribute("errorMessage", errorMessage); } - return new ModelAndView("error", Map.of("message", message)); + return "error"; } private String getErrorMessage(HttpServletRequest request) { diff --git a/samples/demo-authorizationserver/src/main/java/sample/web/DeviceController.java b/samples/demo-authorizationserver/src/main/java/sample/web/DeviceController.java index fae0429e..b9cc9ee8 100644 --- a/samples/demo-authorizationserver/src/main/java/sample/web/DeviceController.java +++ b/samples/demo-authorizationserver/src/main/java/sample/web/DeviceController.java @@ -31,17 +31,17 @@ public class DeviceController { if (userCode != null) { return "redirect:/oauth2/device_verification?user_code=" + userCode; } - return "activate"; + return "device-activate"; } @GetMapping("/activated") public String activated() { - return "activated"; + return "device-activated"; } @GetMapping(value = "/", params = "success") public String success() { - return "activated"; + return "device-activated"; } } diff --git a/samples/demo-authorizationserver/src/main/resources/static/assets/css/signin.css b/samples/demo-authorizationserver/src/main/resources/static/assets/css/signin.css new file mode 100644 index 00000000..2ee098f2 --- /dev/null +++ b/samples/demo-authorizationserver/src/main/resources/static/assets/css/signin.css @@ -0,0 +1,32 @@ +html, +body { + height: 100%; +} + +body { + display: flex; + align-items: start; + padding-top: 100px; + background-color: #f5f5f5; +} + +.form-signin { + max-width: 330px; + padding: 15px; +} + +.form-signin .form-floating:focus-within { + z-index: 2; +} + +.form-signin input[type="username"] { + margin-bottom: -1px; + border-bottom-right-radius: 0; + border-bottom-left-radius: 0; +} + +.form-signin input[type="password"] { + margin-bottom: 10px; + border-top-left-radius: 0; + border-top-right-radius: 0; +} diff --git a/samples/demo-authorizationserver/src/main/resources/static/assets/css/style.css b/samples/demo-authorizationserver/src/main/resources/static/assets/css/style.css deleted file mode 100644 index d50ee00e..00000000 --- a/samples/demo-authorizationserver/src/main/resources/static/assets/css/style.css +++ /dev/null @@ -1,13 +0,0 @@ -html, body, .container, .jumbotron { - height: 100%; -} -.jumbotron { - margin-bottom: 0; -} -.gap { - margin-top: 70px; -} -.code { - font-size: 2em; - letter-spacing: 2rem; -} \ No newline at end of file diff --git a/samples/demo-authorizationserver/src/main/resources/static/assets/img/devices.png b/samples/demo-authorizationserver/src/main/resources/static/assets/img/devices.png new file mode 100644 index 0000000000000000000000000000000000000000..fda6b12e312ff705176efdb8db7f8400ba9fb1d6 GIT binary patch literal 19071 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 a1q~^)FZa(e1RnpylG+{3+ht0YA^!_vu?F@4 literal 0 HcmV?d00001 diff --git a/samples/demo-authorizationserver/src/main/resources/static/assets/img/github.png b/samples/demo-authorizationserver/src/main/resources/static/assets/img/github.png new file mode 100644 index 0000000000000000000000000000000000000000..e28a8373067419c7fec89fc78ca44c0197e77ace GIT binary patch literal 7249 zcmcK9^;Z+#`v7o688AXoYNQAoqf5HMfg81r(IKO2fP^3*4U>`@Aw61B=};sDWVDnZ zD)=U(r%0oI@%uk~UgzF>&U1fzo_p?d?m0IeX{gHpTo z8YGA|m%(qOJ_h#p@83Uv{`~&^`{Lr_{QUgv(&;}ZCnv|p$45s;hlhv1e*HQ)IQaSV z=Z_yh$d~r__xJwU-QC^U+1cLS-rCyQ+}!;B{rkqo#`>kTwYAmN)&Kta_U+rs%F6Qc z^4G6lzkK=f`Sa(cOP@Y{T3lRQSXlV@&;0!S+}zyk?Ci|U%=Gm1hf7maQ%}tjY8yjD}diC<<%Z7%A`uh61y1Lrh+M0i= ztE*pJs;a80tgNi4s3FMcdX=$mcsVONb&z?O?PEJlrN=i&jOh`zGkB@))^eG;X zkBf_ojg5_oiHVMmj*5zkjEszkhzt*p2oDbr3k!Slrr@8{>|>+AdQ;X@xEA8&7OFE1|~4(I8K^YHL=clU5}b9Zxdb9Hrf zadB~Wc6M@da&&ZbaB#4gwp|z+kX@_wH$H-_z34*3{I}(9l#@*HBYaS5;M0QBhSP?VQf zkdu>_m6f}DS5`*muC%m_l$5lTl$4~Tq=bZ|xVVIvn7F8@n23m|u&{`bkT4V~Bq#`l zKm;KW2p9|z5CHS@3*5QG&&PM?_H901-rGDpyxiP8TwL6ooLrZKgM$+U;$UY7v9YnU zva+$TTu4!@^~3A(b|OPim3_=lQ2@qFwf3`|nW1P|AVqJ)Gq>#X%irfoI# zH6~0f!gXy>tz+AVxEB~Nt*lg$awq9;kOdt!*{t3ikn^}=(fr>`oxfQizwyW26MkV6 z2cciRq2&ZLLg;_I@X}&%{;&p3{=)O2JU!D&@5PSe<+O_^WINe)kNCT*d+a3W^tIc6 zI-jT8w3|5K$S~8r3(mbTukqY{AUl!#`(GL2lGv-msubX6ezHS@2=yA;#5+tZ@0s%1p9k9-9foiCcmW`Z z?ICNLwL2S(f1@6@?sjBdfy!6O`g13zp86X@`wOIfoO0GrwupDQW9BbC2fF7S(JD+&?+ zGIlOT;z?SH72AN$FMG-v#as_JIfDDzREu}a{u%@i>WUF}Oinu-ex;IY7m-J_7ea|V z8S>IBBnVqWIW=yZ(g|N3etjyBbq0SkP>)qrWS=MiMY-vHciXno9ENk{>ZZ^oOI!z+ z{jfaiX?=venI6YmE)gSW64SV|)AB2Mw~i>fRiw>J`wS7&SWMzN8`TXU+CQ>@JlR+t zL%xCsi{4kywPg|p9I96s;c!$eE#lOhR0xyZyr(GxWxWsTz}+jbb_VR;@zMe9<^;;Hb*FlwBJTIowin zz(%CesKo<~;}L6xy}~^+>mb_>~=9k1Crk@e85@>`oUd)ISvRU(kRYXX@+?e&1QBro*b+?aVI z%yN>m5aV@AteqEJCFOY4=3CFm7%EDpKgs5iSkRP!NVpO|?X z#ePSYX>Bjugu63CXQb!@vtR&Q9XsX3i}nmtdYDjp@DojkUCsaw1S-#TwSb}F`8_?3 zV*mNt;ssx!ZCwq&Uobb#PR%Qxav#i11n>7~bMTbP&N6kxe0nrZ6Z@YLj9IN% zwqS)@#BI#^Uin3p%HY>7h8vkv&Ca@tL9lSkU&1ArbB4i%3J<1o57((C@>7!fWQjVT zyP2mQrte(-$?IRc;RZolE7bd(p&LbK$8T`U#UXJjzdn8p@9rk6gSvq1nfcV|OmzvG zmd2AezDQ=7%4+^f$FDW|hfHt0`PE~vJE6``D`>X1r031`>(|b#a z;?0tgEoi0!D2i}fI^TqKorVzENc?jAuCsH}K5y%rJ>~2JNHrJbr5?85XK!EeHGCU< z@-}=~qR#u7c>vL=e%_ts(9kEYuxB3uPYIkTlsc*E#V zzcc3!W2iDKQ@fl$7XqwIwtj^MKi!syp`xW~-f?QTE*G_&2WDCOigTe_w1J`vh9f}E zp3j9P5xHdib+^wd?Uu>bmS(9G;W_Xtb<55Y#yyND@1~hwa*3O^MNoFf7}1x<)GXUh zL$Oq$-xv|*bo1^vN@4<+Z@qz*$Sk=7VEWNU)_P1uz2)PK=yzXNZkeG61AHo95TrnA zQ(4k#aU!!KWl7m9x3W?1XMIZH%+fq+Q*l~Z{jr7pn$8LQas-l3V4k zY3E<~M4-P!8vQCEOfLB3g$Owdg?^Jucz!J#{t+Ryy?m=53OQzO*E1t6TrFbPQ`BA& z9}yDFxlF)7@p-&Y#(~fa$OV>#>Nk_u&p<>c{hybKQKo$`VQymC6>@AN7U52F%zh7L z)W?>Ko-uFN1;E}=KlrYVqDHTa`t#~O;j(o=j z)QeXBRoYy+a&-*4`>?&=7hy%m+n(}4`l?TKCl*0x8hI>M+-A7m>?QZ@&ydmuQuM6WjF>2NO59H_#SmuOP-RPS@XzH)%8W3wiVLc>v*DdP)e8w zIdj4v^H%ooo*93^&g|04fAwuXO zA&DR6vLlP=i<>3vUK0A5O@o*&)>MIX^AR13=*0~3^V|jIx$En}QGMOwSKoGI_Eq#- z7a>2IkPCX;Ns9~)Cba0eJTj3kiV(n~AHeUlHW$U4Tv;1pSIs80O?!fF(Plnm)IS8n zc5AMM2j`R=0qiPBdK+H3s^-~!tvFQDP;$mHF zVLbC)n(pk-RNpUAk4=pY+aWWaq*K;)MGeIw4I#2Qrgj*|m+zF|^s3Ap- z%_+M*aBW2Mx2y0PCfZ`WB0m5*#88sYDyc_JdJYI!Dkn^HI)m;jY7?K;=qUEvWeo{c z%FGxwLY-AcrIUR>6o)k?*su4B@*?#mnYIL{q3eD*PBH^KF~UC;1}-R?xQIEkNEiUE zuRseCGE!{NWa%jM9gl!-p~lUt?y#W^jdRLa)>MEdWjt%vR2lxn{9Yu?keHu`P5&gc z;aqixmM@`$8uB>RS4p$LC&yl=SHK84E{hc0Da~QCOQ$9HQO(eXK%Ig5(iy&%+6Ad_ zDeqo^eUu?x)vZ?asC14ac+HwJKnpSuN}mymP|VgYc$sKF*DJsYtyG<%wO~GA&~ME2 zt&dgW%d>yfClCU?OpjI<>MWt3ZlL(N*ib=73Xe_iCrs0A#YhgU_6c+l{6sKm7}78v z{tP|-1_`S+HoT&Lvn(HlgmEAZZ$M~`|D`4d6{OF&CbVHvb;r!ukWW8dSJ7LOWz$gc zvE(ox$pT=qYDDm(fh_1Mf{-wtlKdxzs4Kqxt)S`N$*sumhW7dBe!5hp`d`Sw>ho zyAoZf7(a!2aQ+9L$oNHL>%bFaOFvj2VVHDC#qD3n1=D^)IPTHA z@!#aYecprUC4rn5ylV_`6L+D-?O~GBiiE&r%*n_(A&`+i6ZW{F$IPqvwP?;(0Ey0q zh8O->=dqt%wfZ!mNU&GEu$;jQ|6*&3k$;7=PPMJ{z z_3+x3a6|g7Kf5KqBFENa7m3QFCSv!j{PEYzxXZY;Ot3E}+!FgY`VL6-rDAH)!#Yzu z4>Ixd2BoSxy^dq98K?2&R$bQ&XGu#4PMWE3E?aImX2G_^h9?H!B2sK%8?{hhV$*kZ z*+T64l=v>Tb=7kbJVVVh`|b8_dI5d^SP3rb%?g~2w+!dp>#yooWXBtX%=28Vq}DeR z#~;yNkK9;F)jeM&ME`L9U^qd&EEWiGD+Nh@J#3!!a9ZJupZH)p-x~@KajW^IL{6&K zbFHZrXzv+mp6`A{e(LthhIG*$MM*Z}6Ri*#%j_rd@{`XfzT2_SJjOjL0T~>HDCZ&cT^Kl+!24ZE# zeH%S6(@Di4TO6gC>!D8SxCNv9X75v6=vu?PT+KW=;g6B{Fg7X6nloZ0J-C)w+SzY# zGf?sl(TrpHFWC03qnJa}Y8-}r6E*)%8>s1nP=fQ zDyH|MyD&E}2*&m)6w6^j0{M|pWh8{GBRvOyy>Dk=6!*ySbq@Aofzr zzila!;)8v-Eh>vne?sw2Rp{Urc}aa<^8(x)nb zv?!(``s>n!LN490+ZfGGU1GXG3hi|In6a04F3pfhxBI&b&p`{1_DP_QogV|CYJ|@+ zvnzP1j;*4Pukyj~o>2qr;8$QfN?FHVj{`B|LkGV0SNS+zjm<3X38jmzqU%MY>fM1% zpYqwHcike$lC4cb#_zS)50Af0)&j2;_+pQ#1;x+Sp~;OLdoz(tLR_pGaN)X=my@^~ zGnJ`;PJnnzR+>dH1c6@RPXHd`t2lvf`7J&*hDnpXcr-E!QDpq#HqAD7g_}}e%LmYl zzjC^?)!ya#@i*j?;!Y{|X49BNLT`W-o z6HK;m*C}TK@(5#PLcodG5d-JDa%Q@(yeb16uz7i|3Bx{J934r6oe5AwJJ~u?J@7o# zP-b;5VmsL$!zxgsU_j?K}aapFoil(+P&RoZEO2Kk6$<(W*L+Kl~1 zm?#4qV{5G3qP)m4Y;nP91c#AK8NwuucCNR_us-y@Gce;C5Fmx_8hDg-)W71*jjm0{?27v-at^Z%7I&UY6lM_Pi0ht{BfjV?$gJ$tG!> zo>>IT;gFV1c|PW#!VuRcP>aQAu@#%sPP0cl`ShqJmCDkRa|ValGhtBMzH2((%v_TR zKm2N?R9u)#{lExG(NWic=&NWtkUam2>hNX~2|+0HlPjH}Ff<Tz&|Obq zK|8y`sd-dceie1Cc9v~rcfm;F^Az$Z<9vo;?Ii@W-?( zhkldNsh3}JP~tvhzqmtYNSUV^c{CY&ujl!z(w<=umk}6=dd~ih#?JdDCck?nD zU$A29_J#5Bvvgk(mnwKB*I8$PoHkoOGX=luJY!NKi&1B zk%Ve@3{n^5G4(}LS@TbmGOxwbJmF~{c_OXGzK~0-6qq*d| z!E;athy~le;NR1&Lw=QbUCP(Wve&a=Dhw|k)zG5Y_da&eBw~1d@{#Uh&&J}03{d&} znqB?8TieAE`Hdk}(x3~sU9G%pQ`9r$cP2-S+8e$r&cPW+z@rGtN%{BRci3&YA-Q^1 zROcGp^EIg`pm=u+FzJAG7xR&>`hD^cdrRM6mC%Pb5yq{v5B~h1;rhvl^WOnf6$Pk} z%vbA!kJi-*+OMi@K7^0vaYhSN_VXRM7F}!;!&bJe2Zi%H&XQmC0}kK($n{XN4*AUM z{pLJv!=+&-wr&U|3LlK;xYc|N|edr>1!?)_IYauLeG)DVNsX=3|_V01U zPp&D?eco#=I&3Q<2dWAUtwy7?S*KVxXNd_W4~2Hg99)e#kIXHZs;>z(xkW4byhktE znMz~gDJPI$IDOtrlR_XA0n%5Wp%(Le-uohy=Xk4`abd+T+m=%^nUAzNtI)H<#kFlK zsV0O>6tyrV%Q|XCMZr-PHdaHyk`^P_&-_cAt1&LB&w&z|wsrZ=rCUxlf(mxgVVJin zjYsb&tQsf48?Lit&V(aLHx*X>5U0Arm}bB#YEW81pg{WPnf5^O<~;K&O2*;hrww^p z17%AB2y-fYD2z6Pq&ZOS$69B_fcGp5uqYskDmXBSowGBZ=4Of2GCGafoHlgj?>vMczTVqO^TMv6FAzH5J#QjzJy#KKIr5kN;314LcpB_%pBL zxtz*a+v0pJYhX#EQVOf={0CtoRY9&DscG+{wSTh5$BGfZl@D0)Ww{G-HD;6p-+ZPN zF8naaixryd3gS))4+8bE@S zrNNj3tsK>IY7Zpqw)Y|!>HNa?SckQSj%zx0U@>Sy2np!)*Wn3wxx;lg?QMqofi%?E zgzKf~y9dwHDX77QD-AJf?JYM6Q|^rLjfqFcvHfRz>l59f%lc3@*Nc;HyZC5)ckUM% ws%LtevJU+#cH_^$4&%}P`(K3e(VyX^UVZ=>Dka3_S0M!)W_Yh&%P#8w0Ew`p^Z)<= literal 0 HcmV?d00001 diff --git a/samples/demo-authorizationserver/src/main/resources/static/assets/img/google.png b/samples/demo-authorizationserver/src/main/resources/static/assets/img/google.png new file mode 100644 index 0000000000000000000000000000000000000000..795dea3190ff1bf6bb0a6a178d8fbefefdcf756f GIT binary patch literal 27629 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 literal 0 HcmV?d00001 diff --git a/samples/demo-authorizationserver/src/main/resources/templates/access-denied.html b/samples/demo-authorizationserver/src/main/resources/templates/access-denied.html deleted file mode 100644 index c358bc7b..00000000 --- a/samples/demo-authorizationserver/src/main/resources/templates/access-denied.html +++ /dev/null @@ -1,20 +0,0 @@ - - - - - - Spring Security Example - - - - -
-
-
-

Access Denied

-

You have denied access.

-
-
-
- - diff --git a/samples/demo-authorizationserver/src/main/resources/templates/activate.html b/samples/demo-authorizationserver/src/main/resources/templates/activate.html deleted file mode 100644 index 4607e0de..00000000 --- a/samples/demo-authorizationserver/src/main/resources/templates/activate.html +++ /dev/null @@ -1,33 +0,0 @@ - - - - - - Device Grant Example - - - - -
-
-
-
-
-

Device Activation

-

Enter the activation code to authorize the device.

-

Activation Code

-
- - -
- -
-
-
- Devices -
-
-
-
- - diff --git a/samples/demo-authorizationserver/src/main/resources/templates/activated.html b/samples/demo-authorizationserver/src/main/resources/templates/activated.html deleted file mode 100644 index 02598da2..00000000 --- a/samples/demo-authorizationserver/src/main/resources/templates/activated.html +++ /dev/null @@ -1,25 +0,0 @@ - - - - - - Device Grant Example - - - - -
-
-
-
-

Success!

-

You have successfully activated your device. Please return to your device to continue.

-
-
- Devices -
-
-
-
- - \ No newline at end of file diff --git a/samples/demo-authorizationserver/src/main/resources/templates/consent.html b/samples/demo-authorizationserver/src/main/resources/templates/consent.html index 5c32c534..5a4a5f6e 100644 --- a/samples/demo-authorizationserver/src/main/resources/templates/consent.html +++ b/samples/demo-authorizationserver/src/main/resources/templates/consent.html @@ -1,44 +1,48 @@ - + - - - + + Custom consent page - Consent required - + +
-
+

App permissions

The application - + wants to access your account - +

-

You have provided the code - . +

+ You have provided the code + . Verify that this code matches what is shown on your device.

-

The following permissions are requested by the above app.
Please review - these and consent if you approve.

+
+

+ The following permissions are requested by the above app.
+ Please review these and consent if you approve. +

+
@@ -47,33 +51,37 @@ -
+
- +

-

You have already granted the following permissions to the above app:

-
+

+ You have already granted the following permissions to the above app: +

+
- +

-
+
-
+
@@ -85,8 +93,8 @@

- Your consent to provide access is required. -
If you do not approve, click Cancel, in which case no information will be shared with the app. + Your consent to provide access is required.
+ If you do not approve, click Cancel, in which case no information will be shared with the app.

diff --git a/samples/demo-authorizationserver/src/main/resources/templates/device-activate.html b/samples/demo-authorizationserver/src/main/resources/templates/device-activate.html new file mode 100644 index 00000000..bea73929 --- /dev/null +++ b/samples/demo-authorizationserver/src/main/resources/templates/device-activate.html @@ -0,0 +1,33 @@ + + + + + + Spring Authorization Server sample + + + +
+
+
+

Device Activation

+

Enter the activation code to authorize the device.

+
+
+
+ + +
+
+ +
+
+
+
+
+ Devices +
+
+
+ + diff --git a/samples/demo-authorizationserver/src/main/resources/templates/device-activated.html b/samples/demo-authorizationserver/src/main/resources/templates/device-activated.html new file mode 100644 index 00000000..ef180ba2 --- /dev/null +++ b/samples/demo-authorizationserver/src/main/resources/templates/device-activated.html @@ -0,0 +1,25 @@ + + + + + + Spring Authorization Server sample + + + +
+
+
+

Success!

+

+ You have successfully activated your device.
+ Please return to your device to continue. +

+
+
+ Devices +
+
+
+ + diff --git a/samples/demo-authorizationserver/src/main/resources/templates/error.html b/samples/demo-authorizationserver/src/main/resources/templates/error.html index 7bf6baae..eceb5ce0 100644 --- a/samples/demo-authorizationserver/src/main/resources/templates/error.html +++ b/samples/demo-authorizationserver/src/main/resources/templates/error.html @@ -1,20 +1,19 @@ - - - - Spring Security Example - - - - -
-
-
-

Error

-

-
-
+ + + + Spring Authorization Server sample + + + +
+
+
+

+

- +
+
+ diff --git a/samples/demo-authorizationserver/src/main/resources/templates/login.html b/samples/demo-authorizationserver/src/main/resources/templates/login.html index 7c8323f5..353315ab 100644 --- a/samples/demo-authorizationserver/src/main/resources/templates/login.html +++ b/samples/demo-authorizationserver/src/main/resources/templates/login.html @@ -1,41 +1,42 @@ - + - - - Spring Security Example - - + + + Spring Authorization Server sample + +
-
- \ No newline at end of file +