├── backup
└── .gitignore
├── bin
└── .gitignore
├── frontend_dev
├── src
│ ├── env.d.ts
│ ├── pages
│ │ ├── dashboard.astro
│ │ ├── index.astro
│ │ └── ctf.astro
│ └── components
│ │ ├── login.svelte
│ │ ├── ctfstats.svelte
│ │ ├── globe.jsx
│ │ └── admin.svelte
├── .vscode
│ ├── extensions.json
│ └── launch.json
├── svelte.config.js
├── tsconfig.json
├── .gitignore
├── astro.config.mjs
├── public
│ └── favicon.svg
├── tailwind.config.cjs
├── package.json
└── README.md
├── .DS_Store
├── frontend
├── src
│ ├── app.css
│ ├── main.js
│ ├── App.svelte
│ └── lib
│ │ ├── Index.svelte
│ │ └── Admin.svelte
├── .gitignore
├── index.html
└── dist_collected
│ ├── admin.html
│ ├── index.html
│ ├── assets
│ ├── index-bbff9fea.js
│ ├── index-357cb75c.css
│ └── index-860e7d9b.js
│ └── CTF.html
├── Caddyfile
├── Makefile
├── startup.sh
├── entities
├── backup.go
├── flag.go
├── users.go
├── announcements.go
├── sessions.go
├── points.go
├── startstop.go
└── challenge.go
├── .gitignore
├── servehtml
├── login.go
├── admin.go
└── ctf.go
├── README.md
├── authentication
├── auth.go
├── register.go
└── login.go
├── go.mod
├── main.go
├── ctfsrc
├── flagvalidation.go
├── getchallenge.go
├── challengeupload.go
├── points.go
├── teammanagement.go
├── announcement.go
├── imexport.go
└── startstop.go
├── database
└── db.go
└── go.sum
/backup/.gitignore:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/bin/.gitignore:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/frontend_dev/src/env.d.ts:
--------------------------------------------------------------------------------
1 | ///
days
95 |hours
96 |minutes
97 |seconds
98 | 99 |Login
',u(r,"class","text-gray-300 text-4xl text-center font-bold mb-3 font-mono"),u(p,"class","text-gray-300 font-mono mb-1"),u(p,"for","username"),u(s,"class","rounded-lg h-9 w-full p-2 transition-all bg-black hover:bg-violet-900 text-gray-300"),u(s,"type","text"),u(s,"name","username"),u(s,"id","username"),u(a,"class","text-gray-300 font-mono mt-2 mb-1"),u(a,"for","password"),u(f,"class","rounded-lg h-9 w-full p-2 transition-all bg-black hover:bg-violet-900 text-gray-300"),u(f,"type","password"),u(f,"name","password"),u(f,"id","password"),u(g,"class","bg-gray-900 w-32 h-12 rounded-xl transition-all border-2 hover:border-4 border-violet-500 mt-2"),u(g,"type","submit"),u(i,"class","grid place-items-center"),u(o,"class","w-64"),u(n,"id","body"),u(n,"class","grid w-screen h-screen place-content-center svelte-deiqed")},m(h,L){z(h,t,L),c(t,n),c(n,o),c(o,r),c(o,l),c(o,i),c(i,p),c(i,m),c(i,s),C(s,e[0]),c(i,b),c(i,a),c(i,v),c(i,f),C(f,e[1]),c(i,x),c(i,g),P||(B=[S(s,"input",e[3]),S(f,"input",e[4]),S(g,"click",e[2])],P=!0)},p(h,[L]){L&1&&s.value!==h[0]&&C(s,h[0]),L&2&&f.value!==h[1]&&C(f,h[1])},i:$,o:$,d(h){h&&M(t),P=!1,E(B)}}}function ue(e,t,n){let o,r;function l(){fetch("/login",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({username:o,password:r})}).then(m=>{m.status==200?window.location.href="/ctf":alert("Wrong username or password")})}function i(){o=this.value,n(0,o)}function p(){r=this.value,n(1,r)}return[o,r,l,i,p]}class ae extends V{constructor(t){super(),U(this,t,ue,le,k,{})}}function ce(e){let t,n,o;return n=new ae({}),{c(){t=d("main"),se(n.$$.fragment)},m(r,l){z(r,t,l),Q(n,t,null),o=!0},p:$,i(r){o||(G(n.$$.fragment,r),o=!0)},o(r){oe(n.$$.fragment,r),o=!1},d(r){r&&M(t),R(n)}}}class fe extends V{constructor(t){super(),U(this,t,null,ce,k,{})}}new fe({target:document.getElementById("app")}); 2 | -------------------------------------------------------------------------------- /frontend/dist_collected/assets/index-357cb75c.css: -------------------------------------------------------------------------------- 1 | *,:before,:after{box-sizing:border-box;border-width:0;border-style:solid;border-color:#e5e7eb}:before,:after{--tw-content: ""}html{line-height:1.5;-webkit-text-size-adjust:100%;-moz-tab-size:4;-o-tab-size:4;tab-size:4;font-family:ui-sans-serif,system-ui,-apple-system,BlinkMacSystemFont,Segoe UI,Roboto,Helvetica Neue,Arial,Noto Sans,sans-serif,"Apple Color Emoji","Segoe UI Emoji",Segoe UI Symbol,"Noto Color Emoji";font-feature-settings:normal}body{margin:0;line-height:inherit}hr{height:0;color:inherit;border-top-width:1px}abbr:where([title]){-webkit-text-decoration:underline dotted;text-decoration:underline dotted}h1,h2,h3,h4,h5,h6{font-size:inherit;font-weight:inherit}a{color:inherit;text-decoration:inherit}b,strong{font-weight:bolder}code,kbd,samp,pre{font-family:ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,Liberation Mono,Courier New,monospace;font-size:1em}small{font-size:80%}sub,sup{font-size:75%;line-height:0;position:relative;vertical-align:baseline}sub{bottom:-.25em}sup{top:-.5em}table{text-indent:0;border-color:inherit;border-collapse:collapse}button,input,optgroup,select,textarea{font-family:inherit;font-size:100%;font-weight:inherit;line-height:inherit;color:inherit;margin:0;padding:0}button,select{text-transform:none}button,[type=button],[type=reset],[type=submit]{-webkit-appearance:button;background-color:transparent;background-image:none}:-moz-focusring{outline:auto}:-moz-ui-invalid{box-shadow:none}progress{vertical-align:baseline}::-webkit-inner-spin-button,::-webkit-outer-spin-button{height:auto}[type=search]{-webkit-appearance:textfield;outline-offset:-2px}::-webkit-search-decoration{-webkit-appearance:none}::-webkit-file-upload-button{-webkit-appearance:button;font:inherit}summary{display:list-item}blockquote,dl,dd,h1,h2,h3,h4,h5,h6,hr,figure,p,pre{margin:0}fieldset{margin:0;padding:0}legend{padding:0}ol,ul,menu{list-style:none;margin:0;padding:0}textarea{resize:vertical}input::-moz-placeholder,textarea::-moz-placeholder{opacity:1;color:#9ca3af}input::placeholder,textarea::placeholder{opacity:1;color:#9ca3af}button,[role=button]{cursor:pointer}:disabled{cursor:default}img,svg,video,canvas,audio,iframe,embed,object{display:block;vertical-align:middle}img,video{max-width:100%;height:auto}[hidden]{display:none}*,:before,:after{--tw-border-spacing-x: 0;--tw-border-spacing-y: 0;--tw-translate-x: 0;--tw-translate-y: 0;--tw-rotate: 0;--tw-skew-x: 0;--tw-skew-y: 0;--tw-scale-x: 1;--tw-scale-y: 1;--tw-pan-x: ;--tw-pan-y: ;--tw-pinch-zoom: ;--tw-scroll-snap-strictness: proximity;--tw-ordinal: ;--tw-slashed-zero: ;--tw-numeric-figure: ;--tw-numeric-spacing: ;--tw-numeric-fraction: ;--tw-ring-inset: ;--tw-ring-offset-width: 0px;--tw-ring-offset-color: #fff;--tw-ring-color: rgb(59 130 246 / .5);--tw-ring-offset-shadow: 0 0 #0000;--tw-ring-shadow: 0 0 #0000;--tw-shadow: 0 0 #0000;--tw-shadow-colored: 0 0 #0000;--tw-blur: ;--tw-brightness: ;--tw-contrast: ;--tw-grayscale: ;--tw-hue-rotate: ;--tw-invert: ;--tw-saturate: ;--tw-sepia: ;--tw-drop-shadow: ;--tw-backdrop-blur: ;--tw-backdrop-brightness: ;--tw-backdrop-contrast: ;--tw-backdrop-grayscale: ;--tw-backdrop-hue-rotate: ;--tw-backdrop-invert: ;--tw-backdrop-opacity: ;--tw-backdrop-saturate: ;--tw-backdrop-sepia: }::backdrop{--tw-border-spacing-x: 0;--tw-border-spacing-y: 0;--tw-translate-x: 0;--tw-translate-y: 0;--tw-rotate: 0;--tw-skew-x: 0;--tw-skew-y: 0;--tw-scale-x: 1;--tw-scale-y: 1;--tw-pan-x: ;--tw-pan-y: ;--tw-pinch-zoom: ;--tw-scroll-snap-strictness: proximity;--tw-ordinal: ;--tw-slashed-zero: ;--tw-numeric-figure: ;--tw-numeric-spacing: ;--tw-numeric-fraction: ;--tw-ring-inset: ;--tw-ring-offset-width: 0px;--tw-ring-offset-color: #fff;--tw-ring-color: rgb(59 130 246 / .5);--tw-ring-offset-shadow: 0 0 #0000;--tw-ring-shadow: 0 0 #0000;--tw-shadow: 0 0 #0000;--tw-shadow-colored: 0 0 #0000;--tw-blur: ;--tw-brightness: ;--tw-contrast: ;--tw-grayscale: ;--tw-hue-rotate: ;--tw-invert: ;--tw-saturate: ;--tw-sepia: ;--tw-drop-shadow: ;--tw-backdrop-blur: ;--tw-backdrop-brightness: ;--tw-backdrop-contrast: ;--tw-backdrop-grayscale: ;--tw-backdrop-hue-rotate: ;--tw-backdrop-invert: ;--tw-backdrop-opacity: ;--tw-backdrop-saturate: ;--tw-backdrop-sepia: }.mb-1{margin-bottom:.25rem}.mb-3{margin-bottom:.75rem}.ml-10{margin-left:2.5rem}.ml-2{margin-left:.5rem}.ml-5{margin-left:1.25rem}.mr-4{margin-right:1rem}.mt-1{margin-top:.25rem}.mt-10{margin-top:2.5rem}.mt-2{margin-top:.5rem}.mt-3{margin-top:.75rem}.mt-4{margin-top:1rem}.mt-5{margin-top:1.25rem}.mt-8{margin-top:2rem}.flex{display:flex}.grid{display:grid}.hidden{display:none}.h-10{height:2.5rem}.h-12{height:3rem}.h-20{height:5rem}.h-64{height:16rem}.h-9{height:2.25rem}.h-full{height:100%}.h-screen{height:100vh}.w-3\/4{width:75%}.w-32{width:8rem}.w-40{width:10rem}.w-48{width:12rem}.w-52{width:13rem}.w-56{width:14rem}.w-64{width:16rem}.w-7\/12{width:58.333333%}.w-full{width:100%}.w-screen{width:100vw}.grid-cols-1{grid-template-columns:repeat(1,minmax(0,1fr))}.flex-col{flex-direction:column}.place-content-center{place-content:center}.place-content-start{place-content:start}.place-content-end{place-content:end}.place-items-center{place-items:center}.justify-center{justify-content:center}.overflow-hidden{overflow:hidden}.rounded-full{border-radius:9999px}.rounded-lg{border-radius:.5rem}.rounded-xl{border-radius:.75rem}.border{border-width:1px}.border-2{border-width:2px}.border-violet-500{--tw-border-opacity: 1;border-color:rgb(139 92 246 / var(--tw-border-opacity))}.bg-black{--tw-bg-opacity: 1;background-color:rgb(0 0 0 / var(--tw-bg-opacity))}.bg-gray-800{--tw-bg-opacity: 1;background-color:rgb(31 41 55 / var(--tw-bg-opacity))}.bg-gray-900{--tw-bg-opacity: 1;background-color:rgb(17 24 39 / var(--tw-bg-opacity))}.bg-violet-700{--tw-bg-opacity: 1;background-color:rgb(109 40 217 / var(--tw-bg-opacity))}.bg-violet-800{--tw-bg-opacity: 1;background-color:rgb(91 33 182 / var(--tw-bg-opacity))}.fill-gray-300{fill:#d1d5db}.p-10{padding:2.5rem}.p-2{padding:.5rem}.p-3{padding:.75rem}.pt-7{padding-top:1.75rem}.text-center{text-align:center}.font-mono{font-family:ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,Liberation Mono,Courier New,monospace}.text-2xl{font-size:1.5rem;line-height:2rem}.text-4xl{font-size:2.25rem;line-height:2.5rem}.text-xl{font-size:1.25rem;line-height:1.75rem}.font-bold{font-weight:700}.text-gray-300{--tw-text-opacity: 1;color:rgb(209 213 219 / var(--tw-text-opacity))}.text-gray-50{--tw-text-opacity: 1;color:rgb(249 250 251 / var(--tw-text-opacity))}.text-white{--tw-text-opacity: 1;color:rgb(255 255 255 / var(--tw-text-opacity))}.outline-none{outline:2px solid transparent;outline-offset:2px}.outline{outline-style:solid}.outline-violet-500{outline-color:#8b5cf6}.transition-all{transition-property:all;transition-timing-function:cubic-bezier(.4,0,.2,1);transition-duration:.15s}.hover\:border-4:hover{border-width:4px}.hover\:bg-violet-700:hover{--tw-bg-opacity: 1;background-color:rgb(109 40 217 / var(--tw-bg-opacity))}.hover\:bg-violet-900:hover{--tw-bg-opacity: 1;background-color:rgb(76 29 149 / var(--tw-bg-opacity))}@media (min-width: 1024px){.lg\:pl-64{padding-left:16rem}.lg\:pr-64{padding-right:16rem}}#body.svelte-deiqed{background-color:#161616;opacity:.8;background-size:10px 10px;background-image:repeating-linear-gradient(45deg,#2e2e2e 0,#2e2e2e 1px,#040404 0,#010101 50%)} 2 | -------------------------------------------------------------------------------- /go.sum: -------------------------------------------------------------------------------- 1 | github.com/bytedance/sonic v1.5.0/go.mod h1:ED5hyg4y6t3/9Ku1R6dU/4KyJ48DZ4jPhfY1O2AihPM= 2 | github.com/bytedance/sonic v1.8.3 h1:pf6fGl5eqWYKkx1RcD4qpuX+BIUaduv/wTm5ekWJ80M= 3 | github.com/bytedance/sonic v1.8.3/go.mod h1:i736AoUSYt75HyZLoJW9ERYxcy6eaN6h4BZXU064P/U= 4 | github.com/chenzhuoyu/base64x v0.0.0-20211019084208-fb5309c8db06/go.mod h1:DH46F32mSOjUmXrMHnKwZdA8wcEefY7UVqBKYGjpdQY= 5 | github.com/chenzhuoyu/base64x v0.0.0-20221115062448-fe3a3abad311 h1:qSGYFH7+jGhDF8vLC+iwCD4WpbV1EBDSzWkJODFLams= 6 | github.com/chenzhuoyu/base64x v0.0.0-20221115062448-fe3a3abad311/go.mod h1:b583jCggY9gE99b6G5LEC39OIiVsWj+R97kbl5odCEk= 7 | github.com/creack/pty v1.1.9/go.mod h1:oKZEueFk5CKHvIhNR5MUki03XCEU+Q6VDXinZuGJ33E= 8 | github.com/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= 9 | github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= 10 | github.com/gin-contrib/gzip v0.0.6 h1:NjcunTcGAj5CO1gn4N8jHOSIeRFHIbn51z6K+xaN4d4= 11 | github.com/gin-contrib/gzip v0.0.6/go.mod h1:QOJlmV2xmayAjkNS2Y8NQsMneuRShOU/kjovCXNuzzk= 12 | github.com/gin-contrib/sse v0.1.0 h1:Y/yl/+YNO8GZSjAhjMsSuLt29uWRFHdHYUb5lYOV9qE= 13 | github.com/gin-contrib/sse v0.1.0/go.mod h1:RHrZQHXnP2xjPF+u1gW/2HnVO7nvIa9PG3Gm+fLHvGI= 14 | github.com/gin-gonic/gin v1.8.1/go.mod h1:ji8BvRH1azfM+SYow9zQ6SZMvR8qOMZHmsCuWR9tTTk= 15 | github.com/gin-gonic/gin v1.9.0 h1:OjyFBKICoexlu99ctXNR2gg+c5pKrKMuyjgARg9qeY8= 16 | github.com/gin-gonic/gin v1.9.0/go.mod h1:W1Me9+hsUSyj3CePGrd1/QrKJMSJ1Tu/0hFEH89961k= 17 | github.com/go-playground/assert/v2 v2.0.1/go.mod h1:VDjEfimB/XKnb+ZQfWdccd7VUvScMdVu0Titje2rxJ4= 18 | github.com/go-playground/locales v0.14.0/go.mod h1:sawfccIbzZTqEDETgFXqTho0QybSa7l++s0DH+LDiLs= 19 | github.com/go-playground/locales v0.14.1 h1:EWaQ/wswjilfKLTECiXz7Rh+3BjFhfDFKv/oXslEjJA= 20 | github.com/go-playground/locales v0.14.1/go.mod h1:hxrqLVvrK65+Rwrd5Fc6F2O76J/NuW9t0sjnWqG1slY= 21 | github.com/go-playground/universal-translator v0.18.0/go.mod h1:UvRDBj+xPUEGrFYl+lu/H90nyDXpg0fqeB/AQUGNTVA= 22 | github.com/go-playground/universal-translator v0.18.1 h1:Bcnm0ZwsGyWbCzImXv+pAJnYK9S473LQFuzCbDbfSFY= 23 | github.com/go-playground/universal-translator v0.18.1/go.mod h1:xekY+UJKNuX9WP91TpwSH2VMlDf28Uj24BCp08ZFTUY= 24 | github.com/go-playground/validator/v10 v10.10.0/go.mod h1:74x4gJWsvQexRdW8Pn3dXSGrTK4nAUsbPlLADvpJkos= 25 | github.com/go-playground/validator/v10 v10.11.2 h1:q3SHpufmypg+erIExEKUmsgmhDTyhcJ38oeKGACXohU= 26 | github.com/go-playground/validator/v10 v10.11.2/go.mod h1:NieE624vt4SCTJtD87arVLvdmjPAeV8BQlHtMnw9D7s= 27 | github.com/goccy/go-json v0.9.7/go.mod h1:6MelG93GURQebXPDq3khkgXZkazVtN9CRI+MGFi0w8I= 28 | github.com/goccy/go-json v0.10.0 h1:mXKd9Qw4NuzShiRlOXKews24ufknHO7gx30lsDyokKA= 29 | github.com/goccy/go-json v0.10.0/go.mod h1:6MelG93GURQebXPDq3khkgXZkazVtN9CRI+MGFi0w8I= 30 | github.com/golang/protobuf v1.5.0/go.mod h1:FsONVRAS9T7sI+LIUmWTfcYkHO4aIWwzhcaSAoJOfIk= 31 | github.com/google/go-cmp v0.5.5/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= 32 | github.com/google/gofuzz v1.0.0/go.mod h1:dBl0BpW6vV/+mYPU4Po3pmUjxk6FQPldtuIdl/M65Eg= 33 | github.com/google/uuid v1.3.0 h1:t6JiXgmwXMjEs8VusXIJk2BXHsn+wx8BZdTaoZ5fu7I= 34 | github.com/google/uuid v1.3.0/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo= 35 | github.com/jackc/pgpassfile v1.0.0 h1:/6Hmqy13Ss2zCq62VdNG8tM1wchn8zjSGOBJ6icpsIM= 36 | github.com/jackc/pgpassfile v1.0.0/go.mod h1:CEx0iS5ambNFdcRtxPj5JhEz+xB6uRky5eyVu/W2HEg= 37 | github.com/jackc/pgservicefile v0.0.0-20221227161230-091c0ba34f0a h1:bbPeKD0xmW/Y25WS6cokEszi5g+S0QxI/d45PkRi7Nk= 38 | github.com/jackc/pgservicefile v0.0.0-20221227161230-091c0ba34f0a/go.mod h1:5TJZWKEWniPve33vlWYSoGYefn3gLQRzjfDlhSJ9ZKM= 39 | github.com/jackc/pgx/v5 v5.3.0/go.mod h1:t3JDKnCBlYIc0ewLF0Q7B8MXmoIaBOZj/ic7iHozM/8= 40 | github.com/jackc/pgx/v5 v5.3.1 h1:Fcr8QJ1ZeLi5zsPZqQeUZhNhxfkkKBOgJuYkJHoBOtU= 41 | github.com/jackc/pgx/v5 v5.3.1/go.mod h1:t3JDKnCBlYIc0ewLF0Q7B8MXmoIaBOZj/ic7iHozM/8= 42 | github.com/jackc/puddle/v2 v2.2.0/go.mod h1:vriiEXHvEE654aYKXXjOvZM39qJ0q+azkZFrfEOc3H4= 43 | github.com/jinzhu/inflection v1.0.0 h1:K317FqzuhWc8YvSVlFMCCUb36O/S9MCKRDI7QkRKD/E= 44 | github.com/jinzhu/inflection v1.0.0/go.mod h1:h+uFLlag+Qp1Va5pdKtLDYj+kHp5pxUVkryuEj+Srlc= 45 | github.com/jinzhu/now v1.1.5 h1:/o9tlHleP7gOFmsnYNz3RGnqzefHA47wQpKrrdTIwXQ= 46 | github.com/jinzhu/now v1.1.5/go.mod h1:d3SSVoowX0Lcu0IBviAWJpolVfI5UJVZZ7cO71lE/z8= 47 | github.com/json-iterator/go v1.1.12 h1:PV8peI4a0ysnczrg+LtxykD8LfKY9ML6u2jnxaEnrnM= 48 | github.com/json-iterator/go v1.1.12/go.mod h1:e30LSqwooZae/UwlEbR2852Gd8hjQvJoHmT4TnhNGBo= 49 | github.com/klauspost/cpuid/v2 v2.0.9/go.mod h1:FInQzS24/EEf25PyTYn52gqo7WaD8xa0213Md/qVLRg= 50 | github.com/klauspost/cpuid/v2 v2.2.4 h1:acbojRNwl3o09bUq+yDCtZFc1aiwaAAxtcn8YkZXnvk= 51 | github.com/klauspost/cpuid/v2 v2.2.4/go.mod h1:RVVoqg1df56z8g3pUjL/3lE5UfnlrJX8tyFgg4nqhuY= 52 | github.com/kr/pretty v0.1.0/go.mod h1:dAy3ld7l9f0ibDNOQOHHMYYIIbhfbHSm3C4ZsoJORNo= 53 | github.com/kr/pretty v0.2.1/go.mod h1:ipq/a2n7PKx3OHsz4KJII5eveXtPO4qwEXGdVfWzfnI= 54 | github.com/kr/pretty v0.3.0/go.mod h1:640gp4NfQd8pI5XOwp5fnNeVWj67G7CFk/SaSQn7NBk= 55 | github.com/kr/pty v1.1.1/go.mod h1:pFQYn66WHrOpPYNljwOMqo10TkYh1fy3cYio2l3bCsQ= 56 | github.com/kr/text v0.1.0/go.mod h1:4Jbv+DJW3UT/LiOwJeYQe1efqtUx/iVham/4vfdArNI= 57 | github.com/kr/text v0.2.0/go.mod h1:eLer722TekiGuMkidMxC/pM04lWEeraHUUmBw8l2grE= 58 | github.com/leodido/go-urn v1.2.1/go.mod h1:zt4jvISO2HfUBqxjfIshjdMTYS56ZS/qv49ictyFfxY= 59 | github.com/leodido/go-urn v1.2.2 h1:7z68G0FCGvDk646jz1AelTYNYWrTNm0bEcFAo147wt4= 60 | github.com/leodido/go-urn v1.2.2/go.mod h1:kUaIbLZWttglzwNuG0pgsh5vuV6u2YcGBYz1hIPjtOQ= 61 | github.com/mattn/go-isatty v0.0.14/go.mod h1:7GGIvUiUoEMVVmxf/4nioHXj79iQHKdU27kJ6hsGG94= 62 | github.com/mattn/go-isatty v0.0.17 h1:BTarxUcIeDqL27Mc+vyvdWYSL28zpIhv3RoTdsLMPng= 63 | github.com/mattn/go-isatty v0.0.17/go.mod h1:kYGgaQfpe5nmfYZH+SKPsOc2e4SrIfOl2e/yFXSvRLM= 64 | github.com/modern-go/concurrent v0.0.0-20180228061459-e0a39a4cb421/go.mod h1:6dJC0mAP4ikYIbvyc7fijjWJddQyLn8Ig3JB5CqoB9Q= 65 | github.com/modern-go/concurrent v0.0.0-20180306012644-bacd9c7ef1dd h1:TRLaZ9cD/w8PVh93nsPXa1VrQ6jlwL5oN8l14QlcNfg= 66 | github.com/modern-go/concurrent v0.0.0-20180306012644-bacd9c7ef1dd/go.mod h1:6dJC0mAP4ikYIbvyc7fijjWJddQyLn8Ig3JB5CqoB9Q= 67 | github.com/modern-go/reflect2 v1.0.2 h1:xBagoLtFs94CBntxluKeaWgTMpvLxC4ur3nMaC9Gz0M= 68 | github.com/modern-go/reflect2 v1.0.2/go.mod h1:yWuevngMOJpCy52FWWMvUC8ws7m/LJsjYzDa0/r8luk= 69 | github.com/pelletier/go-toml/v2 v2.0.1/go.mod h1:r9LEWfGN8R5k0VXJ+0BkIe7MYkRdwZOjgMj2KwnJFUo= 70 | github.com/pelletier/go-toml/v2 v2.0.7 h1:muncTPStnKRos5dpVKULv2FVd4bMOhNePj9CjgDb8Us= 71 | github.com/pelletier/go-toml/v2 v2.0.7/go.mod h1:eumQOmlWiOPt5WriQQqoM5y18pDHwha2N+QD+EUNTek= 72 | github.com/pkg/diff v0.0.0-20210226163009-20ebb0f2a09e/go.mod h1:pJLUxLENpZxwdsKMEsNbx1VGcRFpLqf3715MtcvvzbA= 73 | github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4= 74 | github.com/rogpeppe/go-internal v1.6.1/go.mod h1:xXDCJY+GAPziupqXw64V24skbSoqbTEfhy4qGm1nDQc= 75 | github.com/rogpeppe/go-internal v1.8.0/go.mod h1:WmiCO8CzOY8rg0OYDC4/i/2WRWAB6poM+XZ2dLUbcbE= 76 | github.com/rwtodd/Go.Sed v0.0.0-20210816025313-55464686f9ef/go.mod h1:8AEUvGVi2uQ5b24BIhcr0GCcpd/RNAFWaN2CJFrWIIQ= 77 | github.com/stretchr/objx v0.1.0/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME= 78 | github.com/stretchr/objx v0.4.0/go.mod h1:YvHI0jy2hoMjB+UWwv71VJQ9isScKT/TqJzVSSt89Yw= 79 | github.com/stretchr/objx v0.5.0/go.mod h1:Yh+to48EsGEfYuaHDzXPcE3xhTkx73EhmCGUpEOglKo= 80 | github.com/stretchr/testify v1.3.0/go.mod h1:M5WIy9Dh21IEIfnGCwXGc5bZfKNJtfHm1UVUgZn+9EI= 81 | github.com/stretchr/testify v1.6.1/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg= 82 | github.com/stretchr/testify v1.7.0/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg= 83 | github.com/stretchr/testify v1.7.1/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg= 84 | github.com/stretchr/testify v1.8.0/go.mod h1:yNjHg4UonilssWZ8iaSj1OCr/vHnekPRkoO+kdMU+MU= 85 | github.com/stretchr/testify v1.8.1/go.mod h1:w2LPCIKwWwSfY2zedu0+kehJoqGctiVI29o6fzry7u4= 86 | github.com/stretchr/testify v1.8.2/go.mod h1:w2LPCIKwWwSfY2zedu0+kehJoqGctiVI29o6fzry7u4= 87 | github.com/twitchyliquid64/golang-asm v0.15.1 h1:SU5vSMR7hnwNxj24w34ZyCi/FmDZTkS4MhqMhdFk5YI= 88 | github.com/twitchyliquid64/golang-asm v0.15.1/go.mod h1:a1lVb/DtPvCB8fslRZhAngC2+aY1QWCk3Cedj/Gdt08= 89 | github.com/ugorji/go v1.2.7/go.mod h1:nF9osbDWLy6bDVv/Rtoh6QgnvNDpmCalQV5urGCCS6M= 90 | github.com/ugorji/go/codec v1.2.7/go.mod h1:WGN1fab3R1fzQlVQTkfxVtIBhWDRqOviHU95kRgeqEY= 91 | github.com/ugorji/go/codec v1.2.10 h1:eimT6Lsr+2lzmSZxPhLFoOWFmQqwk0fllJJ5hEbTXtQ= 92 | github.com/ugorji/go/codec v1.2.10/go.mod h1:UNopzCgEMSXjBc6AOMqYvWC1ktqTAfzJZUZgYf6w6lg= 93 | github.com/yuin/goldmark v1.4.13/go.mod h1:6yULJ656Px+3vBD8DxQVa3kxgyrAnzto9xy5taEt/CY= 94 | golang.org/x/arch v0.0.0-20210923205945-b76863e36670/go.mod h1:5om86z9Hs0C8fWVUuoMHwpExlXzs5Tkyp9hOrfG7pp8= 95 | golang.org/x/arch v0.2.0 h1:W1sUEHXiJTfjaFJ5SLo0N6lZn+0eO5gWD1MFeTGqQEY= 96 | golang.org/x/arch v0.2.0/go.mod h1:5om86z9Hs0C8fWVUuoMHwpExlXzs5Tkyp9hOrfG7pp8= 97 | golang.org/x/crypto v0.0.0-20190308221718-c2843e01d9a2/go.mod h1:djNgcEr1/C05ACkg1iLfiJU5Ep61QUkGW8qpdssI0+w= 98 | golang.org/x/crypto v0.0.0-20210711020723-a769d52b0f97/go.mod h1:GvvjBRRGRdwPK5ydBHafDWAxML/pGHZbMvKqRZ5+Abc= 99 | golang.org/x/crypto v0.0.0-20210921155107-089bfa567519/go.mod h1:GvvjBRRGRdwPK5ydBHafDWAxML/pGHZbMvKqRZ5+Abc= 100 | golang.org/x/crypto v0.6.0 h1:qfktjS5LUO+fFKeJXZ+ikTRijMmljikvG68fpMMruSc= 101 | golang.org/x/crypto v0.6.0/go.mod h1:OFC/31mSvZgRz0V1QTNCzfAI1aIRzbiufJtkMIlEp58= 102 | golang.org/x/crypto v0.9.0 h1:LF6fAI+IutBocDJ2OT0Q1g8plpYljMZ4+lty+dsqw3g= 103 | golang.org/x/crypto v0.9.0/go.mod h1:yrmDGqONDYtNj3tH8X9dzUun2m2lzPa9ngI6/RUPGR0= 104 | golang.org/x/mod v0.6.0-dev.0.20220419223038-86c51ed26bb4/go.mod h1:jJ57K6gSWd91VN4djpZkiMVwK6gcyfeH4XE8wZrZaV4= 105 | golang.org/x/net v0.0.0-20190620200207-3b0461eec859/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= 106 | golang.org/x/net v0.0.0-20210226172049-e18ecbb05110/go.mod h1:m0MpNAwzfU5UDzcl9v0D8zg8gWTRqZa9RBIspLL5mdg= 107 | golang.org/x/net v0.0.0-20220722155237-a158d28d115b/go.mod h1:XRhObCWvk6IyKnWLug+ECip1KBveYUHfp+8e9klMJ9c= 108 | golang.org/x/net v0.6.0/go.mod h1:2Tu9+aMcznHK/AK1HMvgo6xiTLG5rD5rZLDS+rp2Bjs= 109 | golang.org/x/net v0.7.0 h1:rJrUqqhjsgNp7KqAIc25s9pZnjU7TUcSY7HcVZjdn1g= 110 | golang.org/x/net v0.7.0/go.mod h1:2Tu9+aMcznHK/AK1HMvgo6xiTLG5rD5rZLDS+rp2Bjs= 111 | golang.org/x/net v0.10.0 h1:X2//UzNDwYmtCLn7To6G58Wr6f5ahEAQgKNzv9Y951M= 112 | golang.org/x/net v0.10.0/go.mod h1:0qNGK6F8kojg2nk9dLZ2mShWaEBan6FAoqfSigmmuDg= 113 | golang.org/x/sync v0.0.0-20190423024810-112230192c58/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= 114 | golang.org/x/sync v0.0.0-20220722155255-886fb9371eb4/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= 115 | golang.org/x/sync v0.1.0/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= 116 | golang.org/x/sys v0.0.0-20190215142949-d0b11bdaac8a/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= 117 | golang.org/x/sys v0.0.0-20201119102817-f84b799fce68/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= 118 | golang.org/x/sys v0.0.0-20210615035016-665e8c7367d1/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= 119 | golang.org/x/sys v0.0.0-20210630005230-0f9fa26af87c/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= 120 | golang.org/x/sys v0.0.0-20210806184541-e5e7981a1069/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= 121 | golang.org/x/sys v0.0.0-20220520151302-bc2c85ada10a/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= 122 | golang.org/x/sys v0.0.0-20220704084225-05e143d24a9e/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= 123 | golang.org/x/sys v0.0.0-20220722155257-8c9f86f7a55f/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= 124 | golang.org/x/sys v0.0.0-20220811171246-fbc7d0a398ab/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= 125 | golang.org/x/sys v0.5.0 h1:MUK/U/4lj1t1oPg0HfuXDN/Z1wv31ZJ/YcPiGccS4DU= 126 | golang.org/x/sys v0.5.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= 127 | golang.org/x/sys v0.8.0 h1:EBmGv8NaZBZTWvrbjNoL6HVt+IVy3QDQpJs7VRIw3tU= 128 | golang.org/x/sys v0.8.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= 129 | golang.org/x/term v0.0.0-20201126162022-7de9c90e9dd1/go.mod h1:bj7SfCRtBDWHUb9snDiAeCFNEtKQo2Wmx5Cou7ajbmo= 130 | golang.org/x/term v0.0.0-20210927222741-03fcf44c2211/go.mod h1:jbD1KX2456YbFQfuXm/mYQcufACuNUgVhRMnK/tPxf8= 131 | golang.org/x/term v0.5.0/go.mod h1:jMB1sMXY+tzblOD4FWmEbocvup2/aLOaQEp7JmGp78k= 132 | golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= 133 | golang.org/x/text v0.3.3/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ= 134 | golang.org/x/text v0.3.6/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ= 135 | golang.org/x/text v0.3.7/go.mod h1:u+2+/6zg+i71rQMx5EYifcz6MCKuco9NR6JIITiCfzQ= 136 | golang.org/x/text v0.7.0 h1:4BRB4x83lYWy72KwLD/qYDuTu7q9PjSagHvijDw7cLo= 137 | golang.org/x/text v0.7.0/go.mod h1:mrYo+phRRbMaCq/xk9113O4dZlRixOauAjOtrjsXDZ8= 138 | golang.org/x/text v0.9.0 h1:2sjJmO8cDvYveuX97RDLsxlyUxLl+GHoLxBiRdHllBE= 139 | golang.org/x/text v0.9.0/go.mod h1:e1OnstbJyHTd6l/uOt8jFFHp6TRDWZR/bV3emEE/zU8= 140 | golang.org/x/tools v0.0.0-20180917221912-90fa682c2a6e/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= 141 | golang.org/x/tools v0.0.0-20191119224855-298f0cb1881e/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= 142 | golang.org/x/tools v0.1.12/go.mod h1:hNGJHUnrk76NpqgfD5Aqm5Crs+Hm0VOH/i9J2+nxYbc= 143 | golang.org/x/xerrors v0.0.0-20190717185122-a985d3407aa7/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= 144 | golang.org/x/xerrors v0.0.0-20191204190536-9bdfabe68543/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= 145 | google.golang.org/protobuf v1.26.0-rc.1/go.mod h1:jlhhOSvTdKEhbULTjvd4ARK9grFBp09yW+WbY/TyQbw= 146 | google.golang.org/protobuf v1.28.0/go.mod h1:HV8QOd/L58Z+nl8r43ehVNZIU/HEI6OcFqwMG9pJV4I= 147 | google.golang.org/protobuf v1.28.1 h1:d0NfwRgPtno5B1Wa6L2DAG+KivqkdutMf1UhdNx175w= 148 | google.golang.org/protobuf v1.28.1/go.mod h1:HV8QOd/L58Z+nl8r43ehVNZIU/HEI6OcFqwMG9pJV4I= 149 | gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= 150 | gopkg.in/check.v1 v1.0.0-20180628173108-788fd7840127/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= 151 | gopkg.in/check.v1 v1.0.0-20201130134442-10cb98267c6c/go.mod h1:JHkPIbrfpd72SG/EVd6muEfDQjcINNoR0C8j2r3qZ4Q= 152 | gopkg.in/errgo.v2 v2.1.0/go.mod h1:hNsd1EY+bozCKY1Ytp96fpM3vjJbqLJn88ws8XvfDNI= 153 | gopkg.in/yaml.v2 v2.4.0/go.mod h1:RDklbk79AGWmwhnvt/jBztapEOGDOx6ZbXqjP6csGnQ= 154 | gopkg.in/yaml.v3 v3.0.0-20200313102051-9f266ea9e77c/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM= 155 | gopkg.in/yaml.v3 v3.0.0-20210107192922-496545a6307b/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM= 156 | gopkg.in/yaml.v3 v3.0.1 h1:fxVm/GzAzEWqLHuvctI91KS9hhNmmWOoWu0XTYJS7CA= 157 | gopkg.in/yaml.v3 v3.0.1/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM= 158 | gorm.io/driver/postgres v1.5.0 h1:u2FXTy14l45qc3UeCJ7QaAXZmZfDDv0YrthvmRq1l0U= 159 | gorm.io/driver/postgres v1.5.0/go.mod h1:FUZXzO+5Uqg5zzwzv4KK49R8lvGIyscBOqYrtI1Ce9A= 160 | gorm.io/gorm v1.24.7-0.20230306060331-85eaf9eeda11/go.mod h1:L4uxeKpfBml98NYqVqwAdmV1a2nBtAec/cf3fpucW/k= 161 | gorm.io/gorm v1.25.1 h1:nsSALe5Pr+cM3V1qwwQ7rOkw+6UeLrX5O4v3llhHa64= 162 | gorm.io/gorm v1.25.1/go.mod h1:L4uxeKpfBml98NYqVqwAdmV1a2nBtAec/cf3fpucW/k= 163 | rsc.io/pdf v0.1.1/go.mod h1:n8OzWcQ6Sp37PL01nO98y4iUCRdTGarVfzxY20ICaU4= 164 | -------------------------------------------------------------------------------- /frontend_dev/src/components/globe.jsx: -------------------------------------------------------------------------------- 1 | 2 | import React, { useState, useEffect, createElement } from 'react'; 3 | import Globe from 'react-globe.gl'; 4 | 5 | let challenges = []; 6 | 7 | function isCountryUsed(country) { 8 | for (let i = 0; i < challenges.length; i++) { 9 | if (country === challenges[i].country.toUpperCase()) { 10 | return true; 11 | } 12 | } 13 | return false; 14 | } 15 | 16 | function fetchChallenges() { 17 | fetch('/api/challenges').then(res => res.json()).then(data => { 18 | if (data.status === 401) { 19 | alert('CTF is not yet started'); 20 | } 21 | else { 22 | challenges = data.challenges; 23 | } 24 | }); 25 | } 26 | 27 | const types = { 28 | // File Extension MIME Type 29 | 'abs': 'audio/x-mpeg', 30 | 'ai': 'application/postscript', 31 | 'aif': 'audio/x-aiff', 32 | 'aifc': 'audio/x-aiff', 33 | 'aiff': 'audio/x-aiff', 34 | 'aim': 'application/x-aim', 35 | 'art': 'image/x-jg', 36 | 'asf': 'video/x-ms-asf', 37 | 'asx': 'video/x-ms-asf', 38 | 'au': 'audio/basic', 39 | 'avi': 'video/x-msvideo', 40 | 'avx': 'video/x-rad-screenplay', 41 | 'bcpio': 'application/x-bcpio', 42 | 'bin': 'application/octet-stream', 43 | 'bmp': 'image/bmp', 44 | 'body': 'text/html', 45 | 'cdf': 'application/x-cdf', 46 | 'cer': 'application/pkix-cert', 47 | 'class': 'application/java', 48 | 'cpio': 'application/x-cpio', 49 | 'csh': 'application/x-csh', 50 | 'css': 'text/css', 51 | 'dib': 'image/bmp', 52 | 'doc': 'application/msword', 53 | 'dtd': 'application/xml-dtd', 54 | 'dv': 'video/x-dv', 55 | 'dvi': 'application/x-dvi', 56 | 'elf': 'application/x-elf', 57 | 'eot': 'application/vnd.ms-fontobject', 58 | 'eps': 'application/postscript', 59 | 'etx': 'text/x-setext', 60 | 'exe': 'application/octet-stream', 61 | 'gif': 'image/gif', 62 | 'gtar': 'application/x-gtar', 63 | 'gz': 'application/x-gzip', 64 | 'hdf': 'application/x-hdf', 65 | 'hqx': 'application/mac-binhex40', 66 | 'htc': 'text/x-component', 67 | 'htm': 'text/html', 68 | 'html': 'text/html', 69 | 'ief': 'image/ief', 70 | 'jad': 'text/vnd.sun.j2me.app-descriptor', 71 | 'jar': 'application/java-archive', 72 | 'java': 'text/x-java-source', 73 | 'jnlp': 'application/x-java-jnlp-file', 74 | 'jpe': 'image/jpeg', 75 | 'jpeg': 'image/jpeg', 76 | 'jpg': 'image/jpeg', 77 | 'js': 'application/javascript', 78 | 'jsf': 'text/plain', 79 | 'json': 'application/json', 80 | 'jspf': 'text/plain', 81 | 'kar': 'audio/midi', 82 | 'latex': 'application/x-latex', 83 | 'm3u': 'audio/x-mpegurl', 84 | 'mac': 'image/x-macpaint', 85 | 'man': 'text/troff', 86 | 'mathml': 'application/mathml+xml', 87 | 'me': 'text/troff', 88 | 'mid': 'audio/midi', 89 | 'midi': 'audio/midi', 90 | 'mif': 'application/x-mif', 91 | 'mov': 'video/quicktime', 92 | 'movie': 'video/x-sgi-movie', 93 | 'mp1': 'audio/mpeg', 94 | 'mp2': 'audio/mpeg', 95 | 'mp3': 'audio/mpeg', 96 | 'mp4': 'video/mp4', 97 | 'mpa': 'audio/mpeg', 98 | 'mpe': 'video/mpeg', 99 | 'mpeg': 'video/mpeg', 100 | 'mpega': 'audio/x-mpeg', 101 | 'mpg': 'video/mpeg', 102 | 'mpv2': 'video/mpeg2', 103 | 'ms': 'application/x-wais-source', 104 | 'nc': 'application/x-netcdf', 105 | 'oda': 'application/oda', 106 | 'odb': 'application/vnd.oasis.opendocument.database', 107 | 'odc': 'application/vnd.oasis.opendocument.chart', 108 | 'odf': 'application/vnd.oasis.opendocument.formula', 109 | 'odg': 'application/vnd.oasis.opendocument.graphics', 110 | 'odi': 'application/vnd.oasis.opendocument.image', 111 | 'odm': 'application/vnd.oasis.opendocument.text-master', 112 | 'odp': 'application/vnd.oasis.opendocument.presentation', 113 | 'ods': 'application/vnd.oasis.opendocument.spreadsheet', 114 | 'odt': 'application/vnd.oasis.opendocument.text', 115 | 'otg': 'application/vnd.oasis.opendocument.graphics-template', 116 | 'oth': 'application/vnd.oasis.opendocument.text-web', 117 | 'otp': 'application/vnd.oasis.opendocument.presentation-template', 118 | 'ots': 'application/vnd.oasis.opendocument.spreadsheet-template', 119 | 'ott': 'application/vnd.oasis.opendocument.text-template', 120 | 'ogx': 'application/ogg', 121 | 'ogv': 'video/ogg', 122 | 'oga': 'audio/ogg', 123 | 'ogg': 'audio/ogg', 124 | 'otf': 'application/x-font-opentype', 125 | 'spx': 'audio/ogg', 126 | 'flac': 'audio/flac', 127 | 'anx': 'application/annodex', 128 | 'axa': 'audio/annodex', 129 | 'axv': 'video/annodex', 130 | 'xspf': 'application/xspf+xml', 131 | 'pcap': 'application/vnd.tcpdump.pcap', 132 | 'pbm': 'image/x-portable-bitmap', 133 | 'pct': 'image/pict', 134 | 'pdf': 'application/pdf', 135 | 'pgm': 'image/x-portable-graymap', 136 | 'pic': 'image/pict', 137 | 'pict': 'image/pict', 138 | 'pls': 'audio/x-scpls', 139 | 'png': 'image/png', 140 | 'pnm': 'image/x-portable-anymap', 141 | 'pnt': 'image/x-macpaint', 142 | 'ppm': 'image/x-portable-pixmap', 143 | 'ppt': 'application/vnd.ms-powerpoint', 144 | 'pps': 'application/vnd.ms-powerpoint', 145 | 'ps': 'application/postscript', 146 | 'psd': 'image/vnd.adobe.photoshop', 147 | 'qt': 'video/quicktime', 148 | 'qti': 'image/x-quicktime', 149 | 'qtif': 'image/x-quicktime', 150 | 'ras': 'image/x-cmu-raster', 151 | 'rdf': 'application/rdf+xml', 152 | 'rgb': 'image/x-rgb', 153 | 'rm': 'application/vnd.rn-realmedia', 154 | 'roff': 'text/troff', 155 | 'rtf': 'application/rtf', 156 | 'rtx': 'text/richtext', 157 | 'sfnt': 'application/font-sfnt', 158 | 'sh': 'application/x-sh', 159 | 'shar': 'application/x-shar', 160 | 'sit': 'application/x-stuffit', 161 | 'snd': 'audio/basic', 162 | 'src': 'application/x-wais-source', 163 | 'sv4cpio': 'application/x-sv4cpio', 164 | 'sv4crc': 'application/x-sv4crc', 165 | 'svg': 'image/svg+xml', 166 | 'svgz': 'image/svg+xml', 167 | 'swf': 'application/x-shockwave-flash', 168 | 't': 'text/troff', 169 | 'tar': 'application/x-tar', 170 | 'tcl': 'application/x-tcl', 171 | 'tex': 'application/x-tex', 172 | 'texi': 'application/x-texinfo', 173 | 'texinfo': 'application/x-texinfo', 174 | 'tif': 'image/tiff', 175 | 'tiff': 'image/tiff', 176 | 'tr': 'text/troff', 177 | 'tsv': 'text/tab-separated-values', 178 | 'ttf': 'application/x-font-ttf', 179 | 'txt': 'text/plain', 180 | 'ulw': 'audio/basic', 181 | 'ustar': 'application/x-ustar', 182 | 'vxml': 'application/voicexml+xml', 183 | 'xbm': 'image/x-xbitmap', 184 | 'xht': 'application/xhtml+xml', 185 | 'xhtml': 'application/xhtml+xml', 186 | 'xls': 'application/vnd.ms-excel', 187 | 'xml': 'application/xml', 188 | 'xpm': 'image/x-xpixmap', 189 | 'xsl': 'application/xml', 190 | 'xslt': 'application/xslt+xml', 191 | 'xul': 'application/vnd.mozilla.xul+xml', 192 | 'xwd': 'image/x-xwindowdump', 193 | 'vsd': 'application/vnd.visio', 194 | 'wav': 'audio/x-wav', 195 | 'wbmp': 'image/vnd.wap.wbmp', 196 | 'wml': 'text/vnd.wap.wml', 197 | 'wmlc': 'application/vnd.wap.wmlc', 198 | 'wmls': 'text/vnd.wap.wmlsc', 199 | 'wmlscriptc': 'application/vnd.wap.wmlscriptc', 200 | 'wmv': 'video/x-ms-wmv', 201 | 'woff': 'application/font-woff', 202 | 'woff2': 'application/font-woff2', 203 | 'wrl': 'model/vrml', 204 | 'wspolicy': 'application/wspolicy+xml', 205 | 'z': 'application/x-compress', 206 | 'zip': 'application/zip' 207 | }; 208 | 209 | export default function InterfaceGlobe() { 210 | const [isHover, setIsHover] = useState(false); 211 | const [geoData, setGeoData] = useState([]); 212 | const [hoverD, setHoverD] = useState(null); 213 | 214 | const handleMouseEnter = () => { 215 | setIsHover(true); 216 | }; 217 | 218 | const handleMouseLeave = () => { 219 | setIsHover(false); 220 | }; 221 | 222 | useEffect(() => { 223 | fetch('./map.geojson').then(res => res.json()).then(data => setGeoData(data.features)); 224 | }, []); 225 | 226 | function flagSubmit() { 227 | let flag = document.getElementById('challengeFlag').value; 228 | let challange = document.getElementById('challengeName').innerHTML; 229 | fetch('/api/validate', { 230 | method: 'POST', 231 | headers: { 232 | 'Content-Type': 'application/json', 233 | }, 234 | body: JSON.stringify({ 235 | challenge: challange, 236 | value: flag 237 | }) 238 | }) 239 | .then(response => response.status) 240 | .then(status => { 241 | if (status === 200) { 242 | alert("Correct Flag!"); 243 | } else if (status === 403) { 244 | alert("Already anwsered!"); 245 | } else if (status === 409) { 246 | alert("Wrong Flag!"); 247 | } else { 248 | alert("Something went wrong!"); 249 | } 250 | 251 | }) 252 | } 253 | 254 | function download() { 255 | let files = [] 256 | for (let i = 0; i < challenges.length; i++) { 257 | if (challenges[i].name === document.getElementById('challengeName').innerHTML) { 258 | for (let j = 0; j < challenges[i].files.length; j++) { 259 | files.push({ filename : challenges[i].files[j].filename, base64 : challenges[i].files[j].base64 }); 260 | } 261 | } 262 | } 263 | 264 | if (files == []) { 265 | return 266 | } 267 | 268 | for (let i = 0; i < files.length; i++) { 269 | var downloadLink = document.createElement("a"); 270 | var type = ""; 271 | for (let j = 0; j < types.length; j++) { 272 | if (files[i].filename.includes(types[i].extension)) { 273 | type = types[i].type; 274 | } 275 | } 276 | downloadLink.href = "data:" + type + ";base64," + files[i].base64; 277 | downloadLink.download = files[i].filename; 278 | downloadLink.click(); 279 | } 280 | } 281 | 282 | const handlePolygonHover = (polygon) => { 283 | setHoverD(polygon); 284 | } 285 | 286 | function getChallengeByCountry(country) { 287 | for (let i = 0; i < challenges.length; i++) { 288 | if (country === challenges[i].country.toUpperCase()) { 289 | return challenges[i]; 290 | } 291 | } 292 | } 293 | 294 | function handlePolygonClick(d) { 295 | if (isCountryUsed(d.properties.ISO_A2) === true) { 296 | let challenge = getChallengeByCountry(d.properties.ISO_A2); 297 | document.getElementById('challengeBlock').style.display = 'block'; 298 | document.getElementById('challengeName').innerHTML = challenge.name; 299 | document.getElementById('challengeCountry').innerHTML = d.properties.ADMIN; 300 | document.getElementById('challengePoints').innerHTML = challenge.points + ' points'; 301 | document.getElementById('challengeDescription').innerHTML = challenge.description; 302 | addEventListener('click', () => { 303 | if(event.target.id !== 'challengeBlock' && event.target.className !== 'challengeInfo') { 304 | document.getElementById('challengeBlock').style.display = 'none'; 305 | } 306 | }); 307 | } 308 | else { 309 | document.getElementById('challengeBlock').style.display = 'none'; 310 | } 311 | } 312 | 313 | return ( 314 |{file.name}
367 | {/each} 368 |{file.name}
403 | {/each} 404 |Password:
421 | 422 |{file.name}
359 | {/each} 360 |{file.name}
396 | {/each} 397 |Password:
414 | 415 |LEADERBOARD:
384 |ANNOUNCMENTS:
387 |Challange Description
394 | 395 | 396 | 397 |