WebUI Cleanup, icons, Profile Wireframing (#910)
* account person extend was showing failure when succeeding * first run on a user profile page, did some other CSS tweaks to the UI * UI neatening, profile wireframing, robotstxt, PWA manifest * adding domain_display_name to webmanifest
219
artwork/logo-login.svg
Normal file
|
@ -0,0 +1,219 @@
|
|||
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
||||
<!-- Created with Inkscape (http://www.inkscape.org/) -->
|
||||
|
||||
<svg
|
||||
width="520"
|
||||
height="330"
|
||||
viewBox="0 0 137.58334 87.3125"
|
||||
version="1.1"
|
||||
id="svg1084"
|
||||
inkscape:version="1.2 (dc2aeda, 2022-05-15)"
|
||||
sodipodi:docname="logo-login.svg"
|
||||
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
|
||||
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
|
||||
xmlns="http://www.w3.org/2000/svg"
|
||||
xmlns:svg="http://www.w3.org/2000/svg">
|
||||
<sodipodi:namedview
|
||||
id="namedview1086"
|
||||
pagecolor="#ffffff"
|
||||
bordercolor="#000000"
|
||||
borderopacity="0.25"
|
||||
inkscape:showpageshadow="2"
|
||||
inkscape:pageopacity="0"
|
||||
inkscape:pagecheckerboard="true"
|
||||
inkscape:deskcolor="#d1d1d1"
|
||||
inkscape:document-units="mm"
|
||||
showgrid="false"
|
||||
inkscape:zoom="1.0318481"
|
||||
inkscape:cx="188.98131"
|
||||
inkscape:cy="109.02768"
|
||||
inkscape:window-width="1389"
|
||||
inkscape:window-height="819"
|
||||
inkscape:window-x="51"
|
||||
inkscape:window-y="25"
|
||||
inkscape:window-maximized="0"
|
||||
inkscape:current-layer="layer1" />
|
||||
<defs
|
||||
id="defs1081" />
|
||||
<g
|
||||
inkscape:label="Kanidm Login Logo"
|
||||
inkscape:groupmode="layer"
|
||||
id="layer1"
|
||||
transform="translate(-44.452119,-54.465481)">
|
||||
<path
|
||||
id="path5404"
|
||||
d="m 62.537712,110.23377 c -3.36297,8.12708 5.78522,15.61876 5.82446,15.73981 -1.67096,-4.90156 -3.43697,-8.85836 -0.189,-12.28424"
|
||||
style="display:inline;fill:#803300;stroke:#000000;stroke-width:1;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
|
||||
inkscape:label="kani-rear-claw-left"
|
||||
inkscape:export-filename="../1d28c49c/party-kani.png"
|
||||
inkscape:export-xdpi="160.64"
|
||||
inkscape:export-ydpi="160.64" />
|
||||
<path
|
||||
style="display:inline;fill:#803300;stroke:#000000;stroke-width:1;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
|
||||
d="m 138.4423,109.69923 c 3.36297,8.12708 -5.78522,15.61876 -5.82446,15.7398 1.67096,-4.90155 3.43697,-8.85835 0.189,-12.28423"
|
||||
id="path5408"
|
||||
inkscape:label="kani-rear-claw-right" />
|
||||
<path
|
||||
id="path4529"
|
||||
d="m 100.24698,67.21217 c -1.308628,-0.01556 -2.560878,2.352773 -4.890668,6.986654 -7.05187,-7.755768 -7.41258,-7.849666 -9.84229,2.649966 -0.11364,0.04758 -0.22709,0.0959 -0.34055,0.144695 -8.88231,-5.324406 -9.34124,-5.366051 -8.66717,5.041551 -0.21569,0.159933 -0.43121,0.322088 -0.64596,0.486794 -9.102,-3.605578 -9.49555,-3.378386 -7.19232,6.611477 -0.10784,0.11671 -0.21599,0.23284 -0.3235,0.35089 -9.27685,-2.506375 -9.53641,-2.129764 -6.07663,7.65845 -0.14847,0.21295 -0.29578,0.42957 -0.44338,0.64544 -10.45618,-1.11775 -10.67098,-0.91353 -5.35523,8.828413 -0.026,0.0482 -0.0526,0.0943 -0.0786,0.14263 -4.28381,2.04782 -5.70197,4.54381 -7.73183,7.89409 -0.15756,6.64457 6.9544,12.37105 17.18035,18.87895 -3.51325,-6.5113 -9.00735,-9.81207 -10.0614,-17.88832 1.54367,-2.90538 4.16877,-3.90901 6.42286,-5.21622 24.61995,14.36815 50.615808,14.53471 76.550928,-0.55035 2.26015,1.31503 4.90084,2.31509 6.45076,5.23224 -1.05405,8.07624 -6.54866,11.3765 -10.06191,17.8878 10.22594,-6.5079 17.33842,-12.23387 17.18086,-18.87844 -1.97354,-3.25733 -3.37677,-5.706 -7.38973,-7.72149 5.01291,-9.218263 4.53571,-9.305023 -5.98567,-8.177293 -0.0891,-0.1152 -0.17795,-0.23186 -0.26717,-0.34623 3.63467,-10.261532 3.40665,-10.529692 -6.39186,-7.87136 2.47993,-10.705895 2.14854,-10.749554 -7.77938,-6.803718 0.74781,-11.285018 0.47993,-11.261581 -8.88835,-5.642548 -2.49815,-10.818768 -2.79293,-10.786576 -9.94048,-2.924887 -2.68846,-4.933638 -4.10296,-7.403383 -5.43173,-7.419184 z"
|
||||
style="display:inline;fill:#ff6600;stroke:#000000;stroke-width:1;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
|
||||
inkscape:label="kani-body" />
|
||||
<g
|
||||
id="g5758"
|
||||
transform="translate(-2.3193819,-7.5517449)"
|
||||
style="display:inline"
|
||||
inkscape:label="kani-face">
|
||||
<path
|
||||
style="display:inline;fill:#d45500;stroke:#000000;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
|
||||
d="m 98.808992,121.55238 c -0.682767,-0.0559 4.468828,10.17565 8.051908,0.17277 0.24133,-0.67372 -3.69223,2.90976 -8.051908,-0.17277 z"
|
||||
id="path5399"
|
||||
inkscape:label="kani-smile" />
|
||||
<g
|
||||
id="g351"
|
||||
inkscape:label="kani-eye-left">
|
||||
<path
|
||||
style="fill:#000000;stroke:#000000;stroke-width:0.264583px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
|
||||
d="m 93.212672,111.5632 c -5.131386,10.99206 5.618332,14.73472 4.412511,4.11951 -0.319289,-3.2881 -2.328089,-7.17448 -4.412511,-4.11951 z"
|
||||
id="path5415" />
|
||||
<path
|
||||
style="fill:#ffffff;stroke:#000000;stroke-width:0.264583px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
|
||||
d="m 95.394393,112.41429 c -1.183441,1.51896 -0.08172,3.83605 -0.09872,3.98526 1.674403,1.64132 1.61267,-4.77034 0.09872,-3.98526 z"
|
||||
id="path5417" />
|
||||
</g>
|
||||
<g
|
||||
id="g355"
|
||||
inkscape:label="kani-eye-right">
|
||||
<path
|
||||
id="path5433"
|
||||
d="m 109.6169,111.5632 c -5.13141,10.99206 5.61836,14.73472 4.41254,4.11951 -0.31929,-3.2881 -2.3281,-7.17448 -4.41254,-4.11951 z"
|
||||
style="fill:#000000;stroke:#000000;stroke-width:0.264583px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" />
|
||||
<path
|
||||
id="path5435"
|
||||
d="m 111.79864,112.41429 c -1.18345,1.51896 -0.0817,3.83605 -0.0987,3.98526 1.67441,1.64132 1.61267,-4.77034 0.0987,-3.98526 z"
|
||||
style="display:inline;fill:#ffffff;stroke:#000000;stroke-width:0.264583px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" />
|
||||
</g>
|
||||
</g>
|
||||
<path
|
||||
id="path5389"
|
||||
d="m 75.334492,106.8255 c -0.51041,0.004 -0.85068,0.0544 -0.79478,0.0889 0,0 -9.13406,11.93611 0.31006,18.65881 a 9.7471106,8.2770874 37.793943 0 0 1.43712,9.42372 9.7471106,8.2770874 37.793943 0 0 10.56473,3.9672 l -3.56412,-8.60569 9.19685,0.73536 a 9.7471106,8.2770874 37.793943 0 0 -7.02645,-8.91057 9.7471106,8.2770874 37.793943 0 0 -7.00784,0.009 c -1.86231,-1.36401 -4.6287,-4.92596 -0.0408,-12.47521 1.51807,-2.49795 -1.54349,-2.90314 -3.07475,-2.89129 z"
|
||||
style="display:inline;fill:#ff6600;fill-opacity:1;stroke:#000000;stroke-width:1;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
|
||||
inkscape:label="kani-claw-left-down" />
|
||||
<g
|
||||
transform="translate(-12.063571,-65.570169)"
|
||||
id="g5751"
|
||||
inkscape:label="passport"
|
||||
style="display:inline">
|
||||
<path
|
||||
style="display:inline;opacity:1;fill:none;fill-opacity:1;stroke:#000000;stroke-width:1;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
|
||||
d="m 142.55119,137.92594 27.3632,-15.27364 21.39613,38.33184 -27.36321,15.27364 z"
|
||||
id="path5730" />
|
||||
<path
|
||||
id="path5734"
|
||||
d="m 142.55119,137.92594 27.3632,-15.27364 21.39613,38.33184 -27.36321,15.27364 -6.27068,-11.23547 c 3.50932,-3.1137 4.19635,-7.01138 3.17635,-11.38324 l -7.39141,3.83317 z"
|
||||
style="display:inline;opacity:1;fill:#2a3455;fill-opacity:1;stroke:#000000;stroke-width:1;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
|
||||
sodipodi:nodetypes="cccccccc" />
|
||||
<g
|
||||
id="g1027"
|
||||
transform="matrix(0.86024749,-0.10202883,0.10202883,0.86024749,30.096406,71.933538)"
|
||||
style="display:inline"
|
||||
inkscape:label="passport-kani">
|
||||
<path
|
||||
id="path4529-1"
|
||||
d="m 142.60294,99.070411 c -0.25799,0.104739 -0.3086,0.672471 -0.384,1.773409 -2.02218,-0.940695 -2.10067,-0.929408 -1.71256,1.33048 -0.0183,0.0187 -0.0366,0.0375 -0.0549,0.0564 -2.18101,-0.31296 -2.27447,-0.28333 -1.28505,1.70286 -0.0291,0.0491 -0.0581,0.0987 -0.0866,0.1487 -2.08254,0.0423 -2.14104,0.11931 -0.86643,1.88938 -0.0116,0.0318 -0.0232,0.0635 -0.0346,0.0955 -2.02632,0.27237 -2.04621,0.36762 -0.56133,2.00288 -0.0116,0.054 -0.0226,0.10863 -0.0338,0.16313 -2.1433,0.64191 -2.16862,0.69967 -0.32345,2.17298 -0.001,0.0115 -0.002,0.0228 -0.004,0.0345 -0.67172,0.75455 -0.74436,1.361 -0.86664,2.18542 0.51637,1.31647 2.38318,1.85412 4.92525,2.2886 -1.22549,-0.98801 -2.57514,-1.18304 -3.44709,-2.68058 0.0635,-0.6971 0.49586,-1.1102 0.83039,-1.55228 6.0132,0.79095 11.12666,-1.31742 14.97206,-6.41277 0.55169,0.0718 1.1521,0.0505 1.69641,0.49515 0.45839,1.67116 -0.34771,2.77114 -0.50064,4.33785 1.47008,-2.11891 2.39377,-3.82799 1.81562,-5.11852 -0.65544,-0.47646 -1.13239,-0.84126 -2.08564,-0.90614 0.2242,-2.22125 0.12343,-2.19897 -1.84772,-1.11119 -0.027,-0.0153 -0.054,-0.0308 -0.081,-0.0459 -0.13212,-2.312418 -0.19894,-2.346242 -1.90222,-1.01773 -0.39525,-2.304482 -0.46385,-2.285755 -2.08647,-0.69401 -0.78276,-2.275429 -0.83337,-2.248771 -2.2084,-0.374874 -1.38113,-1.916624 -1.4363,-1.886031 -2.19098,0.244914 -0.93375,-0.746434 -1.41465,-1.114437 -1.67661,-1.008099 z"
|
||||
style="fill:#2a3455;fill-opacity:1;stroke:#cccccc;stroke-width:0.212762;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
|
||||
<path
|
||||
id="path5389-8"
|
||||
d="m 140.97831,108.89338 c -0.0997,0.0432 -0.1624,0.0807 -0.1486,0.0829 0,0 -0.80881,3.09385 1.59758,3.63486 a 2.0738233,1.7610569 15.019669 0 0 1.05807,1.73034 2.0738233,1.7610569 15.019669 0 0 2.39928,-0.0919 l -1.40796,-1.39467 1.86476,-0.61321 a 2.0738233,1.7610569 15.019669 0 0 -2.1123,-1.16933 2.0738233,1.7610569 15.019669 0 0 -1.37407,0.57883 c -0.47768,-0.11421 -1.31374,-0.58513 -1.03548,-2.44396 0.0921,-0.61507 -0.54189,-0.4424 -0.84131,-0.31396 z"
|
||||
style="fill:#2a3455;fill-opacity:1;stroke:#cccccc;stroke-width:0.212762;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
|
||||
<path
|
||||
id="path5732-7"
|
||||
d="m 151.16542,99.348723 c -0.31065,0.459014 -0.45239,1.035767 -0.39183,1.594317 0.0815,0.73897 0.505,1.34373 1.10549,1.57849 0.10244,2.21135 -1.43246,2.11407 -1.46989,2.10013 -0.28634,-0.0774 -0.71677,1.13867 0.53519,0.98198 1.95562,-0.24473 2.05537,-2.12623 1.98064,-3.063 0.49633,-0.1651 0.92044,-0.56676 1.16438,-1.10276 0.36766,-0.81095 0.25745,-1.774612 -0.27281,-2.385521 l -1.28437,1.509221 -0.10531,-0.25395 z"
|
||||
style="fill:#2a3455;fill-opacity:1;stroke:#cccccc;stroke-width:0.212762;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
|
||||
<path
|
||||
style="fill:#b1b3b8;fill-opacity:1;stroke:#b1b3b8;stroke-width:0.165543;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
|
||||
d="m 157.03788,77.939189 c -0.10179,0.05 1.49878,1.067004 1.15909,-0.658823 -0.0229,-0.116239 -0.27783,0.726935 -1.15909,0.658823 z"
|
||||
id="path5399-5"
|
||||
inkscape:label="kani-passport-smile"
|
||||
transform="matrix(1.1463308,0.13595947,-0.13595947,1.1463308,-22.801274,-2.4500009)" />
|
||||
<g
|
||||
id="g364"
|
||||
inkscape:label="kani-passport-eye-left"
|
||||
transform="matrix(1.1463308,0.13595947,-0.13595947,1.1463308,-22.801274,-2.4500009)">
|
||||
<path
|
||||
style="fill:#b1b3b8;fill-opacity:1;stroke:#b1b3b8;stroke-width:0.0438px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
|
||||
d="m 155.39466,76.994381 c 0.20359,1.997829 2.04911,1.617431 0.97679,0.211015 -0.32445,-0.440244 -0.93981,-0.822131 -0.97679,-0.211015 z"
|
||||
id="path5415-5" />
|
||||
<path
|
||||
style="fill:#ffffff;stroke:#ffffff;stroke-width:0.0438px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
|
||||
d="m 155.77699,76.930181 c -0.0393,0.316333 0.31396,0.552158 0.32421,0.574809 0.37728,0.09117 -0.17566,-0.814887 -0.32421,-0.574809 z"
|
||||
id="path5417-5" />
|
||||
</g>
|
||||
<g
|
||||
id="g374"
|
||||
inkscape:label="kani-passport-eye-right"
|
||||
transform="matrix(1.1463308,0.13595947,-0.13595947,1.1463308,-22.801274,-2.4500009)">
|
||||
<path
|
||||
id="path5433-8"
|
||||
d="m 157.72622,75.602125 c 0.20358,1.997831 2.04911,1.617429 0.97679,0.211012 -0.32445,-0.440244 -0.93981,-0.82213 -0.97679,-0.211012 z"
|
||||
style="fill:#b1b3b8;fill-opacity:1;stroke:#b1b3b8;stroke-width:0.0438px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" />
|
||||
<path
|
||||
id="path5435-2"
|
||||
d="m 158.10855,75.537924 c -0.0393,0.316333 0.31396,0.552158 0.32421,0.574808 0.37728,0.09117 -0.17566,-0.814886 -0.32421,-0.574808 z"
|
||||
style="fill:#ffffff;stroke:#ffffff;stroke-width:0.0438px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" />
|
||||
</g>
|
||||
</g>
|
||||
<text
|
||||
xml:space="preserve"
|
||||
style="font-style:normal;font-weight:normal;font-size:1.71585px;line-height:1.25;font-family:sans-serif;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.0428963"
|
||||
x="94.641426"
|
||||
y="157.04494"
|
||||
id="text167"
|
||||
transform="rotate(-28.988077,144.6719,16.286147)"
|
||||
inkscape:transform-center-x="-0.79526083"
|
||||
inkscape:transform-center-y="0.17672463"
|
||||
inkscape:label="PASSPORT"><tspan
|
||||
sodipodi:role="line"
|
||||
id="tspan165"
|
||||
x="94.641426"
|
||||
y="157.04494"
|
||||
style="fill:#cccccc;stroke-width:0.0428963">PASSPORT</tspan></text>
|
||||
<text
|
||||
xml:space="preserve"
|
||||
style="font-style:normal;font-weight:normal;font-size:2.03519px;line-height:1.25;font-family:sans-serif;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.0508798"
|
||||
x="92.063805"
|
||||
y="154.54707"
|
||||
id="text163"
|
||||
transform="rotate(-29.037466,144.42409,16.321288)"
|
||||
inkscape:transform-center-x="0.53242986"
|
||||
inkscape:transform-center-y="0.81914073"
|
||||
inkscape:label="AUTHSTRALIA"><tspan
|
||||
sodipodi:role="line"
|
||||
id="tspan161"
|
||||
x="92.063805"
|
||||
y="154.54707"
|
||||
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-family:'.PingFang SC';-inkscape-font-specification:'.PingFang SC';fill:#cccccc;stroke-width:0.0508798">AUTHSTRALIA</tspan></text>
|
||||
<text
|
||||
xml:space="preserve"
|
||||
style="font-style:normal;font-weight:normal;font-size:2.70471px;line-height:1.25;font-family:sans-serif;fill:#cccccc;fill-opacity:1;stroke:none;stroke-width:0.0676183"
|
||||
x="93.162766"
|
||||
y="128.62389"
|
||||
id="text1127"
|
||||
transform="rotate(-29.176231,143.73222,16.419399)"
|
||||
inkscape:label="KANIDM"><tspan
|
||||
sodipodi:role="line"
|
||||
id="tspan1125"
|
||||
x="93.162766"
|
||||
y="128.62389"
|
||||
style="fill:#cccccc;stroke-width:0.0676183">KANIDM</tspan></text>
|
||||
</g>
|
||||
<path
|
||||
d="m 145.61485,98.730679 c 3.50932,-3.1137 4.19635,-7.01138 3.17635,-11.38324 l -7.3914,3.83317 z"
|
||||
style="display:inline;fill:#2a3455;fill-opacity:1;stroke:#000000;stroke-width:1;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
|
||||
id="path523"
|
||||
inkscape:label="under-kani-claw" />
|
||||
<path
|
||||
id="path5732"
|
||||
d="m 136.84733,83.996879 c -2.18137,1.42401 -3.84498,3.66555 -4.59874,6.19631 -0.99138,3.35068 -0.25622,6.742 1.91889,8.85192 -3.57942,9.769591 -10.05414,6.555411 -10.19096,6.426891 -1.10017,-0.85629 -5.17794,3.63047 0.53268,5.22929 8.92019,2.49747 12.77572,-5.47478 14.1562,-9.67038 2.45132,0.18756 5.02004,-0.78148 7.05239,-2.660471 3.06875,-2.84546 4.34444,-7.22212 3.15795,-10.83433 l -8.31186,4.20365 0.005,-1.29218 z"
|
||||
style="display:inline;fill:#ff6600;fill-opacity:1;stroke:#000000;stroke-width:1;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
|
||||
</g>
|
||||
</svg>
|
After Width: | Height: | Size: 16 KiB |
|
@ -1,14 +1,17 @@
|
|||
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
||||
<!-- Created with Inkscape (http://www.inkscape.org/) -->
|
||||
|
||||
<svg
|
||||
id="svg5800"
|
||||
width="512"
|
||||
height="512"
|
||||
viewBox="0 0 135.46667 135.46666"
|
||||
version="1.1"
|
||||
viewBox="0 0 8.4666659 8.4666662"
|
||||
height="32"
|
||||
width="32"
|
||||
id="svg1084"
|
||||
sodipodi:docname="logo-square.svg"
|
||||
inkscape:version="1.2 (dc2aeda, 2022-05-15)"
|
||||
inkscape:export-xdpi="96.000008"
|
||||
inkscape:export-ydpi="96.000008"
|
||||
inkscape:export-filename="logo-180.png"
|
||||
inkscape:export-xdpi="33.75"
|
||||
inkscape:export-ydpi="33.75"
|
||||
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
|
||||
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
|
||||
xmlns="http://www.w3.org/2000/svg"
|
||||
|
@ -16,178 +19,234 @@
|
|||
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
|
||||
xmlns:cc="http://creativecommons.org/ns#"
|
||||
xmlns:dc="http://purl.org/dc/elements/1.1/">
|
||||
<title
|
||||
id="title332">Kanidm Square Logo</title>
|
||||
<sodipodi:namedview
|
||||
id="namedview39"
|
||||
pagecolor="#ffffff"
|
||||
bordercolor="#666666"
|
||||
borderopacity="1"
|
||||
objecttolerance="10"
|
||||
gridtolerance="10"
|
||||
guidetolerance="10"
|
||||
inkscape:pageopacity="0"
|
||||
inkscape:pageshadow="2"
|
||||
inkscape:window-width="1636"
|
||||
inkscape:window-height="1273"
|
||||
id="namedview108"
|
||||
showgrid="false"
|
||||
inkscape:zoom="16"
|
||||
inkscape:cx="25.5625"
|
||||
inkscape:cy="21.09375"
|
||||
inkscape:window-x="2213"
|
||||
inkscape:window-y="259"
|
||||
inkscape:window-maximized="0"
|
||||
inkscape:current-layer="layer1"
|
||||
inkscape:pagecheckerboard="true"
|
||||
inkscape:document-units="px"
|
||||
units="px"
|
||||
showguides="true"
|
||||
inkscape:guide-bbox="true"
|
||||
bordercolor="#000000"
|
||||
borderopacity="0.25"
|
||||
inkscape:showpageshadow="2"
|
||||
inkscape:deskcolor="#d1d1d1">
|
||||
inkscape:pageopacity="0.0"
|
||||
inkscape:pagecheckerboard="0"
|
||||
inkscape:deskcolor="#d1d1d1"
|
||||
showgrid="false"
|
||||
showguides="true"
|
||||
inkscape:zoom="1"
|
||||
inkscape:cx="234.5"
|
||||
inkscape:cy="304.5"
|
||||
inkscape:window-width="1389"
|
||||
inkscape:window-height="847"
|
||||
inkscape:window-x="51"
|
||||
inkscape:window-y="25"
|
||||
inkscape:window-maximized="0"
|
||||
inkscape:current-layer="svg1084">
|
||||
<sodipodi:guide
|
||||
position="0.26458331,8.4666661"
|
||||
orientation="-1,0"
|
||||
id="guide3487"
|
||||
inkscape:label="LeftGutter"
|
||||
position="-52.916665,67.733332"
|
||||
orientation="0,1"
|
||||
id="guide145"
|
||||
inkscape:locked="false"
|
||||
inkscape:color="rgb(0,0,255)" />
|
||||
inkscape:label="vertical_middle"
|
||||
inkscape:color="rgb(0,134,229)" />
|
||||
<sodipodi:guide
|
||||
position="8.2020827,8.4666661"
|
||||
position="121.97292,175.15416"
|
||||
orientation="-1,0"
|
||||
id="guide3559"
|
||||
inkscape:label="RightGutter"
|
||||
id="guide777"
|
||||
inkscape:locked="false"
|
||||
inkscape:color="rgb(0,0,255)" />
|
||||
inkscape:label=""
|
||||
inkscape:color="rgb(0,134,229)" />
|
||||
<sodipodi:guide
|
||||
position="13.49375,173.03749"
|
||||
orientation="-1,0"
|
||||
id="guide779"
|
||||
inkscape:locked="false"
|
||||
inkscape:label=""
|
||||
inkscape:color="rgb(0,134,229)" />
|
||||
<sodipodi:guide
|
||||
position="22.754166,121.97292"
|
||||
orientation="0,1"
|
||||
id="guide781"
|
||||
inkscape:locked="false"
|
||||
inkscape:label=""
|
||||
inkscape:color="rgb(0,134,229)" />
|
||||
<sodipodi:guide
|
||||
position="4.4979168,13.758333"
|
||||
orientation="0,1"
|
||||
id="guide783"
|
||||
inkscape:locked="false"
|
||||
inkscape:label=""
|
||||
inkscape:color="rgb(0,134,229)" />
|
||||
</sodipodi:namedview>
|
||||
<defs
|
||||
id="defs5794" />
|
||||
id="defs1081" />
|
||||
<metadata
|
||||
id="metadata5797">
|
||||
id="metadata330">
|
||||
<rdf:RDF>
|
||||
<cc:Work
|
||||
rdf:about="">
|
||||
<dc:format>image/svg+xml</dc:format>
|
||||
<dc:type
|
||||
rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
|
||||
<dc:title>Kanidm Square Logo</dc:title>
|
||||
</cc:Work>
|
||||
</rdf:RDF>
|
||||
</metadata>
|
||||
<rect
|
||||
style="fill:#ffffff;stroke-width:0.243721"
|
||||
id="rect443"
|
||||
width="135.46666"
|
||||
height="135.46666"
|
||||
x="0"
|
||||
y="0"
|
||||
inkscape:label="background"
|
||||
sodipodi:insensitive="true" />
|
||||
<g
|
||||
inkscape:groupmode="layer"
|
||||
id="layer3"
|
||||
id="layer1"
|
||||
transform="matrix(0.91407203,0,0,0.91407203,-34.121105,-24.362694)"
|
||||
inkscape:label="kani">
|
||||
<path
|
||||
style="fill:#803300;stroke:#000000;stroke-width:0.0738318;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
|
||||
d="M 6.8236027,5.6214477 C 7.0727468,6.219438 6.3950073,6.7706755 6.3921002,6.7795817 6.5158926,6.4189258 6.6467266,6.1277845 6.4061022,5.8757083"
|
||||
id="path5404"
|
||||
d="m 62.537712,110.23377 c -3.36297,8.12708 5.78522,15.61876 5.82446,15.73981 -1.67096,-4.90156 -3.43697,-8.85836 -0.189,-12.28424"
|
||||
style="display:inline;fill:#803300;stroke:#000000;stroke-width:1;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
|
||||
<path
|
||||
style="display:inline;fill:#803300;stroke:#000000;stroke-width:1;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
|
||||
d="m 138.4423,109.69923 c 3.36297,8.12708 -5.78522,15.61876 -5.82446,15.7398 1.67096,-4.90155 3.43697,-8.85835 0.189,-12.28423"
|
||||
id="path5408" />
|
||||
<path
|
||||
id="path5404"
|
||||
d="M 1.2663952,5.6607791 C 1.017251,6.2587694 1.6949906,6.810007 1.6978977,6.8189139 1.5741055,6.4582572 1.4432714,6.167116 1.6838958,5.9150398"
|
||||
style="fill:#803300;stroke:#000000;stroke-width:0.0738318;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
|
||||
<path
|
||||
id="path4529"
|
||||
d="M 4.1262147,2.4952519 C 4.0292655,2.4941071 3.9364931,2.6683689 3.7638923,3.0093297 3.2414578,2.4386605 3.2147347,2.4317515 3.0347307,3.2043142 c -0.00842,0.0035 -0.016823,0.00705 -0.025229,0.010643 C 2.3514594,2.8231912 2.3174598,2.8201269 2.367398,3.5859179 2.3514185,3.5976914 2.335452,3.6096168 2.3195424,3.6217364 1.6452247,3.356438 1.6160687,3.3731547 1.7867025,4.1082086 1.7787132,4.1167961 1.770701,4.1253409 1.7627361,4.134027 1.0754648,3.949608 1.0562353,3.977319 1.3125518,4.6975356 1.3015525,4.7132045 1.290639,4.7291433 1.2797042,4.745027 0.50506248,4.6627831 0.48914912,4.6778095 0.88296405,5.3946204 c -0.001926,0.00354 -0.003896,0.00693 -0.005823,0.01049 C 0.55977688,5.5557937 0.45471315,5.7394485 0.30433189,5.9859621 0.29265912,6.4748694 0.81954545,6.8962235 1.5771307,7.3750747 1.3168531,6.8959735 0.90982489,6.6531028 0.83173607,6.0588526 0.94609816,5.8450749 1.1405778,5.7712278 1.3075711,5.6750433 3.1315289,6.7322513 5.0574175,6.7445068 6.9788084,5.6345485 7.1462505,5.7313085 7.3418856,5.8048928 7.4567107,6.0195366 7.3786219,6.6137861 6.9715555,6.8566192 6.7112779,7.3357204 7.4688628,6.8568694 7.9957876,6.4355526 7.9841149,5.9466454 7.837906,5.7069711 7.7339485,5.526798 7.4366502,5.3784984 7.8080292,4.7002197 7.7726761,4.693836 6.9932037,4.7768143 6.9866028,4.768338 6.9800203,4.759754 6.9734105,4.7513387 7.2426835,3.9962954 7.2257907,3.9765642 6.4998724,4.1721643 6.683597,3.3844248 6.6590462,3.3812124 5.9235414,3.6715469 5.9789426,2.8411956 5.9590968,2.8429202 5.265052,3.2563684 5.0799777,2.4603237 5.058139,2.4626925 4.5286165,3.0411552 4.3294434,2.6781384 4.2246516,2.4964146 4.126211,2.4952519 Z"
|
||||
style="fill:#ff6600;stroke:#000000;stroke-width:0.0738318;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
|
||||
<path
|
||||
id="path5389"
|
||||
d="m 2.2144388,5.4099987 c -0.037814,2.942e-4 -0.063022,0.004 -0.058881,0.00655 0,0 -0.6766928,0.8782586 0.022971,1.3729146 A 0.72030748,0.61055214 36.636339 0 0 2.2849976,7.4828565 0.72030748,0.61055214 36.636339 0 0 3.0676808,7.7747629 L 2.803634,7.1415518 3.4849785,7.1956595 A 0.72030748,0.61055214 36.636339 0 0 2.9644271,6.54002 0.72030748,0.61055214 36.636339 0 0 2.4452544,6.5406823 C 2.307286,6.4403184 2.1023393,6.1782303 2.4422318,5.6227566 2.5546974,5.4389575 2.3278831,5.4091436 2.2144404,5.4100156 Z"
|
||||
style="fill:#ff6600;fill-opacity:1;stroke:#000000;stroke-width:0.0738318;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
|
||||
d="m 100.24698,67.21217 c -1.308628,-0.01556 -2.560878,2.352773 -4.890668,6.986654 -7.05187,-7.755768 -7.41258,-7.849666 -9.84229,2.649966 -0.11364,0.04758 -0.22709,0.0959 -0.34055,0.144695 -8.88231,-5.324406 -9.34124,-5.366051 -8.66717,5.041551 -0.21569,0.159933 -0.43121,0.322088 -0.64596,0.486794 -9.102,-3.605578 -9.49555,-3.378386 -7.19232,6.611477 -0.10784,0.11671 -0.21599,0.23284 -0.3235,0.35089 -9.27685,-2.506375 -9.53641,-2.129764 -6.07663,7.65845 -0.14847,0.21295 -0.29578,0.42957 -0.44338,0.64544 -10.45618,-1.11775 -10.67098,-0.91353 -5.35523,8.828413 -0.026,0.0482 -0.0526,0.0943 -0.0786,0.14263 -4.28381,2.04782 -5.70197,4.54381 -7.73183,7.89409 -0.15756,6.64457 6.9544,12.37105 17.18035,18.87895 -3.51325,-6.5113 -9.00735,-9.81207 -10.0614,-17.88832 1.54367,-2.90538 4.16877,-3.90901 6.42286,-5.21622 24.61995,14.36815 50.615808,14.53471 76.550928,-0.55035 2.26015,1.31503 4.90084,2.31509 6.45076,5.23224 -1.05405,8.07624 -6.54866,11.3765 -10.06191,17.8878 10.22594,-6.5079 17.33842,-12.23387 17.18086,-18.87844 -1.97354,-3.25733 -3.37677,-5.706 -7.38973,-7.72149 5.01291,-9.218263 4.53571,-9.305023 -5.98567,-8.177293 -0.0891,-0.1152 -0.17795,-0.23186 -0.26717,-0.34623 3.63467,-10.261532 3.40665,-10.529692 -6.39186,-7.87136 2.47993,-10.705895 2.14854,-10.749554 -7.77938,-6.803718 0.74781,-11.285018 0.47993,-11.261581 -8.88835,-5.642548 -2.49815,-10.818768 -2.79293,-10.786576 -9.94048,-2.924887 -2.68846,-4.933638 -4.10296,-7.403383 -5.43173,-7.419184 z"
|
||||
style="display:inline;fill:#ff6600;stroke:#000000;stroke-width:1;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
|
||||
<g
|
||||
id="g5758"
|
||||
transform="matrix(0.07408455,0,0,0.07357997,-3.6046589,-3.0058747)">
|
||||
transform="translate(-2.3193819,-7.5517449)"
|
||||
style="display:inline">
|
||||
<path
|
||||
style="fill:#d45500;stroke:#000000;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
|
||||
style="display:inline;fill:#d45500;stroke:#000000;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
|
||||
d="m 98.808992,121.55238 c -0.682767,-0.0559 4.468828,10.17565 8.051908,0.17277 0.24133,-0.67372 -3.69223,2.90976 -8.051908,-0.17277 z"
|
||||
id="path5399" />
|
||||
<path
|
||||
style="fill:#000000;stroke:#000000;stroke-width:0.264583px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
|
||||
d="m 93.212672,111.5632 c -5.131386,10.99206 5.618332,14.73472 4.412511,4.11951 -0.319289,-3.2881 -2.328089,-7.17448 -4.412511,-4.11951 z"
|
||||
id="path5415" />
|
||||
<path
|
||||
style="fill:#ffffff;stroke:#000000;stroke-width:0.264583px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
|
||||
d="m 95.394393,112.41429 c -1.183441,1.51896 -0.08172,3.83605 -0.09872,3.98526 1.674403,1.64132 1.61267,-4.77034 0.09872,-3.98526 z"
|
||||
id="path5417" />
|
||||
<path
|
||||
id="path5433"
|
||||
d="m 109.6169,111.5632 c -5.13141,10.99206 5.61836,14.73472 4.41254,4.11951 -0.31929,-3.2881 -2.3281,-7.17448 -4.41254,-4.11951 z"
|
||||
style="fill:#000000;stroke:#000000;stroke-width:0.264583px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" />
|
||||
<path
|
||||
id="path5435"
|
||||
d="m 111.79864,112.41429 c -1.18345,1.51896 -0.0817,3.83605 -0.0987,3.98526 1.67441,1.64132 1.61267,-4.77034 0.0987,-3.98526 z"
|
||||
style="fill:#ffffff;stroke:#000000;stroke-width:0.264583px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" />
|
||||
<g
|
||||
id="g351">
|
||||
<path
|
||||
style="fill:#000000;stroke:#000000;stroke-width:0.264583px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
|
||||
d="m 93.212672,111.5632 c -5.131386,10.99206 5.618332,14.73472 4.412511,4.11951 -0.319289,-3.2881 -2.328089,-7.17448 -4.412511,-4.11951 z"
|
||||
id="path5415" />
|
||||
<path
|
||||
style="fill:#ffffff;stroke:#000000;stroke-width:0.264583px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
|
||||
d="m 95.394393,112.41429 c -1.183441,1.51896 -0.08172,3.83605 -0.09872,3.98526 1.674403,1.64132 1.61267,-4.77034 0.09872,-3.98526 z"
|
||||
id="path5417" />
|
||||
</g>
|
||||
<g
|
||||
id="g355">
|
||||
<path
|
||||
id="path5433"
|
||||
d="m 109.6169,111.5632 c -5.13141,10.99206 5.61836,14.73472 4.41254,4.11951 -0.31929,-3.2881 -2.3281,-7.17448 -4.41254,-4.11951 z"
|
||||
style="fill:#000000;stroke:#000000;stroke-width:0.264583px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" />
|
||||
<path
|
||||
id="path5435"
|
||||
d="m 111.79864,112.41429 c -1.18345,1.51896 -0.0817,3.83605 -0.0987,3.98526 1.67441,1.64132 1.61267,-4.77034 0.0987,-3.98526 z"
|
||||
style="display:inline;fill:#ffffff;stroke:#000000;stroke-width:0.264583px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" />
|
||||
</g>
|
||||
</g>
|
||||
</g>
|
||||
<g
|
||||
inkscape:groupmode="layer"
|
||||
id="layer1"
|
||||
inkscape:label="passport"
|
||||
style="display:inline">
|
||||
<path
|
||||
id="path5734"
|
||||
d="M 4.4727876,3.2860988 5.0865919,1.0623464 8.2231056,1.9163406 7.6093007,4.1400935 6.6899943,3.8897392 C 6.7076906,3.5449842 6.537409,3.3079137 6.2534312,3.1359748 L 6.0721688,3.7215707 Z"
|
||||
style="fill:#2a3455;fill-opacity:1;stroke:#000000;stroke-width:0.0738318;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
|
||||
<text
|
||||
xml:space="preserve"
|
||||
style="font-style:normal;font-weight:normal;font-size:0.166237px;line-height:1.25;font-family:sans-serif;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.00415594"
|
||||
x="-1.3283145"
|
||||
y="7.929297"
|
||||
id="text163"
|
||||
transform="rotate(-74.037466)"
|
||||
inkscape:transform-center-x="-0.016559599"
|
||||
inkscape:transform-center-y="0.078066045"><tspan
|
||||
sodipodi:role="line"
|
||||
id="tspan161"
|
||||
x="-1.3283145"
|
||||
y="7.929297"
|
||||
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-family:'.PingFang SC';-inkscape-font-specification:'.PingFang SC';fill:#cccccc;stroke-width:0.00415594">AUTHSTRALIA</tspan></text>
|
||||
<text
|
||||
xml:space="preserve"
|
||||
style="font-style:normal;font-weight:normal;font-size:0.140154px;line-height:1.25;font-family:sans-serif;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.00350384"
|
||||
x="-1.1218139"
|
||||
y="8.1409359"
|
||||
id="text167"
|
||||
transform="rotate(-73.988078)"
|
||||
inkscape:transform-center-x="-0.056139824"
|
||||
inkscape:transform-center-y="-0.035726887"><tspan
|
||||
sodipodi:role="line"
|
||||
id="tspan165"
|
||||
x="-1.1218139"
|
||||
y="8.1409359"
|
||||
style="fill:#cccccc;stroke-width:0.00350384">PASSPORT</tspan></text>
|
||||
id="path5389"
|
||||
d="m 75.334492,106.8255 c -0.51041,0.004 -0.85068,0.0544 -0.79478,0.0889 0,0 -9.13406,11.93611 0.31006,18.65881 a 9.7471106,8.2770874 37.793943 0 0 1.43712,9.42372 9.7471106,8.2770874 37.793943 0 0 10.56473,3.9672 l -3.56412,-8.60569 9.19685,0.73536 a 9.7471106,8.2770874 37.793943 0 0 -7.02645,-8.91057 9.7471106,8.2770874 37.793943 0 0 -7.00784,0.009 c -1.86231,-1.36401 -4.6287,-4.92596 -0.0408,-12.47521 1.51807,-2.49795 -1.54349,-2.90314 -3.07475,-2.89129 z"
|
||||
style="display:inline;fill:#ff6600;fill-opacity:1;stroke:#000000;stroke-width:1;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
|
||||
<g
|
||||
id="g1027"
|
||||
transform="matrix(0.04379293,-0.05557881,0.05557881,0.04379293,-5.8120093,6.0560959)">
|
||||
transform="translate(-12.063571,-65.570169)"
|
||||
id="g5751"
|
||||
style="display:inline">
|
||||
<path
|
||||
id="path4529-1"
|
||||
d="m 142.60294,99.070411 c -0.25799,0.104739 -0.3086,0.672471 -0.384,1.773409 -2.02218,-0.940695 -2.10067,-0.929408 -1.71256,1.33048 -0.0183,0.0187 -0.0366,0.0375 -0.0549,0.0564 -2.18101,-0.31296 -2.27447,-0.28333 -1.28505,1.70286 -0.0291,0.0491 -0.0581,0.0987 -0.0866,0.1487 -2.08254,0.0423 -2.14104,0.11931 -0.86643,1.88938 -0.0116,0.0318 -0.0232,0.0635 -0.0346,0.0955 -2.02632,0.27237 -2.04621,0.36762 -0.56133,2.00288 -0.0116,0.054 -0.0226,0.10863 -0.0338,0.16313 -2.1433,0.64191 -2.16862,0.69967 -0.32345,2.17298 -0.001,0.0115 -0.002,0.0228 -0.004,0.0345 -0.67172,0.75455 -0.74436,1.361 -0.86664,2.18542 0.51637,1.31647 2.38318,1.85412 4.92525,2.2886 -1.22549,-0.98801 -2.57514,-1.18304 -3.44709,-2.68058 0.0635,-0.6971 0.49586,-1.1102 0.83039,-1.55228 6.0132,0.79095 11.12666,-1.31742 14.97206,-6.41277 0.55169,0.0718 1.1521,0.0505 1.69641,0.49515 0.45839,1.67116 -0.34771,2.77114 -0.50064,4.33785 1.47008,-2.11891 2.39377,-3.82799 1.81562,-5.11852 -0.65544,-0.47646 -1.13239,-0.84126 -2.08564,-0.90614 0.2242,-2.22125 0.12343,-2.19897 -1.84772,-1.11119 -0.027,-0.0153 -0.054,-0.0308 -0.081,-0.0459 -0.13212,-2.312418 -0.19894,-2.346242 -1.90222,-1.01773 -0.39525,-2.304482 -0.46385,-2.285755 -2.08647,-0.69401 -0.78276,-2.275429 -0.83337,-2.248771 -2.2084,-0.374874 -1.38113,-1.916624 -1.4363,-1.886031 -2.19098,0.244914 -0.93375,-0.746434 -1.41465,-1.114437 -1.67661,-1.008099 z"
|
||||
style="fill:#2a3455;fill-opacity:1;stroke:#cccccc;stroke-width:0.212762;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
|
||||
style="display:inline;opacity:1;fill:none;fill-opacity:1;stroke:#000000;stroke-width:1;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
|
||||
d="m 142.55119,137.92594 27.3632,-15.27364 21.39613,38.33184 -27.36321,15.27364 z"
|
||||
id="path5730" />
|
||||
<path
|
||||
id="path5389-8"
|
||||
d="m 140.97831,108.89338 c -0.0997,0.0432 -0.1624,0.0807 -0.1486,0.0829 0,0 -0.80881,3.09385 1.59758,3.63486 a 2.0738233,1.7610569 15.019669 0 0 1.05807,1.73034 2.0738233,1.7610569 15.019669 0 0 2.39928,-0.0919 l -1.40796,-1.39467 1.86476,-0.61321 a 2.0738233,1.7610569 15.019669 0 0 -2.1123,-1.16933 2.0738233,1.7610569 15.019669 0 0 -1.37407,0.57883 c -0.47768,-0.11421 -1.31374,-0.58513 -1.03548,-2.44396 0.0921,-0.61507 -0.54189,-0.4424 -0.84131,-0.31396 z"
|
||||
style="fill:#2a3455;fill-opacity:1;stroke:#cccccc;stroke-width:0.212762;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
|
||||
<path
|
||||
id="path5732-7"
|
||||
d="m 151.16542,99.348723 c -0.31065,0.459014 -0.45239,1.035767 -0.39183,1.594317 0.0815,0.73897 0.505,1.34373 1.10549,1.57849 0.10244,2.21135 -1.43246,2.11407 -1.46989,2.10013 -0.28634,-0.0774 -0.71677,1.13867 0.53519,0.98198 1.95562,-0.24473 2.05537,-2.12623 1.98064,-3.063 0.49633,-0.1651 0.92044,-0.56676 1.16438,-1.10276 0.36766,-0.81095 0.25745,-1.774612 -0.27281,-2.385521 l -1.28437,1.509221 -0.10531,-0.25395 z"
|
||||
style="fill:#2a3455;fill-opacity:1;stroke:#cccccc;stroke-width:0.212762;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
|
||||
id="path5734"
|
||||
d="m 142.55119,137.92594 27.3632,-15.27364 21.39613,38.33184 -27.36321,15.27364 -6.27068,-11.23547 c 3.50932,-3.1137 4.19635,-7.01138 3.17635,-11.38324 l -7.39141,3.83317 z"
|
||||
style="display:inline;opacity:1;fill:#2a3455;fill-opacity:1;stroke:#000000;stroke-width:1;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
|
||||
<g
|
||||
id="g1027"
|
||||
transform="matrix(0.86024749,-0.10202883,0.10202883,0.86024749,30.096406,71.933538)"
|
||||
style="display:inline">
|
||||
<path
|
||||
id="path4529-1"
|
||||
d="m 142.60294,99.070411 c -0.25799,0.104739 -0.3086,0.672471 -0.384,1.773409 -2.02218,-0.940695 -2.10067,-0.929408 -1.71256,1.33048 -0.0183,0.0187 -0.0366,0.0375 -0.0549,0.0564 -2.18101,-0.31296 -2.27447,-0.28333 -1.28505,1.70286 -0.0291,0.0491 -0.0581,0.0987 -0.0866,0.1487 -2.08254,0.0423 -2.14104,0.11931 -0.86643,1.88938 -0.0116,0.0318 -0.0232,0.0635 -0.0346,0.0955 -2.02632,0.27237 -2.04621,0.36762 -0.56133,2.00288 -0.0116,0.054 -0.0226,0.10863 -0.0338,0.16313 -2.1433,0.64191 -2.16862,0.69967 -0.32345,2.17298 -0.001,0.0115 -0.002,0.0228 -0.004,0.0345 -0.67172,0.75455 -0.74436,1.361 -0.86664,2.18542 0.51637,1.31647 2.38318,1.85412 4.92525,2.2886 -1.22549,-0.98801 -2.57514,-1.18304 -3.44709,-2.68058 0.0635,-0.6971 0.49586,-1.1102 0.83039,-1.55228 6.0132,0.79095 11.12666,-1.31742 14.97206,-6.41277 0.55169,0.0718 1.1521,0.0505 1.69641,0.49515 0.45839,1.67116 -0.34771,2.77114 -0.50064,4.33785 1.47008,-2.11891 2.39377,-3.82799 1.81562,-5.11852 -0.65544,-0.47646 -1.13239,-0.84126 -2.08564,-0.90614 0.2242,-2.22125 0.12343,-2.19897 -1.84772,-1.11119 -0.027,-0.0153 -0.054,-0.0308 -0.081,-0.0459 -0.13212,-2.312418 -0.19894,-2.346242 -1.90222,-1.01773 -0.39525,-2.304482 -0.46385,-2.285755 -2.08647,-0.69401 -0.78276,-2.275429 -0.83337,-2.248771 -2.2084,-0.374874 -1.38113,-1.916624 -1.4363,-1.886031 -2.19098,0.244914 -0.93375,-0.746434 -1.41465,-1.114437 -1.67661,-1.008099 z"
|
||||
style="fill:#2a3455;fill-opacity:1;stroke:#cccccc;stroke-width:0.212762;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
|
||||
<path
|
||||
id="path5389-8"
|
||||
d="m 140.97831,108.89338 c -0.0997,0.0432 -0.1624,0.0807 -0.1486,0.0829 0,0 -0.80881,3.09385 1.59758,3.63486 a 2.0738233,1.7610569 15.019669 0 0 1.05807,1.73034 2.0738233,1.7610569 15.019669 0 0 2.39928,-0.0919 l -1.40796,-1.39467 1.86476,-0.61321 a 2.0738233,1.7610569 15.019669 0 0 -2.1123,-1.16933 2.0738233,1.7610569 15.019669 0 0 -1.37407,0.57883 c -0.47768,-0.11421 -1.31374,-0.58513 -1.03548,-2.44396 0.0921,-0.61507 -0.54189,-0.4424 -0.84131,-0.31396 z"
|
||||
style="fill:#2a3455;fill-opacity:1;stroke:#cccccc;stroke-width:0.212762;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
|
||||
<path
|
||||
id="path5732-7"
|
||||
d="m 151.16542,99.348723 c -0.31065,0.459014 -0.45239,1.035767 -0.39183,1.594317 0.0815,0.73897 0.505,1.34373 1.10549,1.57849 0.10244,2.21135 -1.43246,2.11407 -1.46989,2.10013 -0.28634,-0.0774 -0.71677,1.13867 0.53519,0.98198 1.95562,-0.24473 2.05537,-2.12623 1.98064,-3.063 0.49633,-0.1651 0.92044,-0.56676 1.16438,-1.10276 0.36766,-0.81095 0.25745,-1.774612 -0.27281,-2.385521 l -1.28437,1.509221 -0.10531,-0.25395 z"
|
||||
style="fill:#2a3455;fill-opacity:1;stroke:#cccccc;stroke-width:0.212762;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
|
||||
<path
|
||||
style="fill:#b1b3b8;fill-opacity:1;stroke:#b1b3b8;stroke-width:0.165543;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
|
||||
d="m 157.03788,77.939189 c -0.10179,0.05 1.49878,1.067004 1.15909,-0.658823 -0.0229,-0.116239 -0.27783,0.726935 -1.15909,0.658823 z"
|
||||
id="path5399-5"
|
||||
transform="matrix(1.1463308,0.13595947,-0.13595947,1.1463308,-22.801274,-2.4500009)" />
|
||||
<g
|
||||
id="g364"
|
||||
transform="matrix(1.1463308,0.13595947,-0.13595947,1.1463308,-22.801274,-2.4500009)">
|
||||
<path
|
||||
style="fill:#b1b3b8;fill-opacity:1;stroke:#b1b3b8;stroke-width:0.0438px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
|
||||
d="m 155.39466,76.994381 c 0.20359,1.997829 2.04911,1.617431 0.97679,0.211015 -0.32445,-0.440244 -0.93981,-0.822131 -0.97679,-0.211015 z"
|
||||
id="path5415-5" />
|
||||
<path
|
||||
style="fill:#ffffff;stroke:#ffffff;stroke-width:0.0438px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
|
||||
d="m 155.77699,76.930181 c -0.0393,0.316333 0.31396,0.552158 0.32421,0.574809 0.37728,0.09117 -0.17566,-0.814887 -0.32421,-0.574809 z"
|
||||
id="path5417-5" />
|
||||
</g>
|
||||
<g
|
||||
id="g374"
|
||||
transform="matrix(1.1463308,0.13595947,-0.13595947,1.1463308,-22.801274,-2.4500009)">
|
||||
<path
|
||||
id="path5433-8"
|
||||
d="m 157.72622,75.602125 c 0.20358,1.997831 2.04911,1.617429 0.97679,0.211012 -0.32445,-0.440244 -0.93981,-0.82213 -0.97679,-0.211012 z"
|
||||
style="fill:#b1b3b8;fill-opacity:1;stroke:#b1b3b8;stroke-width:0.0438px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" />
|
||||
<path
|
||||
id="path5435-2"
|
||||
d="m 158.10855,75.537924 c -0.0393,0.316333 0.31396,0.552158 0.32421,0.574808 0.37728,0.09117 -0.17566,-0.814886 -0.32421,-0.574808 z"
|
||||
style="fill:#ffffff;stroke:#ffffff;stroke-width:0.0438px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" />
|
||||
</g>
|
||||
</g>
|
||||
<text
|
||||
xml:space="preserve"
|
||||
style="font-style:normal;font-weight:normal;font-size:1.71585px;line-height:1.25;font-family:sans-serif;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.0428963"
|
||||
x="94.641426"
|
||||
y="157.04494"
|
||||
id="text167"
|
||||
transform="rotate(-28.988077,144.6719,16.286147)"><tspan
|
||||
id="tspan165"
|
||||
x="94.641426"
|
||||
y="157.04494"
|
||||
style="fill:#cccccc;stroke-width:0.0428963">PASSPORT</tspan></text>
|
||||
<text
|
||||
xml:space="preserve"
|
||||
style="font-style:normal;font-weight:normal;font-size:2.03519px;line-height:1.25;font-family:sans-serif;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.0508798"
|
||||
x="92.063805"
|
||||
y="154.54707"
|
||||
id="text163"
|
||||
transform="rotate(-29.037466,144.42409,16.321288)"><tspan
|
||||
id="tspan161"
|
||||
x="92.063805"
|
||||
y="154.54707"
|
||||
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-family:'.PingFang SC';-inkscape-font-specification:'.PingFang SC';fill:#cccccc;stroke-width:0.0508798">AUTHSTRALIA</tspan></text>
|
||||
<text
|
||||
xml:space="preserve"
|
||||
style="font-style:normal;font-weight:normal;font-size:2.70471px;line-height:1.25;font-family:sans-serif;fill:#cccccc;fill-opacity:1;stroke:none;stroke-width:0.0676183"
|
||||
x="93.162766"
|
||||
y="128.62389"
|
||||
id="text1127"
|
||||
transform="rotate(-29.176231,143.73222,16.419399)"><tspan
|
||||
id="tspan1125"
|
||||
x="93.162766"
|
||||
y="128.62389"
|
||||
style="fill:#cccccc;stroke-width:0.0676183">KANIDM</tspan></text>
|
||||
</g>
|
||||
<text
|
||||
xml:space="preserve"
|
||||
style="font-style:normal;font-weight:normal;font-size:0.220925px;line-height:1.25;font-family:sans-serif;fill:#cccccc;fill-opacity:1;stroke:none;stroke-width:0.00552317"
|
||||
x="-1.2271552"
|
||||
y="5.7904234"
|
||||
id="text1127"
|
||||
transform="rotate(-74.176232)"><tspan
|
||||
sodipodi:role="line"
|
||||
id="tspan1125"
|
||||
x="-1.2271552"
|
||||
y="5.7904234"
|
||||
style="fill:#cccccc;stroke-width:0.00552317">KANIDM</tspan></text>
|
||||
<path
|
||||
style="fill:none;fill-opacity:1;stroke:#000000;stroke-width:0.0738318;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
|
||||
d="M 4.4727876,3.2860988 5.0865919,1.0623464 8.2231056,1.9163406 7.6093007,4.1400935 Z"
|
||||
id="path5730" />
|
||||
d="m 145.61485,98.730679 c 3.50932,-3.1137 4.19635,-7.01138 3.17635,-11.38324 l -7.3914,3.83317 z"
|
||||
style="display:inline;fill:#2a3455;fill-opacity:1;stroke:#000000;stroke-width:1;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
|
||||
id="path523" />
|
||||
<path
|
||||
id="path5732"
|
||||
d="M 5.4483222,3.5809313 C 5.4102971,3.768852 5.4423564,3.9717625 5.5369438,4.1418391 5.6625176,4.3666719 5.8798921,4.5029901 6.104328,4.497653 6.4346939,5.1893497 5.9286446,5.3633841 5.914749,5.3639364 5.8123739,5.377513 5.8377135,5.8229134 6.2187287,5.6056709 6.8138918,5.2663326 6.5928357,4.6528388 6.4428208,4.3640113 6.5800196,4.2450372 6.6622,4.0602516 6.6684455,3.856687 6.6774386,3.5488876 6.5124143,3.2562212 6.2599318,3.1321972 l -0.2094822,0.6530092 -0.06802,-0.066904 z"
|
||||
style="display:inline;fill:#ff6600;fill-opacity:1;stroke:#000000;stroke-width:0.0738318;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
|
||||
d="m 136.84733,83.996879 c -2.18137,1.42401 -3.84498,3.66555 -4.59874,6.19631 -0.99138,3.35068 -0.25622,6.742 1.91889,8.85192 -3.57942,9.769591 -10.05414,6.555411 -10.19096,6.426891 -1.10017,-0.85629 -5.17794,3.63047 0.53268,5.22929 8.92019,2.49747 12.77572,-5.47478 14.1562,-9.67038 2.45132,0.18756 5.02004,-0.78148 7.05239,-2.660471 3.06875,-2.84546 4.34444,-7.22212 3.15795,-10.83433 l -8.31186,4.20365 0.005,-1.29218 z"
|
||||
style="display:inline;fill:#ff6600;fill-opacity:1;stroke:#000000;stroke-width:1;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
|
||||
</g>
|
||||
</svg>
|
||||
|
|
Before Width: | Height: | Size: 13 KiB After Width: | Height: | Size: 16 KiB |
|
@ -27,24 +27,21 @@ and sensitive data), group management, and more.
|
|||
## Recovering the Initial idm_admin Account
|
||||
|
||||
By default the idm_admin user has no password, and can not be accessed. You should recover it with the
|
||||
admin (system admin) account. We recommend the use of the "recover_account" functionality as it provides a high strength, random password.
|
||||
admin (system admin) account.
|
||||
|
||||
<table>
|
||||
<tr>
|
||||
<td>
|
||||
<img src="/images/kani-warning.png" style="float:left">
|
||||
</td>
|
||||
<td>Warning: The server must not be running at this point, as it requires exclusive access to the database.</td>
|
||||
</tr>
|
||||
</table>
|
||||
{{#template
|
||||
templates/kani-warning.md
|
||||
text=Warning: The server must not be running at this point, as it requires exclusive access to the database.
|
||||
}}
|
||||
|
||||
We recommend the use of the "recover_account" functionality as it provides a high strength, random password.
|
||||
|
||||
```shell
|
||||
kanidmd recover_account -c /etc/kanidm/server.toml -n idm_admin
|
||||
Successfully recovered account 'idm_admin' - password reset to -> j9YUv...
|
||||
```
|
||||
|
||||
To do this in Docker, you'll neeD to stop the existing container and run it with "bash" as the "command" argument, to get a shell, then run the `kanidmd` command above.
|
||||
To do this in Docker, you'll need to stop the existing container and run it with `bash` as the "command" argument, to get a shell, then run the `kanidmd` command above.
|
||||
|
||||
For example, if I'm using the developer image in my test environment:
|
||||
|
||||
|
|
|
@ -190,6 +190,7 @@ impl AccountOpt {
|
|||
{
|
||||
// TODO: JSON output for account person extend.
|
||||
Ok(_) => {
|
||||
result_output.status = kanidm_proto::messages::MessageStatus::Success;
|
||||
result_output.result = format!(
|
||||
"Successfully extended the user {}.",
|
||||
aopt.aopts.account_id
|
||||
|
|
189
kanidmd/score/src/https/manifest.rs
Normal file
|
@ -0,0 +1,189 @@
|
|||
///! Builds a Progressive Web App Manifest page.
|
||||
// Thanks to the webmanifest crate for a lot of this code
|
||||
use crate::https::{AppState, RequestExtensions};
|
||||
use serde::{Deserialize, Serialize};
|
||||
|
||||
/// The MIME type for `.webmanifest` files.
|
||||
const MIME_TYPE_MANIFEST: &str = "application/manifest+json";
|
||||
|
||||
/// Create a new manifest builder.
|
||||
#[derive(Debug, Clone, Serialize, Deserialize)]
|
||||
pub struct Manifest<'s> {
|
||||
name: &'s str,
|
||||
short_name: &'s str,
|
||||
start_url: &'s str,
|
||||
#[serde(rename = "display")]
|
||||
display_mode: DisplayMode,
|
||||
background_color: &'s str,
|
||||
#[serde(skip_serializing_if = "Option::is_none")]
|
||||
description: Option<&'s str>,
|
||||
#[serde(rename = "dir")]
|
||||
direction: Direction,
|
||||
// direction: Option<Direction>,
|
||||
#[serde(skip_serializing_if = "Option::is_none")]
|
||||
orientation: Option<String>,
|
||||
// orientation: Option<Orientation>,
|
||||
#[serde(skip_serializing_if = "Option::is_none")]
|
||||
lang: Option<&'s str>,
|
||||
#[serde(skip_serializing_if = "Option::is_none")]
|
||||
scope: Option<&'s str>,
|
||||
// #[serde(skip_serializing_if = "Option::is_none")]
|
||||
theme_color: &'s str,
|
||||
#[serde(skip_serializing_if = "Option::is_none")]
|
||||
prefer_related_applications: Option<bool>,
|
||||
// #[serde(borrow)]
|
||||
// #[serde(skip_serializing_if = "Option::is_none")]
|
||||
icons: Vec<ManifestIcon>,
|
||||
// icons: Vec<Icon<'i>>,
|
||||
// #[serde(borrow)]
|
||||
#[serde(skip_serializing_if = "Option::is_none")]
|
||||
related_applications: Option<Vec<String>>,
|
||||
// related_applications: Vec<Related<'r>>,
|
||||
}
|
||||
|
||||
#[derive(Clone, Debug, Serialize, Deserialize)]
|
||||
struct ManifestIcon {
|
||||
src: String,
|
||||
#[serde(rename = "type")]
|
||||
mime_type: String,
|
||||
sizes: String,
|
||||
#[serde(skip_serializing_if = "Option::is_none")]
|
||||
purpose: Option<String>,
|
||||
}
|
||||
|
||||
#[derive(Debug, Clone, Serialize, Deserialize)]
|
||||
enum Direction {
|
||||
/// left-to-right
|
||||
#[serde(rename = "ltr")]
|
||||
Ltr,
|
||||
/// right-to-left
|
||||
#[serde(rename = "rtl")]
|
||||
Rtl,
|
||||
/// Hints to the browser to use the [Unicode bidirectional
|
||||
/// algorithm](https://developer.mozilla.org/en-US/docs/Web/Localization/Unicode_Bidirectional_Text_Algorithm)
|
||||
/// to make a best guess about the text's direction.
|
||||
#[serde(rename = "auto")]
|
||||
Auto,
|
||||
}
|
||||
|
||||
/// Display modes from the Web app manifest definition
|
||||
///
|
||||
/// Ref: https://developer.mozilla.org/en-US/docs/Web/Manifest/display
|
||||
#[derive(Debug, Clone, Serialize, Deserialize)]
|
||||
enum DisplayMode {
|
||||
/// All of the available display area is used and no user agent chrome is
|
||||
/// shown.
|
||||
#[serde(rename = "full-screen")]
|
||||
FullScreen,
|
||||
/// The application will look and feel like a standalone application. This can
|
||||
/// include the application having a different window, its own icon in the
|
||||
/// application launcher, etc. In this mode, the user agent will exclude UI
|
||||
/// elements for controlling navigation, but can include other UI elements
|
||||
/// such as a status bar.
|
||||
#[serde(rename = "standalone")]
|
||||
Standalone,
|
||||
/// The application will look and feel like a standalone application, but will
|
||||
/// have a minimal set of UI elements for controlling navigation. The elements
|
||||
/// will vary by browser.
|
||||
#[serde(rename = "minimal-ui")]
|
||||
MinimalUi,
|
||||
/// The application opens in a conventional browser tab or new window,
|
||||
/// depending on the browser and platform. This is the default.
|
||||
#[serde(rename = "browser")]
|
||||
Browser,
|
||||
}
|
||||
|
||||
/// Generates a manifest.json file for progressive web app usag
|
||||
pub async fn manifest(req: tide::Request<AppState>) -> tide::Result {
|
||||
let mut res = tide::Response::new(200);
|
||||
let (eventid, _) = req.new_eventid();
|
||||
let domain_display_name = req.state().qe_r_ref.get_domain_display_name(eventid).await;
|
||||
|
||||
let icons = vec![
|
||||
ManifestIcon {
|
||||
sizes: String::from("512x512"),
|
||||
src: String::from("/pkg/img/logo-square.svg"),
|
||||
mime_type: String::from("image/svg+xml"),
|
||||
purpose: None,
|
||||
},
|
||||
ManifestIcon {
|
||||
sizes: String::from("512x512"),
|
||||
src: String::from("/pkg/img/logo-512.png"),
|
||||
mime_type: String::from("image/png"),
|
||||
purpose: Some(String::from("maskable")),
|
||||
},
|
||||
ManifestIcon {
|
||||
sizes: String::from("192x192"),
|
||||
src: String::from("/pkg/img/logo-192.png"),
|
||||
mime_type: String::from("image/png"),
|
||||
purpose: Some(String::from("maskable")),
|
||||
},
|
||||
ManifestIcon {
|
||||
sizes: String::from("256x156"),
|
||||
src: String::from("/pkg/img/logo-256.png"),
|
||||
mime_type: String::from("image/png"),
|
||||
purpose: Some(String::from("maskable")),
|
||||
},
|
||||
];
|
||||
|
||||
|
||||
let manifest_struct = Manifest {
|
||||
short_name: domain_display_name.as_str(),
|
||||
name: domain_display_name.as_str(),
|
||||
start_url: "/", // TODO: this needs to be the frontend URL, can't get this yet
|
||||
display_mode: DisplayMode::MinimalUi,
|
||||
description: None,
|
||||
orientation: None,
|
||||
lang: Some("en"),
|
||||
theme_color: "white",
|
||||
background_color: "white",
|
||||
direction: Direction::Auto,
|
||||
scope: None,
|
||||
prefer_related_applications: None,
|
||||
icons,
|
||||
related_applications: None,
|
||||
};
|
||||
|
||||
let manifest_string = serde_json::to_string_pretty(&manifest_struct)?;
|
||||
|
||||
res.set_content_type(MIME_TYPE_MANIFEST);
|
||||
res.set_body(manifest_string);
|
||||
|
||||
Ok(res)
|
||||
}
|
||||
|
||||
// "start_url": "/?source=pwa",
|
||||
// "background_color": "#3367D6",
|
||||
// "display": "standalone",
|
||||
// "scope": "/",
|
||||
// "theme_color": "#3367D6",
|
||||
// "shortcuts": [
|
||||
// {
|
||||
// "name": "How's weather today?",
|
||||
// "short_name": "Today",
|
||||
// "description": "View weather information for today",
|
||||
// "url": "/today?source=pwa",
|
||||
// "icons": [{ "src": "/images/today.png", "sizes": "192x192" }]
|
||||
// },
|
||||
// {
|
||||
// "name": "How's weather tomorrow?",
|
||||
// "short_name": "Tomorrow",
|
||||
// "description": "View weather information for tomorrow",
|
||||
// "url": "/tomorrow?source=pwa",
|
||||
// "icons": [{ "src": "/images/tomorrow.png", "sizes": "192x192" }]
|
||||
// }
|
||||
// ],
|
||||
// "description": "Weather forecast information",
|
||||
// "screenshots": [
|
||||
// {
|
||||
// "src": "/images/screenshot1.png",
|
||||
// "type": "image/png",
|
||||
// "sizes": "540x720"
|
||||
// },
|
||||
// {
|
||||
// "src": "/images/screenshot2.jpg",
|
||||
// "type": "image/jpg",
|
||||
// "sizes": "540x720"
|
||||
// }
|
||||
// ]
|
||||
// }
|
|
@ -1,48 +1,7 @@
|
|||
///! Middleware for the tide web server
|
||||
|
||||
//TODO: decide if this is still needed
|
||||
// #[derive(Default)]
|
||||
// /// Injects the domain_display_name where it needs to
|
||||
// pub struct KanidmDisplayNameMiddleware {
|
||||
// domain_display_name: String,
|
||||
// }
|
||||
|
||||
// // // TODO: finish this for #860
|
||||
// // #[async_trait::async_trait]
|
||||
// // impl<State: Clone + Send + Sync + 'static> tide::Middleware<State> for KanidmDisplayNameMiddleware {
|
||||
// // async fn handle(
|
||||
// // &self,
|
||||
// // request: tide::Request<State>,
|
||||
// // next: tide::Next<'_, State>,
|
||||
// // ) -> tide::Result {
|
||||
// // let mut response = next.run(request).await;
|
||||
// // // grab the body we're intending to return at this point
|
||||
// // let body_str = response.take_body().into_string().await?;
|
||||
// // // update it with the hash
|
||||
// // // TODO: #860 make this a const so we can change it and not typo it later
|
||||
// // response.set_body(body_str.replace(
|
||||
// // "===DOMAIN_DISPLAY_NAME===",
|
||||
// // self.domain_display_name.as_str(),
|
||||
// // ));
|
||||
// // Ok(response)
|
||||
// // }
|
||||
// // }
|
||||
|
||||
// impl KanidmDisplayNameMiddleware {
|
||||
// /// Pulls the domain_display_name from the qs on web server start, so we can
|
||||
// /// set it in pages
|
||||
// pub fn new(domain_display_name: String) -> Self {
|
||||
// KanidmDisplayNameMiddleware {
|
||||
// // TODO: #860 work out how to get this out :D
|
||||
// domain_display_name: domain_display_name,
|
||||
// }
|
||||
// }
|
||||
// }
|
||||
|
||||
#[derive(Default)]
|
||||
/// This tide MiddleWare adds headers like Content-Security-Policy
|
||||
/// and similar families. If it keeps adding more things then
|
||||
/// probably rename the middlewre :)
|
||||
/// probably rename the middleware :)
|
||||
pub struct UIContentSecurityPolicyResponseMiddleware {
|
||||
// The sha384 hash of /pkg/wasmloader.js
|
||||
pub integrity_wasmloader: String,
|
||||
|
|
|
@ -1,30 +1,29 @@
|
|||
mod manifest;
|
||||
mod middleware;
|
||||
mod oauth2;
|
||||
mod v1;
|
||||
|
||||
use self::manifest::manifest;
|
||||
use self::middleware::*;
|
||||
use self::oauth2::*;
|
||||
use self::v1::*;
|
||||
|
||||
use compact_jwt::{Jws, JwsSigner, JwsUnverified, JwsValidator};
|
||||
use kanidm::actors::v1_read::QueryServerReadV1;
|
||||
use kanidm::actors::v1_write::QueryServerWriteV1;
|
||||
use kanidm::config::{ServerRole, TlsConfiguration};
|
||||
use kanidm::prelude::*;
|
||||
use kanidm::status::StatusActor;
|
||||
|
||||
use kanidm::tracing_tree::TreeMiddleware;
|
||||
use regex::Regex;
|
||||
use serde::Serialize;
|
||||
use std::fs::canonicalize;
|
||||
use std::path::PathBuf;
|
||||
use std::str::FromStr;
|
||||
use uuid::Uuid;
|
||||
|
||||
use kanidm::tracing_tree::TreeMiddleware;
|
||||
use tide_compress::CompressMiddleware;
|
||||
use tide_openssl::TlsListener;
|
||||
use tracing::{error, info};
|
||||
|
||||
use compact_jwt::{Jws, JwsSigner, JwsUnverified, JwsValidator};
|
||||
use uuid::Uuid;
|
||||
|
||||
#[derive(Clone)]
|
||||
pub struct AppState {
|
||||
|
@ -183,36 +182,65 @@ pub fn to_tide_response<T: Serialize>(
|
|||
})
|
||||
}
|
||||
|
||||
// Handle the various end points we need to expose
|
||||
/// Returns a generic robots.txt
|
||||
async fn robots_txt(_req: tide::Request<AppState>) -> tide::Result {
|
||||
let mut res = tide::Response::new(200);
|
||||
|
||||
res.set_content_type("text/plain");
|
||||
res.set_body(
|
||||
r#"
|
||||
User-agent: *
|
||||
Disallow: /
|
||||
"#,
|
||||
);
|
||||
Ok(res)
|
||||
}
|
||||
|
||||
/// The web UI at / for Kanidm
|
||||
async fn index_view(req: tide::Request<AppState>) -> tide::Result {
|
||||
let mut res = tide::Response::new(200);
|
||||
let (eventid, hvalue) = req.new_eventid();
|
||||
|
||||
let domain_display_name = req.state().qe_r_ref.get_domain_display_name(eventid).await;
|
||||
|
||||
let mut res = tide::Response::new(200);
|
||||
res.insert_header("X-KANIDM-OPID", hvalue);
|
||||
|
||||
res.set_content_type("text/html;charset=utf-8");
|
||||
|
||||
res.set_body(format!(r#"
|
||||
<!DOCTYPE html>
|
||||
<html lang="en">
|
||||
<head>
|
||||
<meta charset="utf-8"/>
|
||||
<meta name="viewport" content="width=device-width">
|
||||
<title>{}</title>
|
||||
<link rel="stylesheet" href="/pkg/external/bootstrap.min.css" integrity="sha384-EVSTQN3/azprG1Anm3QDgpJLIm9Nao0Yz1ztcQTwFspd3yD65VohhpuuCOmLASjC"/>
|
||||
<link rel="stylesheet" href="/pkg/style.css"/>
|
||||
<script src="/pkg/external/bootstrap.bundle.min.js" integrity="sha384-MrcW6ZMFYlzcLA8Nl+NtUVF0sA7MsXsP1UyJoMp4YLEuNSfAP+JcXn/tWtIaxVXM"></script>
|
||||
<script type="module" type="text/javascript" src="/pkg/wasmloader.js" integrity="sha384-==WASMHASH==">
|
||||
</script>
|
||||
<!DOCTYPE html>
|
||||
<html lang="en">
|
||||
<head>
|
||||
<meta charset="utf-8"/>
|
||||
<meta name="theme-color" content="white" />
|
||||
<meta name="viewport" content="width=device-width" />
|
||||
<title>{}</title>
|
||||
|
||||
<link rel="icon" href="/pkg/img/favicon.png" />
|
||||
</head>
|
||||
<body>
|
||||
</body>
|
||||
</html>
|
||||
"#, domain_display_name.as_str())
|
||||
<link rel="icon" href="/pkg/img/favicon.png" />
|
||||
<link rel="manifest" href="/manifest.webmanifest" />
|
||||
<link rel="apple-touch-icon" href="/pkg/img/logo-256.png" />
|
||||
<link rel="apple-touch-icon" sizes="180x180" href="/pkg/img/logo-180.png" />
|
||||
<link rel="apple-touch-icon" sizes="192x192" href="/pkg/img/logo-192.png" />
|
||||
<link rel="apple-touch-icon" sizes="512x512" href="/pkg/img/logo-square.svg" />
|
||||
<link rel="stylesheet" href="/pkg/external/bootstrap.min.css" integrity="sha384-EVSTQN3/azprG1Anm3QDgpJLIm9Nao0Yz1ztcQTwFspd3yD65VohhpuuCOmLASjC"/>
|
||||
<link rel="stylesheet" href="/pkg/style.css"/>
|
||||
|
||||
<script src="/pkg/external/bootstrap.bundle.min.js" integrity="sha384-MrcW6ZMFYlzcLA8Nl+NtUVF0sA7MsXsP1UyJoMp4YLEuNSfAP+JcXn/tWtIaxVXM"></script>
|
||||
<script type="module" type="text/javascript" src="/pkg/wasmloader.js" integrity="sha384-==WASMHASH=="></script>
|
||||
</head>
|
||||
<body class="flex-column d-flex h-100">
|
||||
<main class="flex-shrink-0 form-signin">
|
||||
<center>
|
||||
<img src="/pkg/img/logo-square.svg" alt="Kanidm" class="kanidm_logo"/>
|
||||
<h3>Kanidm is loading, please wait... </h3>
|
||||
</center>
|
||||
</main>
|
||||
<footer class="footer mt-auto py-3 bg-light text-end">
|
||||
<div class="container">
|
||||
<span class="text-muted">Powered by <a href="https://kanidm.com">Kanidm</a></span>
|
||||
</div>
|
||||
</footer>
|
||||
</body>
|
||||
</html>"#, domain_display_name.as_str()
|
||||
)
|
||||
);
|
||||
|
||||
Ok(res)
|
||||
|
@ -448,6 +476,8 @@ pub fn create_https_server(
|
|||
static_tserver.with(compress_middleware.clone());
|
||||
|
||||
static_tserver.at("/").get(index_view);
|
||||
static_tserver.at("/robots.txt").get(robots_txt);
|
||||
static_tserver.at("/manifest.webmanifest").get(manifest);
|
||||
static_tserver.at("/ui/").get(index_view);
|
||||
static_tserver.at("/ui/*").get(index_view);
|
||||
|
||||
|
@ -749,9 +779,6 @@ pub fn create_https_server(
|
|||
let tlsl = TlsListener::new(address, x_ref);
|
||||
*/
|
||||
|
||||
// adds Content-Security-Policy Headers when running in HTTPS
|
||||
// TODO: make this only apply to /ui/
|
||||
|
||||
tokio::spawn(async move {
|
||||
if let Err(e) = tserver.listen(tlsl).await {
|
||||
error!(
|
||||
|
|
|
@ -7,8 +7,8 @@ fi
|
|||
wasm-pack build ${BUILD_FLAGS} --target web || exit 1
|
||||
|
||||
touch ./pkg/ANYTHING_HERE_WILL_BE_DELETED_ADD_TO_SRC && \
|
||||
rsync --delete-after -av ./src/img/ ./pkg/img/ && \
|
||||
rsync --delete-after -av ./src/external/ ./pkg/external/ && \
|
||||
rsync --delete-after -r --copy-links -v ./src/img/ ./pkg/img/ && \
|
||||
rsync --delete-after -r --copy-links -v ./src/external/ ./pkg/external/ && \
|
||||
cp ./src/style.css ./pkg/style.css && \
|
||||
cp ./src/wasmloader.js ./pkg/wasmloader.js && \
|
||||
rm ./pkg/.gitignore
|
||||
|
|
BIN
kanidmd_web_ui/pkg/img/apple-touch-icon.png
Normal file
After Width: | Height: | Size: 20 KiB |
BIN
kanidmd_web_ui/pkg/img/logo-180.png
Normal file
After Width: | Height: | Size: 13 KiB |
BIN
kanidmd_web_ui/pkg/img/logo-192.png
Normal file
After Width: | Height: | Size: 14 KiB |
BIN
kanidmd_web_ui/pkg/img/logo-256.png
Normal file
After Width: | Height: | Size: 20 KiB |
BIN
kanidmd_web_ui/pkg/img/logo-512.png
Normal file
After Width: | Height: | Size: 48 KiB |
Before Width: | Height: | Size: 798 KiB After Width: | Height: | Size: 16 KiB |
6
kanidmd_web_ui/pkg/kanidmd_web_ui.d.ts
vendored
|
@ -12,9 +12,9 @@ export interface InitOutput {
|
|||
readonly __wbindgen_malloc: (a: number) => number;
|
||||
readonly __wbindgen_realloc: (a: number, b: number, c: number) => number;
|
||||
readonly __wbindgen_export_2: WebAssembly.Table;
|
||||
readonly _dyn_core__ops__function__FnMut___A____Output___R_as_wasm_bindgen__closure__WasmClosure___describe__invoke__hab3be56b8155b388: (a: number, b: number, c: number) => void;
|
||||
readonly _dyn_core__ops__function__Fn__A____Output___R_as_wasm_bindgen__closure__WasmClosure___describe__invoke__h17af29331a011f5b: (a: number, b: number, c: number) => void;
|
||||
readonly _dyn_core__ops__function__FnMut__A____Output___R_as_wasm_bindgen__closure__WasmClosure___describe__invoke__h67ec72bbd39c79bf: (a: number, b: number, c: number) => void;
|
||||
readonly _dyn_core__ops__function__Fn__A____Output___R_as_wasm_bindgen__closure__WasmClosure___describe__invoke__h8142cf0979e67d24: (a: number, b: number, c: number) => void;
|
||||
readonly _dyn_core__ops__function__FnMut__A____Output___R_as_wasm_bindgen__closure__WasmClosure___describe__invoke__hfed1f3471f1b926f: (a: number, b: number, c: number) => void;
|
||||
readonly _dyn_core__ops__function__FnMut___A____Output___R_as_wasm_bindgen__closure__WasmClosure___describe__invoke__h3b7aa7dd2123cac1: (a: number, b: number, c: number) => void;
|
||||
readonly __wbindgen_add_to_stack_pointer: (a: number) => number;
|
||||
readonly __wbindgen_free: (a: number, b: number) => void;
|
||||
readonly __wbindgen_exn_store: (a: number) => void;
|
||||
|
|
|
@ -5,9 +5,9 @@ export function run_app(a: number): void;
|
|||
export function __wbindgen_malloc(a: number): number;
|
||||
export function __wbindgen_realloc(a: number, b: number, c: number): number;
|
||||
export const __wbindgen_export_2: WebAssembly.Table;
|
||||
export function _dyn_core__ops__function__FnMut___A____Output___R_as_wasm_bindgen__closure__WasmClosure___describe__invoke__hab3be56b8155b388(a: number, b: number, c: number): void;
|
||||
export function _dyn_core__ops__function__Fn__A____Output___R_as_wasm_bindgen__closure__WasmClosure___describe__invoke__h17af29331a011f5b(a: number, b: number, c: number): void;
|
||||
export function _dyn_core__ops__function__FnMut__A____Output___R_as_wasm_bindgen__closure__WasmClosure___describe__invoke__h67ec72bbd39c79bf(a: number, b: number, c: number): void;
|
||||
export function _dyn_core__ops__function__Fn__A____Output___R_as_wasm_bindgen__closure__WasmClosure___describe__invoke__h8142cf0979e67d24(a: number, b: number, c: number): void;
|
||||
export function _dyn_core__ops__function__FnMut__A____Output___R_as_wasm_bindgen__closure__WasmClosure___describe__invoke__hfed1f3471f1b926f(a: number, b: number, c: number): void;
|
||||
export function _dyn_core__ops__function__FnMut___A____Output___R_as_wasm_bindgen__closure__WasmClosure___describe__invoke__h3b7aa7dd2123cac1(a: number, b: number, c: number): void;
|
||||
export function __wbindgen_add_to_stack_pointer(a: number): number;
|
||||
export function __wbindgen_free(a: number, b: number): void;
|
||||
export function __wbindgen_exn_store(a: number): void;
|
||||
|
|
|
@ -19,9 +19,8 @@ body {
|
|||
}
|
||||
|
||||
.form-signin {
|
||||
width: 100%;
|
||||
max-width: 330px;
|
||||
padding: 15px;
|
||||
/* width: 100%; */
|
||||
max-width: 680px;
|
||||
margin: auto;
|
||||
}
|
||||
|
||||
|
|
|
@ -150,7 +150,9 @@ impl Component for CredentialResetApp {
|
|||
let next_state = match (msg, &self.state) {
|
||||
(Msg::Ignore, _) => None,
|
||||
(Msg::TokenSubmit, State::TokenInput) => {
|
||||
let token = utils::get_value_from_element_id("autofocus").expect("No token");
|
||||
#[allow(clippy::expect_used)]
|
||||
let token = utils::get_value_from_element_id("autofocus")
|
||||
.expect("Unable to find autofocus element");
|
||||
|
||||
ctx.link().send_future(async {
|
||||
match Self::exchange_intent_token(token).await {
|
||||
|
|
BIN
kanidmd_web_ui/src/img/apple-touch-icon.png
Normal file
After Width: | Height: | Size: 20 KiB |
BIN
kanidmd_web_ui/src/img/logo-180.png
Normal file
After Width: | Height: | Size: 13 KiB |
BIN
kanidmd_web_ui/src/img/logo-192.png
Normal file
After Width: | Height: | Size: 14 KiB |
BIN
kanidmd_web_ui/src/img/logo-256.png
Normal file
After Width: | Height: | Size: 20 KiB |
BIN
kanidmd_web_ui/src/img/logo-512.png
Normal file
After Width: | Height: | Size: 48 KiB |
Before Width: | Height: | Size: 798 KiB After Width: | Height: | Size: 32 B |
1
kanidmd_web_ui/src/img/logo-square.svg
Symbolic link
|
@ -0,0 +1 @@
|
|||
../../../artwork/logo-square.svg
|
Before Width: | Height: | Size: 798 KiB After Width: | Height: | Size: 32 B |
|
@ -43,6 +43,7 @@ enum LoginState {
|
|||
Authenticated,
|
||||
}
|
||||
|
||||
const CLASSES_TO_ADD: &[&str] = &["flex-column", "d-flex", "h-100"];
|
||||
pub enum LoginAppMsg {
|
||||
Input(String),
|
||||
Restart,
|
||||
|
@ -222,7 +223,7 @@ impl LoginApp {
|
|||
</p>
|
||||
</div>
|
||||
<div class="container">
|
||||
<ul style="list-style-type: none;">
|
||||
<ul class="list-unstyled">
|
||||
{ for allowed.iter()
|
||||
.enumerate()
|
||||
.map(|(idx, allow)| self.render_auth_allowed(ctx, idx, allow)) }
|
||||
|
@ -240,7 +241,7 @@ impl LoginApp {
|
|||
</p>
|
||||
</div>
|
||||
<div class="container">
|
||||
<form
|
||||
<form class="row g-3"
|
||||
onsubmit={ ctx.link().callback(|e: FocusEvent| {
|
||||
console::log!("login::view_state -> Password - prevent_default()".to_string());
|
||||
e.prevent_default();
|
||||
|
@ -248,6 +249,7 @@ impl LoginApp {
|
|||
} ) }
|
||||
action="javascript:void(0);"
|
||||
>
|
||||
<div class="col-12">
|
||||
<input
|
||||
id="autofocus"
|
||||
type="password"
|
||||
|
@ -256,7 +258,12 @@ impl LoginApp {
|
|||
oninput={ ctx.link().callback(|e: InputEvent| LoginAppMsg::Input(utils::get_value_from_input_event(e))) }
|
||||
disabled={ !enable }
|
||||
/>
|
||||
<button type="submit" class="btn btn-dark" disabled={ !enable }>{" Submit "}</button>
|
||||
</div>
|
||||
<div class="col-12">
|
||||
<center>
|
||||
<button type="submit" class="btn btn-dark" disabled={ !enable }>{" Submit "}</button>
|
||||
</center>
|
||||
</div>
|
||||
</form>
|
||||
</div>
|
||||
</>
|
||||
|
@ -458,14 +465,16 @@ impl Component for LoginApp {
|
|||
.cookie()
|
||||
.expect_throw("failed to access page cookies");
|
||||
console::log!("cookies".to_string());
|
||||
console::log!(cookie.to_string());
|
||||
console::log!(cookie);
|
||||
|
||||
let state = LoginState::Init(true);
|
||||
// startConfetti();
|
||||
|
||||
if let Err(e) = crate::utils::body().class_list().add_1("form-signin-body") {
|
||||
console::log!(format!("class_list add error -> {:?}", e));
|
||||
};
|
||||
for x in CLASSES_TO_ADD {
|
||||
if let Err(e) = crate::utils::body().class_list().add_1(x) {
|
||||
console::log!(format!("class_list add error -> {:?}", e));
|
||||
};
|
||||
}
|
||||
|
||||
LoginApp {
|
||||
inputvalue,
|
||||
|
@ -767,26 +776,38 @@ impl Component for LoginApp {
|
|||
// TODO: add the domain_display_name here
|
||||
|
||||
html! {
|
||||
<main class="form-signin">
|
||||
<div class="container">
|
||||
<center>
|
||||
<img src="/pkg/img/logo-square.svg" alt="Kanidm" class="kanidm_logo"/>
|
||||
<h2>{ "Kanidm Alpha" } </h2>
|
||||
</center>
|
||||
</div>
|
||||
<>
|
||||
<main class="flex-shrink-0 form-signin">
|
||||
<center>
|
||||
<img src="/pkg/img/logo-square.svg" alt="Kanidm" class="kanidm_logo"/>
|
||||
<h3>{ "Kanidm idm.example.com" } </h3>
|
||||
</center>
|
||||
{ self.view_state(ctx) }
|
||||
</main>
|
||||
}
|
||||
</main>
|
||||
<footer class="footer mt-auto py-3 bg-light text-end">
|
||||
<div class="container">
|
||||
<span class="text-muted">{ "Powered by " }<a href="https://kanidm.com">{ "Kanidm" }</a></span>
|
||||
</div>
|
||||
</footer>
|
||||
</>
|
||||
}
|
||||
}
|
||||
|
||||
fn destroy(&mut self, _ctx: &Context<Self>) {
|
||||
console::log!("login::destroy".to_string());
|
||||
if let Err(e) = crate::utils::body()
|
||||
.class_list()
|
||||
.remove_1("form-signin-body")
|
||||
{
|
||||
console::log!(format!("class_list remove error -> {:?}", e));
|
||||
|
||||
for x in CLASSES_TO_ADD {
|
||||
if let Err(e) = crate::utils::body().class_list().remove_1(x) {
|
||||
console::log!(format!("class_list remove error -> {:?}", e));
|
||||
};
|
||||
}
|
||||
|
||||
// if let Err(e) = crate::utils::body()
|
||||
// .class_list()
|
||||
// .remove_1("form-signin-body")
|
||||
// {
|
||||
// console::log!(format!("class_list remove error -> {:?}", e));
|
||||
// }
|
||||
}
|
||||
|
||||
fn rendered(&mut self, _ctx: &Context<Self>, _first_render: bool) {
|
||||
|
|
|
@ -19,9 +19,8 @@ body {
|
|||
}
|
||||
|
||||
.form-signin {
|
||||
width: 100%;
|
||||
max-width: 330px;
|
||||
padding: 15px;
|
||||
/* width: 100%; */
|
||||
max-width: 680px;
|
||||
margin: auto;
|
||||
}
|
||||
|
||||
|
|
|
@ -15,9 +15,11 @@ use web_sys::{Request, RequestInit, RequestMode, Response};
|
|||
|
||||
mod apps;
|
||||
mod components;
|
||||
mod profile;
|
||||
mod security;
|
||||
|
||||
use apps::AppsApp;
|
||||
use profile::ProfileApp;
|
||||
use security::SecurityApp;
|
||||
|
||||
#[derive(Routable, PartialEq, Clone, Debug, Serialize, Deserialize)]
|
||||
|
@ -25,6 +27,9 @@ pub enum ViewRoute {
|
|||
#[at("/ui/view/apps")]
|
||||
Apps,
|
||||
|
||||
#[at("/ui/view/profile")]
|
||||
Profile,
|
||||
|
||||
#[at("/ui/view/security")]
|
||||
Security,
|
||||
|
||||
|
@ -73,6 +78,7 @@ fn switch(route: &ViewRoute) -> Html {
|
|||
|
||||
match route {
|
||||
ViewRoute::Apps => html! { <AppsApp /> },
|
||||
ViewRoute::Profile => html! { <ProfileApp token={ token } /> },
|
||||
ViewRoute::Security => html! { <SecurityApp token={ token } /> },
|
||||
ViewRoute::NotFound => html! {
|
||||
<Redirect<Route> to={Route::NotFound}/>
|
||||
|
@ -221,6 +227,13 @@ impl ViewsApp {
|
|||
</Link<ViewRoute>>
|
||||
</li>
|
||||
|
||||
<li class="nav-item">
|
||||
<Link<ViewRoute> classes="nav-link" to={ViewRoute::Profile}>
|
||||
<span data-feather="file"></span>
|
||||
{ "Profile" }
|
||||
</Link<ViewRoute>>
|
||||
</li>
|
||||
|
||||
<li class="nav-item">
|
||||
<Link<ViewRoute> classes="nav-link" to={ViewRoute::Security}>
|
||||
<span data-feather="file"></span>
|
||||
|
|
125
kanidmd_web_ui/src/views/profile.rs
Normal file
|
@ -0,0 +1,125 @@
|
|||
// use crate::error::*;
|
||||
// use crate::models;
|
||||
// use crate::utils;
|
||||
use crate::views::ViewProps;
|
||||
|
||||
use compact_jwt::{Jws, JwsUnverified};
|
||||
use gloo::console;
|
||||
use kanidm_proto::v1::UserAuthToken;
|
||||
use std::str::FromStr;
|
||||
use wasm_bindgen::UnwrapThrowExt;
|
||||
use yew::prelude::*;
|
||||
// use web_sys::{Request, RequestInit, RequestMode, Response};
|
||||
|
||||
pub enum Msg {
|
||||
// Nothing
|
||||
}
|
||||
|
||||
// User Profile UI
|
||||
pub struct ProfileApp {}
|
||||
|
||||
impl Component for ProfileApp {
|
||||
type Message = Msg;
|
||||
type Properties = ViewProps;
|
||||
|
||||
fn create(_ctx: &Context<Self>) -> Self {
|
||||
console::log!("views::profile::create");
|
||||
ProfileApp {}
|
||||
}
|
||||
|
||||
fn changed(&mut self, _ctx: &Context<Self>) -> bool {
|
||||
console::log!("views::profile::changed");
|
||||
false
|
||||
}
|
||||
|
||||
fn update(&mut self, _ctx: &Context<Self>, _msg: Self::Message) -> bool {
|
||||
console::log!("views::profile::update");
|
||||
/*
|
||||
match msg {
|
||||
ViewsMsg::Logout => {
|
||||
}
|
||||
}
|
||||
*/
|
||||
true
|
||||
}
|
||||
|
||||
fn rendered(&mut self, _ctx: &Context<Self>, _first_render: bool) {
|
||||
console::log!("views::profile::rendered");
|
||||
}
|
||||
|
||||
/// UI view for the user profile
|
||||
fn view(&self, ctx: &Context<Self>) -> Html {
|
||||
console::log!("views::profile::starting view");
|
||||
|
||||
// Submit a req to init the session.
|
||||
// The uuid we want to submit against - hint, it's us.
|
||||
let token = ctx.props().token.clone();
|
||||
console::log!("token: ", &token);
|
||||
|
||||
let jwtu = JwsUnverified::from_str(&token).expect_throw("Invalid UAT, unable to parse");
|
||||
|
||||
let uat: Jws<UserAuthToken> = jwtu
|
||||
.unsafe_release_without_verification()
|
||||
.expect_throw("Unvalid UAT, unable to release ");
|
||||
|
||||
let id = uat.inner.uuid.to_string();
|
||||
|
||||
console::log!("uuid:", id);
|
||||
// let valid_token = ctx.link().send_future(async {
|
||||
// match Self::fetch_token_valid(id, token).await {
|
||||
// Ok(v) => v,
|
||||
// Err(v) => v.into(),
|
||||
// }
|
||||
// });
|
||||
// console::log!("valid_token: {:?}");
|
||||
|
||||
html! {
|
||||
<>
|
||||
<div class="d-flex justify-content-between flex-wrap flex-md-nowrap align-items-center pt-3 pb-2 mb-3 border-bottom">
|
||||
<h2>{ "Profile" }</h2>
|
||||
</div>
|
||||
<div class="alert alert-warning" role="alert">
|
||||
{ "🦀 Kanidm is still in early Alpha, this interface is a placeholder! " }
|
||||
</div>
|
||||
|
||||
<form class="form-horizontal" role="form">
|
||||
|
||||
<div class="form-group">
|
||||
<label for="legalname">{ "Legal Name" }</label>
|
||||
<input type="legalname" class="form-control" disabled=true id="legalname" value={ "Cheese Bizkit" } />
|
||||
</div>
|
||||
|
||||
<div class="form-group">
|
||||
<label for="username">{ "Username" }</label>
|
||||
<input type="username" class="form-control" disabled=true id="username" value={ "cbizkit" } />
|
||||
</div>
|
||||
|
||||
<div class="form-group">
|
||||
<label for="primary_email">{ "Primary Email" }</label>
|
||||
<input type="primary_email" class="form-control" disabled=true id="primary_email" value={ "cheese-wizz@bizkit.example.com" } />
|
||||
</div>
|
||||
</form>
|
||||
|
||||
<strong>{ "Groups" }</strong>
|
||||
<ul class="list-group">
|
||||
<li class="list-group-item">
|
||||
{"Crab Admins"}
|
||||
// the styling for this is broken because bootstrap's doing inline styles, boo
|
||||
<span class="badge bg-danger">{"HP"}</span>
|
||||
</li>
|
||||
<li class="list-group-item">
|
||||
{"Lobster Wranglers"}
|
||||
</li>
|
||||
</ul>
|
||||
|
||||
<label for="spn">{ "SPN" }</label>
|
||||
<div class="input-group mb-3">
|
||||
<input type="text" id="spn" disabled=true class="form-control" value="cbizkit" aria-label="Recipient's username" aria-describedby="basic-addon2" />
|
||||
<span class="input-group-text" id="basic-addon2">{"@kanidm.example.com"}</span>
|
||||
</div>
|
||||
</>
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
impl ProfileApp {}
|