diff --git a/cmd/web/assets/flags/ad.svg b/cmd/web/assets/flags/ad.svg new file mode 100644 index 0000000..199ff19 --- /dev/null +++ b/cmd/web/assets/flags/ad.svg @@ -0,0 +1,150 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/cmd/web/assets/flags/ae.svg b/cmd/web/assets/flags/ae.svg new file mode 100644 index 0000000..651ac85 --- /dev/null +++ b/cmd/web/assets/flags/ae.svg @@ -0,0 +1,6 @@ + + + + + + diff --git a/cmd/web/assets/flags/af.svg b/cmd/web/assets/flags/af.svg new file mode 100644 index 0000000..4dbe455 --- /dev/null +++ b/cmd/web/assets/flags/af.svg @@ -0,0 +1,81 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/cmd/web/assets/flags/ag.svg b/cmd/web/assets/flags/ag.svg new file mode 100644 index 0000000..243c3d8 --- /dev/null +++ b/cmd/web/assets/flags/ag.svg @@ -0,0 +1,14 @@ + + + + + + + + + + + + + + diff --git a/cmd/web/assets/flags/ai.svg b/cmd/web/assets/flags/ai.svg new file mode 100644 index 0000000..9c2ea33 --- /dev/null +++ b/cmd/web/assets/flags/ai.svg @@ -0,0 +1,29 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/cmd/web/assets/flags/al.svg b/cmd/web/assets/flags/al.svg new file mode 100644 index 0000000..e85d95f --- /dev/null +++ b/cmd/web/assets/flags/al.svg @@ -0,0 +1,5 @@ + + + + + diff --git a/cmd/web/assets/flags/am.svg b/cmd/web/assets/flags/am.svg new file mode 100644 index 0000000..99fa4dc --- /dev/null +++ b/cmd/web/assets/flags/am.svg @@ -0,0 +1,5 @@ + + + + + diff --git a/cmd/web/assets/flags/ao.svg b/cmd/web/assets/flags/ao.svg new file mode 100644 index 0000000..b73b1ec --- /dev/null +++ b/cmd/web/assets/flags/ao.svg @@ -0,0 +1,13 @@ + + + + + + + + + + + + + diff --git a/cmd/web/assets/flags/aq.svg b/cmd/web/assets/flags/aq.svg new file mode 100644 index 0000000..c7e3536 --- /dev/null +++ b/cmd/web/assets/flags/aq.svg @@ -0,0 +1,5 @@ + + + + + diff --git a/cmd/web/assets/flags/ar.svg b/cmd/web/assets/flags/ar.svg new file mode 100644 index 0000000..c753da1 --- /dev/null +++ b/cmd/web/assets/flags/ar.svg @@ -0,0 +1,32 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/cmd/web/assets/flags/arab.svg b/cmd/web/assets/flags/arab.svg new file mode 100644 index 0000000..9ef079f --- /dev/null +++ b/cmd/web/assets/flags/arab.svg @@ -0,0 +1,109 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/cmd/web/assets/flags/as.svg b/cmd/web/assets/flags/as.svg new file mode 100644 index 0000000..82459de --- /dev/null +++ b/cmd/web/assets/flags/as.svg @@ -0,0 +1,72 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/cmd/web/assets/flags/asean.svg b/cmd/web/assets/flags/asean.svg new file mode 100644 index 0000000..189ae02 --- /dev/null +++ b/cmd/web/assets/flags/asean.svg @@ -0,0 +1,13 @@ + + + + + + + + + + + + + diff --git a/cmd/web/assets/flags/at.svg b/cmd/web/assets/flags/at.svg new file mode 100644 index 0000000..9d2775c --- /dev/null +++ b/cmd/web/assets/flags/at.svg @@ -0,0 +1,4 @@ + + + + diff --git a/cmd/web/assets/flags/au.svg b/cmd/web/assets/flags/au.svg new file mode 100644 index 0000000..96e8076 --- /dev/null +++ b/cmd/web/assets/flags/au.svg @@ -0,0 +1,8 @@ + + + + + + + + diff --git a/cmd/web/assets/flags/aw.svg b/cmd/web/assets/flags/aw.svg new file mode 100644 index 0000000..413b7c4 --- /dev/null +++ b/cmd/web/assets/flags/aw.svg @@ -0,0 +1,186 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/cmd/web/assets/flags/ax.svg b/cmd/web/assets/flags/ax.svg new file mode 100644 index 0000000..0584d71 --- /dev/null +++ b/cmd/web/assets/flags/ax.svg @@ -0,0 +1,18 @@ + + + + + + + + + + + + + + + + + + diff --git a/cmd/web/assets/flags/az.svg b/cmd/web/assets/flags/az.svg new file mode 100644 index 0000000..3557522 --- /dev/null +++ b/cmd/web/assets/flags/az.svg @@ -0,0 +1,8 @@ + + + + + + + + diff --git a/cmd/web/assets/flags/ba.svg b/cmd/web/assets/flags/ba.svg new file mode 100644 index 0000000..93bd9cf --- /dev/null +++ b/cmd/web/assets/flags/ba.svg @@ -0,0 +1,12 @@ + + + + + + + + + + + + diff --git a/cmd/web/assets/flags/bb.svg b/cmd/web/assets/flags/bb.svg new file mode 100644 index 0000000..cecd5cc --- /dev/null +++ b/cmd/web/assets/flags/bb.svg @@ -0,0 +1,6 @@ + + + + + + diff --git a/cmd/web/assets/flags/bd.svg b/cmd/web/assets/flags/bd.svg new file mode 100644 index 0000000..16b794d --- /dev/null +++ b/cmd/web/assets/flags/bd.svg @@ -0,0 +1,4 @@ + + + + diff --git a/cmd/web/assets/flags/be.svg b/cmd/web/assets/flags/be.svg new file mode 100644 index 0000000..ac706a0 --- /dev/null +++ b/cmd/web/assets/flags/be.svg @@ -0,0 +1,7 @@ + + + + + + + diff --git a/cmd/web/assets/flags/bf.svg b/cmd/web/assets/flags/bf.svg new file mode 100644 index 0000000..4713822 --- /dev/null +++ b/cmd/web/assets/flags/bf.svg @@ -0,0 +1,7 @@ + + + + + + + diff --git a/cmd/web/assets/flags/bg.svg b/cmd/web/assets/flags/bg.svg new file mode 100644 index 0000000..af2d0d0 --- /dev/null +++ b/cmd/web/assets/flags/bg.svg @@ -0,0 +1,5 @@ + + + + + diff --git a/cmd/web/assets/flags/bh.svg b/cmd/web/assets/flags/bh.svg new file mode 100644 index 0000000..7a2ea54 --- /dev/null +++ b/cmd/web/assets/flags/bh.svg @@ -0,0 +1,4 @@ + + + + diff --git a/cmd/web/assets/flags/bi.svg b/cmd/web/assets/flags/bi.svg new file mode 100644 index 0000000..a4434a9 --- /dev/null +++ b/cmd/web/assets/flags/bi.svg @@ -0,0 +1,15 @@ + + + + + + + + + + + + + + + diff --git a/cmd/web/assets/flags/bj.svg b/cmd/web/assets/flags/bj.svg new file mode 100644 index 0000000..0846724 --- /dev/null +++ b/cmd/web/assets/flags/bj.svg @@ -0,0 +1,14 @@ + + + + + + + + + + + + + + diff --git a/cmd/web/assets/flags/bl.svg b/cmd/web/assets/flags/bl.svg new file mode 100644 index 0000000..f84cbba --- /dev/null +++ b/cmd/web/assets/flags/bl.svg @@ -0,0 +1,5 @@ + + + + + diff --git a/cmd/web/assets/flags/bm.svg b/cmd/web/assets/flags/bm.svg new file mode 100644 index 0000000..f43a5eb --- /dev/null +++ b/cmd/web/assets/flags/bm.svg @@ -0,0 +1,97 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/cmd/web/assets/flags/bn.svg b/cmd/web/assets/flags/bn.svg new file mode 100644 index 0000000..f544c25 --- /dev/null +++ b/cmd/web/assets/flags/bn.svg @@ -0,0 +1,36 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/cmd/web/assets/flags/bo.svg b/cmd/web/assets/flags/bo.svg new file mode 100644 index 0000000..7658e3f --- /dev/null +++ b/cmd/web/assets/flags/bo.svg @@ -0,0 +1,673 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/cmd/web/assets/flags/bq.svg b/cmd/web/assets/flags/bq.svg new file mode 100644 index 0000000..0e6bc76 --- /dev/null +++ b/cmd/web/assets/flags/bq.svg @@ -0,0 +1,5 @@ + + + + + diff --git a/cmd/web/assets/flags/br.svg b/cmd/web/assets/flags/br.svg new file mode 100644 index 0000000..719a763 --- /dev/null +++ b/cmd/web/assets/flags/br.svg @@ -0,0 +1,45 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/cmd/web/assets/flags/bs.svg b/cmd/web/assets/flags/bs.svg new file mode 100644 index 0000000..5cc918e --- /dev/null +++ b/cmd/web/assets/flags/bs.svg @@ -0,0 +1,13 @@ + + + + + + + + + + + + + diff --git a/cmd/web/assets/flags/bt.svg b/cmd/web/assets/flags/bt.svg new file mode 100644 index 0000000..20aef3a --- /dev/null +++ b/cmd/web/assets/flags/bt.svg @@ -0,0 +1,89 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/cmd/web/assets/flags/bv.svg b/cmd/web/assets/flags/bv.svg new file mode 100644 index 0000000..40e16d9 --- /dev/null +++ b/cmd/web/assets/flags/bv.svg @@ -0,0 +1,13 @@ + + + + + + + + + + + + + diff --git a/cmd/web/assets/flags/bw.svg b/cmd/web/assets/flags/bw.svg new file mode 100644 index 0000000..3435608 --- /dev/null +++ b/cmd/web/assets/flags/bw.svg @@ -0,0 +1,7 @@ + + + + + + + diff --git a/cmd/web/assets/flags/by.svg b/cmd/web/assets/flags/by.svg new file mode 100644 index 0000000..948784f --- /dev/null +++ b/cmd/web/assets/flags/by.svg @@ -0,0 +1,18 @@ + + + + + + + + + + + + + + + + + + diff --git a/cmd/web/assets/flags/bz.svg b/cmd/web/assets/flags/bz.svg new file mode 100644 index 0000000..d81b16c --- /dev/null +++ b/cmd/web/assets/flags/bz.svg @@ -0,0 +1,145 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/cmd/web/assets/flags/ca.svg b/cmd/web/assets/flags/ca.svg new file mode 100644 index 0000000..c9b23b4 --- /dev/null +++ b/cmd/web/assets/flags/ca.svg @@ -0,0 +1,4 @@ + + + + diff --git a/cmd/web/assets/flags/cc.svg b/cmd/web/assets/flags/cc.svg new file mode 100644 index 0000000..a42dec6 --- /dev/null +++ b/cmd/web/assets/flags/cc.svg @@ -0,0 +1,19 @@ + + + + + + + + + + + + + + + + + + + diff --git a/cmd/web/assets/flags/cd.svg b/cmd/web/assets/flags/cd.svg new file mode 100644 index 0000000..b9cf528 --- /dev/null +++ b/cmd/web/assets/flags/cd.svg @@ -0,0 +1,5 @@ + + + + + diff --git a/cmd/web/assets/flags/cefta.svg b/cmd/web/assets/flags/cefta.svg new file mode 100644 index 0000000..f748d08 --- /dev/null +++ b/cmd/web/assets/flags/cefta.svg @@ -0,0 +1,13 @@ + + + + + + + + + + + + + diff --git a/cmd/web/assets/flags/cf.svg b/cmd/web/assets/flags/cf.svg new file mode 100644 index 0000000..a6cd367 --- /dev/null +++ b/cmd/web/assets/flags/cf.svg @@ -0,0 +1,15 @@ + + + + + + + + + + + + + + + diff --git a/cmd/web/assets/flags/cg.svg b/cmd/web/assets/flags/cg.svg new file mode 100644 index 0000000..f5a0e42 --- /dev/null +++ b/cmd/web/assets/flags/cg.svg @@ -0,0 +1,12 @@ + + + + + + + + + + + + diff --git a/cmd/web/assets/flags/ch.svg b/cmd/web/assets/flags/ch.svg new file mode 100644 index 0000000..b42d670 --- /dev/null +++ b/cmd/web/assets/flags/ch.svg @@ -0,0 +1,9 @@ + + + + + + + + + diff --git a/cmd/web/assets/flags/ci.svg b/cmd/web/assets/flags/ci.svg new file mode 100644 index 0000000..e400f0c --- /dev/null +++ b/cmd/web/assets/flags/ci.svg @@ -0,0 +1,7 @@ + + + + + + + diff --git a/cmd/web/assets/flags/ck.svg b/cmd/web/assets/flags/ck.svg new file mode 100644 index 0000000..18e547b --- /dev/null +++ b/cmd/web/assets/flags/ck.svg @@ -0,0 +1,9 @@ + + + + + + + + + diff --git a/cmd/web/assets/flags/cl.svg b/cmd/web/assets/flags/cl.svg new file mode 100644 index 0000000..5b3c72f --- /dev/null +++ b/cmd/web/assets/flags/cl.svg @@ -0,0 +1,13 @@ + + + + + + + + + + + + + diff --git a/cmd/web/assets/flags/cm.svg b/cmd/web/assets/flags/cm.svg new file mode 100644 index 0000000..70adc8b --- /dev/null +++ b/cmd/web/assets/flags/cm.svg @@ -0,0 +1,15 @@ + + + + + + + + + + + + + + + diff --git a/cmd/web/assets/flags/cn.svg b/cmd/web/assets/flags/cn.svg new file mode 100644 index 0000000..10d3489 --- /dev/null +++ b/cmd/web/assets/flags/cn.svg @@ -0,0 +1,11 @@ + + + + + + + + + + + diff --git a/cmd/web/assets/flags/co.svg b/cmd/web/assets/flags/co.svg new file mode 100644 index 0000000..ebd0a0f --- /dev/null +++ b/cmd/web/assets/flags/co.svg @@ -0,0 +1,7 @@ + + + + + + + diff --git a/cmd/web/assets/flags/cp.svg b/cmd/web/assets/flags/cp.svg new file mode 100644 index 0000000..b8aa9cf --- /dev/null +++ b/cmd/web/assets/flags/cp.svg @@ -0,0 +1,7 @@ + + + + + + + diff --git a/cmd/web/assets/flags/cr.svg b/cmd/web/assets/flags/cr.svg new file mode 100644 index 0000000..5a409ee --- /dev/null +++ b/cmd/web/assets/flags/cr.svg @@ -0,0 +1,7 @@ + + + + + + + diff --git a/cmd/web/assets/flags/cu.svg b/cmd/web/assets/flags/cu.svg new file mode 100644 index 0000000..053c9ee --- /dev/null +++ b/cmd/web/assets/flags/cu.svg @@ -0,0 +1,13 @@ + + + + + + + + + + + + + diff --git a/cmd/web/assets/flags/cv.svg b/cmd/web/assets/flags/cv.svg new file mode 100644 index 0000000..aec8994 --- /dev/null +++ b/cmd/web/assets/flags/cv.svg @@ -0,0 +1,13 @@ + + + + + + + + + + + + + diff --git a/cmd/web/assets/flags/cw.svg b/cmd/web/assets/flags/cw.svg new file mode 100644 index 0000000..bb0ece2 --- /dev/null +++ b/cmd/web/assets/flags/cw.svg @@ -0,0 +1,14 @@ + + + + + + + + + + + + + + diff --git a/cmd/web/assets/flags/cx.svg b/cmd/web/assets/flags/cx.svg new file mode 100644 index 0000000..3a83c23 --- /dev/null +++ b/cmd/web/assets/flags/cx.svg @@ -0,0 +1,15 @@ + + + + + + + + + + + + + + + diff --git a/cmd/web/assets/flags/cy.svg b/cmd/web/assets/flags/cy.svg new file mode 100644 index 0000000..ee4b0c7 --- /dev/null +++ b/cmd/web/assets/flags/cy.svg @@ -0,0 +1,6 @@ + + + + + + diff --git a/cmd/web/assets/flags/cz.svg b/cmd/web/assets/flags/cz.svg new file mode 100644 index 0000000..7913de3 --- /dev/null +++ b/cmd/web/assets/flags/cz.svg @@ -0,0 +1,5 @@ + + + + + diff --git a/cmd/web/assets/flags/de.svg b/cmd/web/assets/flags/de.svg new file mode 100644 index 0000000..71aa2d2 --- /dev/null +++ b/cmd/web/assets/flags/de.svg @@ -0,0 +1,5 @@ + + + + + diff --git a/cmd/web/assets/flags/dg.svg b/cmd/web/assets/flags/dg.svg new file mode 100644 index 0000000..dfee2bb --- /dev/null +++ b/cmd/web/assets/flags/dg.svg @@ -0,0 +1,130 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/cmd/web/assets/flags/dj.svg b/cmd/web/assets/flags/dj.svg new file mode 100644 index 0000000..9b00a82 --- /dev/null +++ b/cmd/web/assets/flags/dj.svg @@ -0,0 +1,13 @@ + + + + + + + + + + + + + diff --git a/cmd/web/assets/flags/dk.svg b/cmd/web/assets/flags/dk.svg new file mode 100644 index 0000000..563277f --- /dev/null +++ b/cmd/web/assets/flags/dk.svg @@ -0,0 +1,5 @@ + + + + + diff --git a/cmd/web/assets/flags/dm.svg b/cmd/web/assets/flags/dm.svg new file mode 100644 index 0000000..5aa9cea --- /dev/null +++ b/cmd/web/assets/flags/dm.svg @@ -0,0 +1,152 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/cmd/web/assets/flags/do.svg b/cmd/web/assets/flags/do.svg new file mode 100644 index 0000000..6de2b26 --- /dev/null +++ b/cmd/web/assets/flags/do.svg @@ -0,0 +1,121 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/cmd/web/assets/flags/dz.svg b/cmd/web/assets/flags/dz.svg new file mode 100644 index 0000000..5ff29a7 --- /dev/null +++ b/cmd/web/assets/flags/dz.svg @@ -0,0 +1,5 @@ + + + + + diff --git a/cmd/web/assets/flags/eac.svg b/cmd/web/assets/flags/eac.svg new file mode 100644 index 0000000..59d02d2 --- /dev/null +++ b/cmd/web/assets/flags/eac.svg @@ -0,0 +1,48 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/cmd/web/assets/flags/ec.svg b/cmd/web/assets/flags/ec.svg new file mode 100644 index 0000000..88c50bf --- /dev/null +++ b/cmd/web/assets/flags/ec.svg @@ -0,0 +1,138 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/cmd/web/assets/flags/ee.svg b/cmd/web/assets/flags/ee.svg new file mode 100644 index 0000000..8b98c2c --- /dev/null +++ b/cmd/web/assets/flags/ee.svg @@ -0,0 +1,5 @@ + + + + + diff --git a/cmd/web/assets/flags/eg.svg b/cmd/web/assets/flags/eg.svg new file mode 100644 index 0000000..88e32b3 --- /dev/null +++ b/cmd/web/assets/flags/eg.svg @@ -0,0 +1,38 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/cmd/web/assets/flags/eh.svg b/cmd/web/assets/flags/eh.svg new file mode 100644 index 0000000..6aec728 --- /dev/null +++ b/cmd/web/assets/flags/eh.svg @@ -0,0 +1,16 @@ + + + + + + + + + + + + + + + + diff --git a/cmd/web/assets/flags/er.svg b/cmd/web/assets/flags/er.svg new file mode 100644 index 0000000..48a13b4 --- /dev/null +++ b/cmd/web/assets/flags/er.svg @@ -0,0 +1,8 @@ + + + + + + + + diff --git a/cmd/web/assets/flags/es-ct.svg b/cmd/web/assets/flags/es-ct.svg new file mode 100644 index 0000000..4d85911 --- /dev/null +++ b/cmd/web/assets/flags/es-ct.svg @@ -0,0 +1,4 @@ + + + + diff --git a/cmd/web/assets/flags/es-ga.svg b/cmd/web/assets/flags/es-ga.svg new file mode 100644 index 0000000..573ca45 --- /dev/null +++ b/cmd/web/assets/flags/es-ga.svg @@ -0,0 +1,187 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/cmd/web/assets/flags/es-pv.svg b/cmd/web/assets/flags/es-pv.svg new file mode 100644 index 0000000..63c19f4 --- /dev/null +++ b/cmd/web/assets/flags/es-pv.svg @@ -0,0 +1,5 @@ + + + + + diff --git a/cmd/web/assets/flags/es.svg b/cmd/web/assets/flags/es.svg new file mode 100644 index 0000000..a296ebf --- /dev/null +++ b/cmd/web/assets/flags/es.svg @@ -0,0 +1,544 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/cmd/web/assets/flags/et.svg b/cmd/web/assets/flags/et.svg new file mode 100644 index 0000000..3f99be4 --- /dev/null +++ b/cmd/web/assets/flags/et.svg @@ -0,0 +1,14 @@ + + + + + + + + + + + + + + diff --git a/cmd/web/assets/flags/eu.svg b/cmd/web/assets/flags/eu.svg new file mode 100644 index 0000000..b0874c1 --- /dev/null +++ b/cmd/web/assets/flags/eu.svg @@ -0,0 +1,28 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/cmd/web/assets/flags/fi.svg b/cmd/web/assets/flags/fi.svg new file mode 100644 index 0000000..470be2d --- /dev/null +++ b/cmd/web/assets/flags/fi.svg @@ -0,0 +1,5 @@ + + + + + diff --git a/cmd/web/assets/flags/fj.svg b/cmd/web/assets/flags/fj.svg new file mode 100644 index 0000000..332ae61 --- /dev/null +++ b/cmd/web/assets/flags/fj.svg @@ -0,0 +1,120 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/cmd/web/assets/flags/fk.svg b/cmd/web/assets/flags/fk.svg new file mode 100644 index 0000000..a0dace8 --- /dev/null +++ b/cmd/web/assets/flags/fk.svg @@ -0,0 +1,90 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/cmd/web/assets/flags/fm.svg b/cmd/web/assets/flags/fm.svg new file mode 100644 index 0000000..c1b7c97 --- /dev/null +++ b/cmd/web/assets/flags/fm.svg @@ -0,0 +1,11 @@ + + + + + + + + + + + diff --git a/cmd/web/assets/flags/fo.svg b/cmd/web/assets/flags/fo.svg new file mode 100644 index 0000000..f802d28 --- /dev/null +++ b/cmd/web/assets/flags/fo.svg @@ -0,0 +1,12 @@ + + + + + + + + + + + + diff --git a/cmd/web/assets/flags/fr.svg b/cmd/web/assets/flags/fr.svg new file mode 100644 index 0000000..4110e59 --- /dev/null +++ b/cmd/web/assets/flags/fr.svg @@ -0,0 +1,5 @@ + + + + + diff --git a/cmd/web/assets/flags/ga.svg b/cmd/web/assets/flags/ga.svg new file mode 100644 index 0000000..76edab4 --- /dev/null +++ b/cmd/web/assets/flags/ga.svg @@ -0,0 +1,7 @@ + + + + + + + diff --git a/cmd/web/assets/flags/gb-eng.svg b/cmd/web/assets/flags/gb-eng.svg new file mode 100644 index 0000000..12e3b67 --- /dev/null +++ b/cmd/web/assets/flags/gb-eng.svg @@ -0,0 +1,5 @@ + + + + + diff --git a/cmd/web/assets/flags/gb-nir.svg b/cmd/web/assets/flags/gb-nir.svg new file mode 100644 index 0000000..e22190a --- /dev/null +++ b/cmd/web/assets/flags/gb-nir.svg @@ -0,0 +1,132 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/cmd/web/assets/flags/gb-sct.svg b/cmd/web/assets/flags/gb-sct.svg new file mode 100644 index 0000000..f50cd32 --- /dev/null +++ b/cmd/web/assets/flags/gb-sct.svg @@ -0,0 +1,4 @@ + + + + diff --git a/cmd/web/assets/flags/gb-wls.svg b/cmd/web/assets/flags/gb-wls.svg new file mode 100644 index 0000000..d7f5791 --- /dev/null +++ b/cmd/web/assets/flags/gb-wls.svg @@ -0,0 +1,9 @@ + + + + + + + + + diff --git a/cmd/web/assets/flags/gb.svg b/cmd/web/assets/flags/gb.svg new file mode 100644 index 0000000..7991383 --- /dev/null +++ b/cmd/web/assets/flags/gb.svg @@ -0,0 +1,7 @@ + + + + + + + diff --git a/cmd/web/assets/flags/gd.svg b/cmd/web/assets/flags/gd.svg new file mode 100644 index 0000000..b3d250d --- /dev/null +++ b/cmd/web/assets/flags/gd.svg @@ -0,0 +1,27 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/cmd/web/assets/flags/ge.svg b/cmd/web/assets/flags/ge.svg new file mode 100644 index 0000000..ab08a9a --- /dev/null +++ b/cmd/web/assets/flags/ge.svg @@ -0,0 +1,6 @@ + + + + + + diff --git a/cmd/web/assets/flags/gf.svg b/cmd/web/assets/flags/gf.svg new file mode 100644 index 0000000..f8fe94c --- /dev/null +++ b/cmd/web/assets/flags/gf.svg @@ -0,0 +1,5 @@ + + + + + diff --git a/cmd/web/assets/flags/gg.svg b/cmd/web/assets/flags/gg.svg new file mode 100644 index 0000000..f8216c8 --- /dev/null +++ b/cmd/web/assets/flags/gg.svg @@ -0,0 +1,9 @@ + + + + + + + + + diff --git a/cmd/web/assets/flags/gh.svg b/cmd/web/assets/flags/gh.svg new file mode 100644 index 0000000..5c3e3e6 --- /dev/null +++ b/cmd/web/assets/flags/gh.svg @@ -0,0 +1,6 @@ + + + + + + diff --git a/cmd/web/assets/flags/gi.svg b/cmd/web/assets/flags/gi.svg new file mode 100644 index 0000000..a5d7570 --- /dev/null +++ b/cmd/web/assets/flags/gi.svg @@ -0,0 +1,32 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/cmd/web/assets/flags/gl.svg b/cmd/web/assets/flags/gl.svg new file mode 100644 index 0000000..eb5a52e --- /dev/null +++ b/cmd/web/assets/flags/gl.svg @@ -0,0 +1,4 @@ + + + + diff --git a/cmd/web/assets/flags/gm.svg b/cmd/web/assets/flags/gm.svg new file mode 100644 index 0000000..8fe9d66 --- /dev/null +++ b/cmd/web/assets/flags/gm.svg @@ -0,0 +1,14 @@ + + + + + + + + + + + + + + diff --git a/cmd/web/assets/flags/gn.svg b/cmd/web/assets/flags/gn.svg new file mode 100644 index 0000000..40d6ad4 --- /dev/null +++ b/cmd/web/assets/flags/gn.svg @@ -0,0 +1,7 @@ + + + + + + + diff --git a/cmd/web/assets/flags/gp.svg b/cmd/web/assets/flags/gp.svg new file mode 100644 index 0000000..ee55c4b --- /dev/null +++ b/cmd/web/assets/flags/gp.svg @@ -0,0 +1,5 @@ + + + + + diff --git a/cmd/web/assets/flags/gq.svg b/cmd/web/assets/flags/gq.svg new file mode 100644 index 0000000..64c8eb2 --- /dev/null +++ b/cmd/web/assets/flags/gq.svg @@ -0,0 +1,23 @@ + + + + + + + + + + + + + + + + + + + + + + + diff --git a/cmd/web/assets/flags/gr.svg b/cmd/web/assets/flags/gr.svg new file mode 100644 index 0000000..599741e --- /dev/null +++ b/cmd/web/assets/flags/gr.svg @@ -0,0 +1,16 @@ + + + + + + + + + + + + + + + + diff --git a/cmd/web/assets/flags/gs.svg b/cmd/web/assets/flags/gs.svg new file mode 100644 index 0000000..29db9b9 --- /dev/null +++ b/cmd/web/assets/flags/gs.svg @@ -0,0 +1,133 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/cmd/web/assets/flags/gt.svg b/cmd/web/assets/flags/gt.svg new file mode 100644 index 0000000..7df9df5 --- /dev/null +++ b/cmd/web/assets/flags/gt.svg @@ -0,0 +1,204 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/cmd/web/assets/flags/gu.svg b/cmd/web/assets/flags/gu.svg new file mode 100644 index 0000000..3b95219 --- /dev/null +++ b/cmd/web/assets/flags/gu.svg @@ -0,0 +1,19 @@ + + + + + + + + + + + + + + + + + + + diff --git a/cmd/web/assets/flags/gw.svg b/cmd/web/assets/flags/gw.svg new file mode 100644 index 0000000..d470bac --- /dev/null +++ b/cmd/web/assets/flags/gw.svg @@ -0,0 +1,13 @@ + + + + + + + + + + + + + diff --git a/cmd/web/assets/flags/gy.svg b/cmd/web/assets/flags/gy.svg new file mode 100644 index 0000000..569fb56 --- /dev/null +++ b/cmd/web/assets/flags/gy.svg @@ -0,0 +1,9 @@ + + + + + + + + + diff --git a/cmd/web/assets/flags/hk.svg b/cmd/web/assets/flags/hk.svg new file mode 100644 index 0000000..4fd55bc --- /dev/null +++ b/cmd/web/assets/flags/hk.svg @@ -0,0 +1,8 @@ + + + + + + + + diff --git a/cmd/web/assets/flags/hm.svg b/cmd/web/assets/flags/hm.svg new file mode 100644 index 0000000..815c482 --- /dev/null +++ b/cmd/web/assets/flags/hm.svg @@ -0,0 +1,8 @@ + + + + + + + + diff --git a/cmd/web/assets/flags/hn.svg b/cmd/web/assets/flags/hn.svg new file mode 100644 index 0000000..11fde67 --- /dev/null +++ b/cmd/web/assets/flags/hn.svg @@ -0,0 +1,18 @@ + + + + + + + + + + + + + + + + + + diff --git a/cmd/web/assets/flags/hr.svg b/cmd/web/assets/flags/hr.svg new file mode 100644 index 0000000..dde825c --- /dev/null +++ b/cmd/web/assets/flags/hr.svg @@ -0,0 +1,58 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/cmd/web/assets/flags/ht.svg b/cmd/web/assets/flags/ht.svg new file mode 100644 index 0000000..8e8efc4 --- /dev/null +++ b/cmd/web/assets/flags/ht.svg @@ -0,0 +1,116 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/cmd/web/assets/flags/hu.svg b/cmd/web/assets/flags/hu.svg new file mode 100644 index 0000000..baddf7f --- /dev/null +++ b/cmd/web/assets/flags/hu.svg @@ -0,0 +1,7 @@ + + + + + + + diff --git a/cmd/web/assets/flags/ic.svg b/cmd/web/assets/flags/ic.svg new file mode 100644 index 0000000..81e6ee2 --- /dev/null +++ b/cmd/web/assets/flags/ic.svg @@ -0,0 +1,7 @@ + + + + + + + diff --git a/cmd/web/assets/flags/id.svg b/cmd/web/assets/flags/id.svg new file mode 100644 index 0000000..3b7c8fc --- /dev/null +++ b/cmd/web/assets/flags/id.svg @@ -0,0 +1,4 @@ + + + + diff --git a/cmd/web/assets/flags/ie.svg b/cmd/web/assets/flags/ie.svg new file mode 100644 index 0000000..049be14 --- /dev/null +++ b/cmd/web/assets/flags/ie.svg @@ -0,0 +1,7 @@ + + + + + + + diff --git a/cmd/web/assets/flags/il.svg b/cmd/web/assets/flags/il.svg new file mode 100644 index 0000000..f43be7e --- /dev/null +++ b/cmd/web/assets/flags/il.svg @@ -0,0 +1,14 @@ + + + + + + + + + + + + + + diff --git a/cmd/web/assets/flags/im.svg b/cmd/web/assets/flags/im.svg new file mode 100644 index 0000000..fe6a59a --- /dev/null +++ b/cmd/web/assets/flags/im.svg @@ -0,0 +1,36 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/cmd/web/assets/flags/in.svg b/cmd/web/assets/flags/in.svg new file mode 100644 index 0000000..bc47d74 --- /dev/null +++ b/cmd/web/assets/flags/in.svg @@ -0,0 +1,25 @@ + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/cmd/web/assets/flags/io.svg b/cmd/web/assets/flags/io.svg new file mode 100644 index 0000000..3058f7d --- /dev/null +++ b/cmd/web/assets/flags/io.svg @@ -0,0 +1,130 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/cmd/web/assets/flags/iq.svg b/cmd/web/assets/flags/iq.svg new file mode 100644 index 0000000..8044514 --- /dev/null +++ b/cmd/web/assets/flags/iq.svg @@ -0,0 +1,10 @@ + + + + + + + + + + diff --git a/cmd/web/assets/flags/ir.svg b/cmd/web/assets/flags/ir.svg new file mode 100644 index 0000000..8c6d516 --- /dev/null +++ b/cmd/web/assets/flags/ir.svg @@ -0,0 +1,219 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/cmd/web/assets/flags/is.svg b/cmd/web/assets/flags/is.svg new file mode 100644 index 0000000..a6588af --- /dev/null +++ b/cmd/web/assets/flags/is.svg @@ -0,0 +1,12 @@ + + + + + + + + + + + + diff --git a/cmd/web/assets/flags/it.svg b/cmd/web/assets/flags/it.svg new file mode 100644 index 0000000..20a8bfd --- /dev/null +++ b/cmd/web/assets/flags/it.svg @@ -0,0 +1,7 @@ + + + + + + + diff --git a/cmd/web/assets/flags/je.svg b/cmd/web/assets/flags/je.svg new file mode 100644 index 0000000..70a8754 --- /dev/null +++ b/cmd/web/assets/flags/je.svg @@ -0,0 +1,62 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/cmd/web/assets/flags/jm.svg b/cmd/web/assets/flags/jm.svg new file mode 100644 index 0000000..269df03 --- /dev/null +++ b/cmd/web/assets/flags/jm.svg @@ -0,0 +1,8 @@ + + + + + + + + diff --git a/cmd/web/assets/flags/jo.svg b/cmd/web/assets/flags/jo.svg new file mode 100644 index 0000000..d6f927d --- /dev/null +++ b/cmd/web/assets/flags/jo.svg @@ -0,0 +1,16 @@ + + + + + + + + + + + + + + + + diff --git a/cmd/web/assets/flags/jp.svg b/cmd/web/assets/flags/jp.svg new file mode 100644 index 0000000..cc1c181 --- /dev/null +++ b/cmd/web/assets/flags/jp.svg @@ -0,0 +1,11 @@ + + + + + + + + + + + diff --git a/cmd/web/assets/flags/ke.svg b/cmd/web/assets/flags/ke.svg new file mode 100644 index 0000000..3a67ca3 --- /dev/null +++ b/cmd/web/assets/flags/ke.svg @@ -0,0 +1,23 @@ + + + + + + + + + + + + + + + + + + + + + + + diff --git a/cmd/web/assets/flags/kg.svg b/cmd/web/assets/flags/kg.svg new file mode 100644 index 0000000..e26db95 --- /dev/null +++ b/cmd/web/assets/flags/kg.svg @@ -0,0 +1,4 @@ + + + + diff --git a/cmd/web/assets/flags/kh.svg b/cmd/web/assets/flags/kh.svg new file mode 100644 index 0000000..a7d52f2 --- /dev/null +++ b/cmd/web/assets/flags/kh.svg @@ -0,0 +1,61 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/cmd/web/assets/flags/ki.svg b/cmd/web/assets/flags/ki.svg new file mode 100644 index 0000000..fda03f3 --- /dev/null +++ b/cmd/web/assets/flags/ki.svg @@ -0,0 +1,36 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/cmd/web/assets/flags/km.svg b/cmd/web/assets/flags/km.svg new file mode 100644 index 0000000..414d65e --- /dev/null +++ b/cmd/web/assets/flags/km.svg @@ -0,0 +1,16 @@ + + + + + + + + + + + + + + + + diff --git a/cmd/web/assets/flags/kn.svg b/cmd/web/assets/flags/kn.svg new file mode 100644 index 0000000..47fe64d --- /dev/null +++ b/cmd/web/assets/flags/kn.svg @@ -0,0 +1,14 @@ + + + + + + + + + + + + + + diff --git a/cmd/web/assets/flags/kp.svg b/cmd/web/assets/flags/kp.svg new file mode 100644 index 0000000..ad1b713 --- /dev/null +++ b/cmd/web/assets/flags/kp.svg @@ -0,0 +1,15 @@ + + + + + + + + + + + + + + + diff --git a/cmd/web/assets/flags/kr.svg b/cmd/web/assets/flags/kr.svg new file mode 100644 index 0000000..6947eab --- /dev/null +++ b/cmd/web/assets/flags/kr.svg @@ -0,0 +1,24 @@ + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/cmd/web/assets/flags/kw.svg b/cmd/web/assets/flags/kw.svg new file mode 100644 index 0000000..3dd89e9 --- /dev/null +++ b/cmd/web/assets/flags/kw.svg @@ -0,0 +1,13 @@ + + + + + + + + + + + + + diff --git a/cmd/web/assets/flags/ky.svg b/cmd/web/assets/flags/ky.svg new file mode 100644 index 0000000..aeaa7e0 --- /dev/null +++ b/cmd/web/assets/flags/ky.svg @@ -0,0 +1,103 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/cmd/web/assets/flags/kz.svg b/cmd/web/assets/flags/kz.svg new file mode 100644 index 0000000..2fac45b --- /dev/null +++ b/cmd/web/assets/flags/kz.svg @@ -0,0 +1,36 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/cmd/web/assets/flags/la.svg b/cmd/web/assets/flags/la.svg new file mode 100644 index 0000000..6aea6b7 --- /dev/null +++ b/cmd/web/assets/flags/la.svg @@ -0,0 +1,12 @@ + + + + + + + + + + + + diff --git a/cmd/web/assets/flags/lb.svg b/cmd/web/assets/flags/lb.svg new file mode 100644 index 0000000..bde2581 --- /dev/null +++ b/cmd/web/assets/flags/lb.svg @@ -0,0 +1,15 @@ + + + + + + + + + + + + + + + diff --git a/cmd/web/assets/flags/lc.svg b/cmd/web/assets/flags/lc.svg new file mode 100644 index 0000000..bb25654 --- /dev/null +++ b/cmd/web/assets/flags/lc.svg @@ -0,0 +1,8 @@ + + + + + + + + diff --git a/cmd/web/assets/flags/li.svg b/cmd/web/assets/flags/li.svg new file mode 100644 index 0000000..7a4d183 --- /dev/null +++ b/cmd/web/assets/flags/li.svg @@ -0,0 +1,43 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/cmd/web/assets/flags/lk.svg b/cmd/web/assets/flags/lk.svg new file mode 100644 index 0000000..cbd660a --- /dev/null +++ b/cmd/web/assets/flags/lk.svg @@ -0,0 +1,22 @@ + + + + + + + + + + + + + + + + + + + + + + diff --git a/cmd/web/assets/flags/lr.svg b/cmd/web/assets/flags/lr.svg new file mode 100644 index 0000000..e482ab9 --- /dev/null +++ b/cmd/web/assets/flags/lr.svg @@ -0,0 +1,14 @@ + + + + + + + + + + + + + + diff --git a/cmd/web/assets/flags/ls.svg b/cmd/web/assets/flags/ls.svg new file mode 100644 index 0000000..a7c01a9 --- /dev/null +++ b/cmd/web/assets/flags/ls.svg @@ -0,0 +1,8 @@ + + + + + + + + diff --git a/cmd/web/assets/flags/lt.svg b/cmd/web/assets/flags/lt.svg new file mode 100644 index 0000000..90ec5d2 --- /dev/null +++ b/cmd/web/assets/flags/lt.svg @@ -0,0 +1,7 @@ + + + + + + + diff --git a/cmd/web/assets/flags/lu.svg b/cmd/web/assets/flags/lu.svg new file mode 100644 index 0000000..cc12206 --- /dev/null +++ b/cmd/web/assets/flags/lu.svg @@ -0,0 +1,5 @@ + + + + + diff --git a/cmd/web/assets/flags/lv.svg b/cmd/web/assets/flags/lv.svg new file mode 100644 index 0000000..6a9e75e --- /dev/null +++ b/cmd/web/assets/flags/lv.svg @@ -0,0 +1,6 @@ + + + + + + diff --git a/cmd/web/assets/flags/ly.svg b/cmd/web/assets/flags/ly.svg new file mode 100644 index 0000000..1eaa51e --- /dev/null +++ b/cmd/web/assets/flags/ly.svg @@ -0,0 +1,13 @@ + + + + + + + + + + + + + diff --git a/cmd/web/assets/flags/ma.svg b/cmd/web/assets/flags/ma.svg new file mode 100644 index 0000000..7ce56ef --- /dev/null +++ b/cmd/web/assets/flags/ma.svg @@ -0,0 +1,4 @@ + + + + diff --git a/cmd/web/assets/flags/mc.svg b/cmd/web/assets/flags/mc.svg new file mode 100644 index 0000000..9cb6c9e --- /dev/null +++ b/cmd/web/assets/flags/mc.svg @@ -0,0 +1,6 @@ + + + + + + diff --git a/cmd/web/assets/flags/md.svg b/cmd/web/assets/flags/md.svg new file mode 100644 index 0000000..e9ba506 --- /dev/null +++ b/cmd/web/assets/flags/md.svg @@ -0,0 +1,70 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/cmd/web/assets/flags/me.svg b/cmd/web/assets/flags/me.svg new file mode 100644 index 0000000..297888c --- /dev/null +++ b/cmd/web/assets/flags/me.svg @@ -0,0 +1,116 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/cmd/web/assets/flags/mf.svg b/cmd/web/assets/flags/mf.svg new file mode 100644 index 0000000..6305edc --- /dev/null +++ b/cmd/web/assets/flags/mf.svg @@ -0,0 +1,5 @@ + + + + + diff --git a/cmd/web/assets/flags/mg.svg b/cmd/web/assets/flags/mg.svg new file mode 100644 index 0000000..5fa2d24 --- /dev/null +++ b/cmd/web/assets/flags/mg.svg @@ -0,0 +1,7 @@ + + + + + + + diff --git a/cmd/web/assets/flags/mh.svg b/cmd/web/assets/flags/mh.svg new file mode 100644 index 0000000..7b9f490 --- /dev/null +++ b/cmd/web/assets/flags/mh.svg @@ -0,0 +1,7 @@ + + + + + + + diff --git a/cmd/web/assets/flags/mk.svg b/cmd/web/assets/flags/mk.svg new file mode 100644 index 0000000..4f5cae7 --- /dev/null +++ b/cmd/web/assets/flags/mk.svg @@ -0,0 +1,5 @@ + + + + + diff --git a/cmd/web/assets/flags/ml.svg b/cmd/web/assets/flags/ml.svg new file mode 100644 index 0000000..6f6b716 --- /dev/null +++ b/cmd/web/assets/flags/ml.svg @@ -0,0 +1,7 @@ + + + + + + + diff --git a/cmd/web/assets/flags/mm.svg b/cmd/web/assets/flags/mm.svg new file mode 100644 index 0000000..42b4dee --- /dev/null +++ b/cmd/web/assets/flags/mm.svg @@ -0,0 +1,12 @@ + + + + + + + + + + + + diff --git a/cmd/web/assets/flags/mn.svg b/cmd/web/assets/flags/mn.svg new file mode 100644 index 0000000..6a38a71 --- /dev/null +++ b/cmd/web/assets/flags/mn.svg @@ -0,0 +1,14 @@ + + + + + + + + + + + + + + diff --git a/cmd/web/assets/flags/mo.svg b/cmd/web/assets/flags/mo.svg new file mode 100644 index 0000000..f638b6c --- /dev/null +++ b/cmd/web/assets/flags/mo.svg @@ -0,0 +1,9 @@ + + + + + + + + + diff --git a/cmd/web/assets/flags/mp.svg b/cmd/web/assets/flags/mp.svg new file mode 100644 index 0000000..26bfa22 --- /dev/null +++ b/cmd/web/assets/flags/mp.svg @@ -0,0 +1,86 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/cmd/web/assets/flags/mq.svg b/cmd/web/assets/flags/mq.svg new file mode 100644 index 0000000..b221951 --- /dev/null +++ b/cmd/web/assets/flags/mq.svg @@ -0,0 +1,5 @@ + + + + + diff --git a/cmd/web/assets/flags/mr.svg b/cmd/web/assets/flags/mr.svg new file mode 100644 index 0000000..d859972 --- /dev/null +++ b/cmd/web/assets/flags/mr.svg @@ -0,0 +1,6 @@ + + + + + + diff --git a/cmd/web/assets/flags/ms.svg b/cmd/web/assets/flags/ms.svg new file mode 100644 index 0000000..4367505 --- /dev/null +++ b/cmd/web/assets/flags/ms.svg @@ -0,0 +1,29 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/cmd/web/assets/flags/mt.svg b/cmd/web/assets/flags/mt.svg new file mode 100644 index 0000000..5d5d7c8 --- /dev/null +++ b/cmd/web/assets/flags/mt.svg @@ -0,0 +1,58 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/cmd/web/assets/flags/mu.svg b/cmd/web/assets/flags/mu.svg new file mode 100644 index 0000000..82d7a3b --- /dev/null +++ b/cmd/web/assets/flags/mu.svg @@ -0,0 +1,8 @@ + + + + + + + + diff --git a/cmd/web/assets/flags/mv.svg b/cmd/web/assets/flags/mv.svg new file mode 100644 index 0000000..10450f9 --- /dev/null +++ b/cmd/web/assets/flags/mv.svg @@ -0,0 +1,6 @@ + + + + + + diff --git a/cmd/web/assets/flags/mw.svg b/cmd/web/assets/flags/mw.svg new file mode 100644 index 0000000..137ff87 --- /dev/null +++ b/cmd/web/assets/flags/mw.svg @@ -0,0 +1,10 @@ + + + + + + + + + + diff --git a/cmd/web/assets/flags/mx.svg b/cmd/web/assets/flags/mx.svg new file mode 100644 index 0000000..e3ec2bc --- /dev/null +++ b/cmd/web/assets/flags/mx.svg @@ -0,0 +1,382 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/cmd/web/assets/flags/my.svg b/cmd/web/assets/flags/my.svg new file mode 100644 index 0000000..115f864 --- /dev/null +++ b/cmd/web/assets/flags/my.svg @@ -0,0 +1,26 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/cmd/web/assets/flags/mz.svg b/cmd/web/assets/flags/mz.svg new file mode 100644 index 0000000..0f94c3a --- /dev/null +++ b/cmd/web/assets/flags/mz.svg @@ -0,0 +1,21 @@ + + + + + + + + + + + + + + + + + + + + + diff --git a/cmd/web/assets/flags/na.svg b/cmd/web/assets/flags/na.svg new file mode 100644 index 0000000..35b9f78 --- /dev/null +++ b/cmd/web/assets/flags/na.svg @@ -0,0 +1,16 @@ + + + + + + + + + + + + + + + + diff --git a/cmd/web/assets/flags/nc.svg b/cmd/web/assets/flags/nc.svg new file mode 100644 index 0000000..fa15551 --- /dev/null +++ b/cmd/web/assets/flags/nc.svg @@ -0,0 +1,13 @@ + + + + + + + + + + + + + diff --git a/cmd/web/assets/flags/ne.svg b/cmd/web/assets/flags/ne.svg new file mode 100644 index 0000000..39a82b8 --- /dev/null +++ b/cmd/web/assets/flags/ne.svg @@ -0,0 +1,6 @@ + + + + + + diff --git a/cmd/web/assets/flags/nf.svg b/cmd/web/assets/flags/nf.svg new file mode 100644 index 0000000..fd61b25 --- /dev/null +++ b/cmd/web/assets/flags/nf.svg @@ -0,0 +1,9 @@ + + + + + + + + + diff --git a/cmd/web/assets/flags/ng.svg b/cmd/web/assets/flags/ng.svg new file mode 100644 index 0000000..81eb35f --- /dev/null +++ b/cmd/web/assets/flags/ng.svg @@ -0,0 +1,6 @@ + + + + + + diff --git a/cmd/web/assets/flags/ni.svg b/cmd/web/assets/flags/ni.svg new file mode 100644 index 0000000..e4861f5 --- /dev/null +++ b/cmd/web/assets/flags/ni.svg @@ -0,0 +1,129 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/cmd/web/assets/flags/nl.svg b/cmd/web/assets/flags/nl.svg new file mode 100644 index 0000000..e90f5b0 --- /dev/null +++ b/cmd/web/assets/flags/nl.svg @@ -0,0 +1,5 @@ + + + + + diff --git a/cmd/web/assets/flags/no.svg b/cmd/web/assets/flags/no.svg new file mode 100644 index 0000000..a5f2a15 --- /dev/null +++ b/cmd/web/assets/flags/no.svg @@ -0,0 +1,7 @@ + + + + + + + diff --git a/cmd/web/assets/flags/np.svg b/cmd/web/assets/flags/np.svg new file mode 100644 index 0000000..6242856 --- /dev/null +++ b/cmd/web/assets/flags/np.svg @@ -0,0 +1,13 @@ + + + + + + + + + + + + + diff --git a/cmd/web/assets/flags/nr.svg b/cmd/web/assets/flags/nr.svg new file mode 100644 index 0000000..ff394c4 --- /dev/null +++ b/cmd/web/assets/flags/nr.svg @@ -0,0 +1,12 @@ + + + + + + + + + + + + diff --git a/cmd/web/assets/flags/nu.svg b/cmd/web/assets/flags/nu.svg new file mode 100644 index 0000000..4067baf --- /dev/null +++ b/cmd/web/assets/flags/nu.svg @@ -0,0 +1,10 @@ + + + + + + + + + + diff --git a/cmd/web/assets/flags/nz.svg b/cmd/web/assets/flags/nz.svg new file mode 100644 index 0000000..935d8a7 --- /dev/null +++ b/cmd/web/assets/flags/nz.svg @@ -0,0 +1,36 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/cmd/web/assets/flags/om.svg b/cmd/web/assets/flags/om.svg new file mode 100644 index 0000000..4f1461a --- /dev/null +++ b/cmd/web/assets/flags/om.svg @@ -0,0 +1,115 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/cmd/web/assets/flags/pa.svg b/cmd/web/assets/flags/pa.svg new file mode 100644 index 0000000..8dc03bc --- /dev/null +++ b/cmd/web/assets/flags/pa.svg @@ -0,0 +1,14 @@ + + + + + + + + + + + + + + diff --git a/cmd/web/assets/flags/pc.svg b/cmd/web/assets/flags/pc.svg new file mode 100644 index 0000000..5202d6d --- /dev/null +++ b/cmd/web/assets/flags/pc.svg @@ -0,0 +1,33 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/cmd/web/assets/flags/pe.svg b/cmd/web/assets/flags/pe.svg new file mode 100644 index 0000000..33e6cfd --- /dev/null +++ b/cmd/web/assets/flags/pe.svg @@ -0,0 +1,4 @@ + + + + diff --git a/cmd/web/assets/flags/pf.svg b/cmd/web/assets/flags/pf.svg new file mode 100644 index 0000000..bea0354 --- /dev/null +++ b/cmd/web/assets/flags/pf.svg @@ -0,0 +1,19 @@ + + + + + + + + + + + + + + + + + + + diff --git a/cmd/web/assets/flags/pg.svg b/cmd/web/assets/flags/pg.svg new file mode 100644 index 0000000..7b7e77a --- /dev/null +++ b/cmd/web/assets/flags/pg.svg @@ -0,0 +1,9 @@ + + + + + + + + + diff --git a/cmd/web/assets/flags/ph.svg b/cmd/web/assets/flags/ph.svg new file mode 100644 index 0000000..b910e24 --- /dev/null +++ b/cmd/web/assets/flags/ph.svg @@ -0,0 +1,6 @@ + + + + + + diff --git a/cmd/web/assets/flags/pk.svg b/cmd/web/assets/flags/pk.svg new file mode 100644 index 0000000..4ddc19f --- /dev/null +++ b/cmd/web/assets/flags/pk.svg @@ -0,0 +1,15 @@ + + + + + + + + + + + + + + + diff --git a/cmd/web/assets/flags/pl.svg b/cmd/web/assets/flags/pl.svg new file mode 100644 index 0000000..0fa5145 --- /dev/null +++ b/cmd/web/assets/flags/pl.svg @@ -0,0 +1,6 @@ + + + + + + diff --git a/cmd/web/assets/flags/pm.svg b/cmd/web/assets/flags/pm.svg new file mode 100644 index 0000000..19a9330 --- /dev/null +++ b/cmd/web/assets/flags/pm.svg @@ -0,0 +1,5 @@ + + + + + diff --git a/cmd/web/assets/flags/pn.svg b/cmd/web/assets/flags/pn.svg new file mode 100644 index 0000000..209ea71 --- /dev/null +++ b/cmd/web/assets/flags/pn.svg @@ -0,0 +1,53 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/cmd/web/assets/flags/pr.svg b/cmd/web/assets/flags/pr.svg new file mode 100644 index 0000000..ec51831 --- /dev/null +++ b/cmd/web/assets/flags/pr.svg @@ -0,0 +1,13 @@ + + + + + + + + + + + + + diff --git a/cmd/web/assets/flags/ps.svg b/cmd/web/assets/flags/ps.svg new file mode 100644 index 0000000..362d435 --- /dev/null +++ b/cmd/web/assets/flags/ps.svg @@ -0,0 +1,6 @@ + + + + + + diff --git a/cmd/web/assets/flags/pt.svg b/cmd/web/assets/flags/pt.svg new file mode 100644 index 0000000..2767cd4 --- /dev/null +++ b/cmd/web/assets/flags/pt.svg @@ -0,0 +1,57 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/cmd/web/assets/flags/pw.svg b/cmd/web/assets/flags/pw.svg new file mode 100644 index 0000000..9f89c5f --- /dev/null +++ b/cmd/web/assets/flags/pw.svg @@ -0,0 +1,11 @@ + + + + + + + + + + + diff --git a/cmd/web/assets/flags/py.svg b/cmd/web/assets/flags/py.svg new file mode 100644 index 0000000..abccd87 --- /dev/null +++ b/cmd/web/assets/flags/py.svg @@ -0,0 +1,157 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/cmd/web/assets/flags/qa.svg b/cmd/web/assets/flags/qa.svg new file mode 100644 index 0000000..901f3fa --- /dev/null +++ b/cmd/web/assets/flags/qa.svg @@ -0,0 +1,4 @@ + + + + diff --git a/cmd/web/assets/flags/re.svg b/cmd/web/assets/flags/re.svg new file mode 100644 index 0000000..64e788e --- /dev/null +++ b/cmd/web/assets/flags/re.svg @@ -0,0 +1,5 @@ + + + + + diff --git a/cmd/web/assets/flags/ro.svg b/cmd/web/assets/flags/ro.svg new file mode 100644 index 0000000..fda0f7b --- /dev/null +++ b/cmd/web/assets/flags/ro.svg @@ -0,0 +1,7 @@ + + + + + + + diff --git a/cmd/web/assets/flags/rs.svg b/cmd/web/assets/flags/rs.svg new file mode 100644 index 0000000..6d4f74d --- /dev/null +++ b/cmd/web/assets/flags/rs.svg @@ -0,0 +1,292 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/cmd/web/assets/flags/ru.svg b/cmd/web/assets/flags/ru.svg new file mode 100644 index 0000000..cf24301 --- /dev/null +++ b/cmd/web/assets/flags/ru.svg @@ -0,0 +1,5 @@ + + + + + diff --git a/cmd/web/assets/flags/rw.svg b/cmd/web/assets/flags/rw.svg new file mode 100644 index 0000000..06e26ae --- /dev/null +++ b/cmd/web/assets/flags/rw.svg @@ -0,0 +1,13 @@ + + + + + + + + + + + + + diff --git a/cmd/web/assets/flags/sa.svg b/cmd/web/assets/flags/sa.svg new file mode 100644 index 0000000..596cf48 --- /dev/null +++ b/cmd/web/assets/flags/sa.svg @@ -0,0 +1,25 @@ + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/cmd/web/assets/flags/sb.svg b/cmd/web/assets/flags/sb.svg new file mode 100644 index 0000000..6066f94 --- /dev/null +++ b/cmd/web/assets/flags/sb.svg @@ -0,0 +1,13 @@ + + + + + + + + + + + + + diff --git a/cmd/web/assets/flags/sc.svg b/cmd/web/assets/flags/sc.svg new file mode 100644 index 0000000..9a46b36 --- /dev/null +++ b/cmd/web/assets/flags/sc.svg @@ -0,0 +1,7 @@ + + + + + + + diff --git a/cmd/web/assets/flags/sd.svg b/cmd/web/assets/flags/sd.svg new file mode 100644 index 0000000..12818b4 --- /dev/null +++ b/cmd/web/assets/flags/sd.svg @@ -0,0 +1,13 @@ + + + + + + + + + + + + + diff --git a/cmd/web/assets/flags/se.svg b/cmd/web/assets/flags/se.svg new file mode 100644 index 0000000..8ba745a --- /dev/null +++ b/cmd/web/assets/flags/se.svg @@ -0,0 +1,4 @@ + + + + diff --git a/cmd/web/assets/flags/sg.svg b/cmd/web/assets/flags/sg.svg new file mode 100644 index 0000000..c4dd4ac --- /dev/null +++ b/cmd/web/assets/flags/sg.svg @@ -0,0 +1,13 @@ + + + + + + + + + + + + + diff --git a/cmd/web/assets/flags/sh-ac.svg b/cmd/web/assets/flags/sh-ac.svg new file mode 100644 index 0000000..c43b301 --- /dev/null +++ b/cmd/web/assets/flags/sh-ac.svg @@ -0,0 +1,689 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/cmd/web/assets/flags/sh-hl.svg b/cmd/web/assets/flags/sh-hl.svg new file mode 100644 index 0000000..2150bf6 --- /dev/null +++ b/cmd/web/assets/flags/sh-hl.svg @@ -0,0 +1,164 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/cmd/web/assets/flags/sh-ta.svg b/cmd/web/assets/flags/sh-ta.svg new file mode 100644 index 0000000..ba39063 --- /dev/null +++ b/cmd/web/assets/flags/sh-ta.svg @@ -0,0 +1,76 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/cmd/web/assets/flags/sh.svg b/cmd/web/assets/flags/sh.svg new file mode 100644 index 0000000..7aba0ae --- /dev/null +++ b/cmd/web/assets/flags/sh.svg @@ -0,0 +1,7 @@ + + + + + + + diff --git a/cmd/web/assets/flags/si.svg b/cmd/web/assets/flags/si.svg new file mode 100644 index 0000000..1bbdd94 --- /dev/null +++ b/cmd/web/assets/flags/si.svg @@ -0,0 +1,18 @@ + + + + + + + + + + + + + + + + + + diff --git a/cmd/web/assets/flags/sj.svg b/cmd/web/assets/flags/sj.svg new file mode 100644 index 0000000..bb2799c --- /dev/null +++ b/cmd/web/assets/flags/sj.svg @@ -0,0 +1,7 @@ + + + + + + + diff --git a/cmd/web/assets/flags/sk.svg b/cmd/web/assets/flags/sk.svg new file mode 100644 index 0000000..676018e --- /dev/null +++ b/cmd/web/assets/flags/sk.svg @@ -0,0 +1,9 @@ + + + + + + + + + diff --git a/cmd/web/assets/flags/sl.svg b/cmd/web/assets/flags/sl.svg new file mode 100644 index 0000000..a07baf7 --- /dev/null +++ b/cmd/web/assets/flags/sl.svg @@ -0,0 +1,7 @@ + + + + + + + diff --git a/cmd/web/assets/flags/sm.svg b/cmd/web/assets/flags/sm.svg new file mode 100644 index 0000000..e41d2f7 --- /dev/null +++ b/cmd/web/assets/flags/sm.svg @@ -0,0 +1,75 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/cmd/web/assets/flags/sn.svg b/cmd/web/assets/flags/sn.svg new file mode 100644 index 0000000..7c0673d --- /dev/null +++ b/cmd/web/assets/flags/sn.svg @@ -0,0 +1,8 @@ + + + + + + + + diff --git a/cmd/web/assets/flags/so.svg b/cmd/web/assets/flags/so.svg new file mode 100644 index 0000000..a581ac6 --- /dev/null +++ b/cmd/web/assets/flags/so.svg @@ -0,0 +1,11 @@ + + + + + + + + + + + diff --git a/cmd/web/assets/flags/sr.svg b/cmd/web/assets/flags/sr.svg new file mode 100644 index 0000000..5e71c40 --- /dev/null +++ b/cmd/web/assets/flags/sr.svg @@ -0,0 +1,6 @@ + + + + + + diff --git a/cmd/web/assets/flags/ss.svg b/cmd/web/assets/flags/ss.svg new file mode 100644 index 0000000..b257aa0 --- /dev/null +++ b/cmd/web/assets/flags/ss.svg @@ -0,0 +1,8 @@ + + + + + + + + diff --git a/cmd/web/assets/flags/st.svg b/cmd/web/assets/flags/st.svg new file mode 100644 index 0000000..1294bcb --- /dev/null +++ b/cmd/web/assets/flags/st.svg @@ -0,0 +1,16 @@ + + + + + + + + + + + + + + + + diff --git a/cmd/web/assets/flags/sv.svg b/cmd/web/assets/flags/sv.svg new file mode 100644 index 0000000..cbc674a --- /dev/null +++ b/cmd/web/assets/flags/sv.svg @@ -0,0 +1,593 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/cmd/web/assets/flags/sx.svg b/cmd/web/assets/flags/sx.svg new file mode 100644 index 0000000..ac78561 --- /dev/null +++ b/cmd/web/assets/flags/sx.svg @@ -0,0 +1,56 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/cmd/web/assets/flags/sy.svg b/cmd/web/assets/flags/sy.svg new file mode 100644 index 0000000..97c05cf --- /dev/null +++ b/cmd/web/assets/flags/sy.svg @@ -0,0 +1,6 @@ + + + + + + diff --git a/cmd/web/assets/flags/sz.svg b/cmd/web/assets/flags/sz.svg new file mode 100644 index 0000000..eb538e4 --- /dev/null +++ b/cmd/web/assets/flags/sz.svg @@ -0,0 +1,34 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/cmd/web/assets/flags/tc.svg b/cmd/web/assets/flags/tc.svg new file mode 100644 index 0000000..1258971 --- /dev/null +++ b/cmd/web/assets/flags/tc.svg @@ -0,0 +1,50 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/cmd/web/assets/flags/td.svg b/cmd/web/assets/flags/td.svg new file mode 100644 index 0000000..fa3bd92 --- /dev/null +++ b/cmd/web/assets/flags/td.svg @@ -0,0 +1,7 @@ + + + + + + + diff --git a/cmd/web/assets/flags/tf.svg b/cmd/web/assets/flags/tf.svg new file mode 100644 index 0000000..fba2335 --- /dev/null +++ b/cmd/web/assets/flags/tf.svg @@ -0,0 +1,15 @@ + + + + + + + + + + + + + + + diff --git a/cmd/web/assets/flags/tg.svg b/cmd/web/assets/flags/tg.svg new file mode 100644 index 0000000..9d6ea6c --- /dev/null +++ b/cmd/web/assets/flags/tg.svg @@ -0,0 +1,14 @@ + + + + + + + + + + + + + + diff --git a/cmd/web/assets/flags/th.svg b/cmd/web/assets/flags/th.svg new file mode 100644 index 0000000..1e93a61 --- /dev/null +++ b/cmd/web/assets/flags/th.svg @@ -0,0 +1,7 @@ + + + + + + + diff --git a/cmd/web/assets/flags/tj.svg b/cmd/web/assets/flags/tj.svg new file mode 100644 index 0000000..f8c9a03 --- /dev/null +++ b/cmd/web/assets/flags/tj.svg @@ -0,0 +1,22 @@ + + + + + + + + + + + + + + + + + + + + + + diff --git a/cmd/web/assets/flags/tk.svg b/cmd/web/assets/flags/tk.svg new file mode 100644 index 0000000..05d3e86 --- /dev/null +++ b/cmd/web/assets/flags/tk.svg @@ -0,0 +1,5 @@ + + + + + diff --git a/cmd/web/assets/flags/tl.svg b/cmd/web/assets/flags/tl.svg new file mode 100644 index 0000000..3d0701a --- /dev/null +++ b/cmd/web/assets/flags/tl.svg @@ -0,0 +1,13 @@ + + + + + + + + + + + + + diff --git a/cmd/web/assets/flags/tm.svg b/cmd/web/assets/flags/tm.svg new file mode 100644 index 0000000..4154ed7 --- /dev/null +++ b/cmd/web/assets/flags/tm.svg @@ -0,0 +1,204 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/cmd/web/assets/flags/tn.svg b/cmd/web/assets/flags/tn.svg new file mode 100644 index 0000000..5735c19 --- /dev/null +++ b/cmd/web/assets/flags/tn.svg @@ -0,0 +1,4 @@ + + + + diff --git a/cmd/web/assets/flags/to.svg b/cmd/web/assets/flags/to.svg new file mode 100644 index 0000000..d072337 --- /dev/null +++ b/cmd/web/assets/flags/to.svg @@ -0,0 +1,10 @@ + + + + + + + + + + diff --git a/cmd/web/assets/flags/tr.svg b/cmd/web/assets/flags/tr.svg new file mode 100644 index 0000000..b96da21 --- /dev/null +++ b/cmd/web/assets/flags/tr.svg @@ -0,0 +1,8 @@ + + + + + + + + diff --git a/cmd/web/assets/flags/tt.svg b/cmd/web/assets/flags/tt.svg new file mode 100644 index 0000000..bc24938 --- /dev/null +++ b/cmd/web/assets/flags/tt.svg @@ -0,0 +1,5 @@ + + + + + diff --git a/cmd/web/assets/flags/tv.svg b/cmd/web/assets/flags/tv.svg new file mode 100644 index 0000000..675210e --- /dev/null +++ b/cmd/web/assets/flags/tv.svg @@ -0,0 +1,9 @@ + + + + + + + + + diff --git a/cmd/web/assets/flags/tw.svg b/cmd/web/assets/flags/tw.svg new file mode 100644 index 0000000..57fd98b --- /dev/null +++ b/cmd/web/assets/flags/tw.svg @@ -0,0 +1,34 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/cmd/web/assets/flags/tz.svg b/cmd/web/assets/flags/tz.svg new file mode 100644 index 0000000..a2cfbca --- /dev/null +++ b/cmd/web/assets/flags/tz.svg @@ -0,0 +1,13 @@ + + + + + + + + + + + + + diff --git a/cmd/web/assets/flags/ua.svg b/cmd/web/assets/flags/ua.svg new file mode 100644 index 0000000..a339eb1 --- /dev/null +++ b/cmd/web/assets/flags/ua.svg @@ -0,0 +1,6 @@ + + + + + + diff --git a/cmd/web/assets/flags/ug.svg b/cmd/web/assets/flags/ug.svg new file mode 100644 index 0000000..520eee5 --- /dev/null +++ b/cmd/web/assets/flags/ug.svg @@ -0,0 +1,30 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/cmd/web/assets/flags/um.svg b/cmd/web/assets/flags/um.svg new file mode 100644 index 0000000..9e9edda --- /dev/null +++ b/cmd/web/assets/flags/um.svg @@ -0,0 +1,9 @@ + + + + + + + + + diff --git a/cmd/web/assets/flags/un.svg b/cmd/web/assets/flags/un.svg new file mode 100644 index 0000000..632bbb4 --- /dev/null +++ b/cmd/web/assets/flags/un.svg @@ -0,0 +1,16 @@ + + + + + + + + + + + + + + + + diff --git a/cmd/web/assets/flags/us.svg b/cmd/web/assets/flags/us.svg new file mode 100644 index 0000000..9cfd0c9 --- /dev/null +++ b/cmd/web/assets/flags/us.svg @@ -0,0 +1,9 @@ + + + + + + + + + diff --git a/cmd/web/assets/flags/uy.svg b/cmd/web/assets/flags/uy.svg new file mode 100644 index 0000000..62c36f8 --- /dev/null +++ b/cmd/web/assets/flags/uy.svg @@ -0,0 +1,28 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/cmd/web/assets/flags/uz.svg b/cmd/web/assets/flags/uz.svg new file mode 100644 index 0000000..0ccca1b --- /dev/null +++ b/cmd/web/assets/flags/uz.svg @@ -0,0 +1,30 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/cmd/web/assets/flags/va.svg b/cmd/web/assets/flags/va.svg new file mode 100644 index 0000000..3e297d6 --- /dev/null +++ b/cmd/web/assets/flags/va.svg @@ -0,0 +1,190 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/cmd/web/assets/flags/vc.svg b/cmd/web/assets/flags/vc.svg new file mode 100644 index 0000000..f26c2d8 --- /dev/null +++ b/cmd/web/assets/flags/vc.svg @@ -0,0 +1,8 @@ + + + + + + + + diff --git a/cmd/web/assets/flags/ve.svg b/cmd/web/assets/flags/ve.svg new file mode 100644 index 0000000..314e7f5 --- /dev/null +++ b/cmd/web/assets/flags/ve.svg @@ -0,0 +1,26 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/cmd/web/assets/flags/vg.svg b/cmd/web/assets/flags/vg.svg new file mode 100644 index 0000000..ac90088 --- /dev/null +++ b/cmd/web/assets/flags/vg.svg @@ -0,0 +1,59 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/cmd/web/assets/flags/vi.svg b/cmd/web/assets/flags/vi.svg new file mode 100644 index 0000000..d88d68f --- /dev/null +++ b/cmd/web/assets/flags/vi.svg @@ -0,0 +1,28 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/cmd/web/assets/flags/vn.svg b/cmd/web/assets/flags/vn.svg new file mode 100644 index 0000000..7e4bac8 --- /dev/null +++ b/cmd/web/assets/flags/vn.svg @@ -0,0 +1,11 @@ + + + + + + + + + + + diff --git a/cmd/web/assets/flags/vu.svg b/cmd/web/assets/flags/vu.svg new file mode 100644 index 0000000..326d29e --- /dev/null +++ b/cmd/web/assets/flags/vu.svg @@ -0,0 +1,21 @@ + + + + + + + + + + + + + + + + + + + + + diff --git a/cmd/web/assets/flags/wf.svg b/cmd/web/assets/flags/wf.svg new file mode 100644 index 0000000..054c57d --- /dev/null +++ b/cmd/web/assets/flags/wf.svg @@ -0,0 +1,5 @@ + + + + + diff --git a/cmd/web/assets/flags/ws.svg b/cmd/web/assets/flags/ws.svg new file mode 100644 index 0000000..0e758a7 --- /dev/null +++ b/cmd/web/assets/flags/ws.svg @@ -0,0 +1,7 @@ + + + + + + + diff --git a/cmd/web/assets/flags/xk.svg b/cmd/web/assets/flags/xk.svg new file mode 100644 index 0000000..0e8958d --- /dev/null +++ b/cmd/web/assets/flags/xk.svg @@ -0,0 +1,5 @@ + + + + + diff --git a/cmd/web/assets/flags/xx.svg b/cmd/web/assets/flags/xx.svg new file mode 100644 index 0000000..9333be3 --- /dev/null +++ b/cmd/web/assets/flags/xx.svg @@ -0,0 +1,4 @@ + + + + diff --git a/cmd/web/assets/flags/ye.svg b/cmd/web/assets/flags/ye.svg new file mode 100644 index 0000000..1c9e6d6 --- /dev/null +++ b/cmd/web/assets/flags/ye.svg @@ -0,0 +1,7 @@ + + + + + + + diff --git a/cmd/web/assets/flags/yt.svg b/cmd/web/assets/flags/yt.svg new file mode 100644 index 0000000..e7776b3 --- /dev/null +++ b/cmd/web/assets/flags/yt.svg @@ -0,0 +1,5 @@ + + + + + diff --git a/cmd/web/assets/flags/za.svg b/cmd/web/assets/flags/za.svg new file mode 100644 index 0000000..d563adb --- /dev/null +++ b/cmd/web/assets/flags/za.svg @@ -0,0 +1,17 @@ + + + + + + + + + + + + + + + + + diff --git a/cmd/web/assets/flags/zm.svg b/cmd/web/assets/flags/zm.svg new file mode 100644 index 0000000..360f37a --- /dev/null +++ b/cmd/web/assets/flags/zm.svg @@ -0,0 +1,27 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/cmd/web/assets/flags/zw.svg b/cmd/web/assets/flags/zw.svg new file mode 100644 index 0000000..93aac4f --- /dev/null +++ b/cmd/web/assets/flags/zw.svg @@ -0,0 +1,21 @@ + + + + + + + + + + + + + + + + + + + + + diff --git a/cmd/web/bootstrap/config.go b/cmd/web/bootstrap/config.go index 087b001..4988e77 100644 --- a/cmd/web/bootstrap/config.go +++ b/cmd/web/bootstrap/config.go @@ -13,6 +13,7 @@ type Config struct { RateLimit config.RateLimitConfig `mapstructure:"rate_limiting"` UserAuth AuthConfig `mapstructure:"user_authorization"` CustomerAuth AuthConfig `mapstructure:"customer_authorization"` + Assets AssetsConfig `mapstructure:"assets"` } type AuthConfig struct { @@ -25,3 +26,7 @@ type JWTConfig struct { AccessExpiresIn int `mapstructure:"access_expires_in"` RefreshExpiresIn int `mapstructure:"refresh_expires_in"` } + +type AssetsConfig struct { + FlagsPath string `mapstructure:"flags_path"` +} diff --git a/cmd/web/config.yaml b/cmd/web/config.yaml index cb094e2..15c2b2c 100644 --- a/cmd/web/config.yaml +++ b/cmd/web/config.yaml @@ -47,4 +47,7 @@ logging: rate_limiting: requests_per_minute: 100 - burst: 20 \ No newline at end of file + burst: 20 + +assets: + flags_path: "./assets/flags" diff --git a/cmd/web/docs/docs.go b/cmd/web/docs/docs.go index e78a883..b61d4ae 100644 --- a/cmd/web/docs/docs.go +++ b/cmd/web/docs/docs.go @@ -1960,6 +1960,43 @@ const docTemplate = `{ } } }, + "/admin/v1/flags/{country_code}": { + "get": { + "security": [ + { + "BearerAuth": [] + } + ], + "description": "Retrieve a country flag by its 3-letter country code for admin panel", + "consumes": [ + "application/json" + ], + "produces": [ + "application/json" + ], + "tags": [ + "Admin Flags" + ], + "summary": "Get flag by country code (Admin)", + "parameters": [ + { + "type": "string", + "description": "3-letter country code (e.g., POL, GRC)", + "name": "country_code", + "in": "path", + "required": true + } + ], + "responses": { + "200": { + "description": "SVG content", + "schema": { + "type": "string" + } + } + } + } + }, "/admin/v1/health": { "get": { "description": "Get comprehensive server health status including system information, dependencies status, and performance metrics. This endpoint is used for monitoring and load balancer health checks.", @@ -4003,6 +4040,38 @@ const docTemplate = `{ } } }, + "/api/v1//{country_code}": { + "get": { + "description": "Retrieve only the SVG content of a country flag by its 3-letter country code", + "consumes": [ + "application/json" + ], + "produces": [ + "image/svg+xml" + ], + "tags": [ + "Flags" + ], + "summary": "Get flag SVG", + "parameters": [ + { + "type": "string", + "description": "3-letter country code (e.g., POL, GRC)", + "name": "country_code", + "in": "path", + "required": true + } + ], + "responses": { + "200": { + "description": "SVG content", + "schema": { + "type": "string" + } + } + } + } + }, "/api/v1/companies": { "get": { "security": [ @@ -6307,25 +6376,25 @@ const docTemplate = `{ "$ref": "#/definitions/customer.CompanySummary" } }, - "companyIDs": { + "company_ids": { "type": "array", "items": { "type": "string" } }, - "createdAt": { + "created_at": { "type": "integer" }, "email": { "type": "string" }, - "fullName": { + "full_name": { "type": "string" }, "id": { "type": "string" }, - "lastLoginAt": { + "last_login_at": { "type": "integer" }, "password": { @@ -6340,7 +6409,7 @@ const docTemplate = `{ "type": { "type": "string" }, - "updatedAt": { + "updated_at": { "type": "integer" }, "username": { @@ -7320,6 +7389,10 @@ const docTemplate = `{ "description": "Administrative inquiry management operations for web panel including CRUD operations, search, statistics, and comprehensive filtering with pagination", "name": "Admin-Inquiries" }, + { + "description": "Administrative flag management operations for web panel including flag listing and retrieval", + "name": "Admin-Flags" + }, { "description": "Customer authentication and authorization operations for mobile application including login, logout, token refresh, and profile access", "name": "Authorization" @@ -7343,6 +7416,10 @@ const docTemplate = `{ { "description": "Public inquiry management operations for mobile application including inquiry submission and inquiry listing", "name": "Inquiries" + }, + { + "description": "Public flag management operations for mobile application including flag retrieval and listing", + "name": "Flags" } ] }` diff --git a/cmd/web/docs/swagger.json b/cmd/web/docs/swagger.json index 9fc6e9b..8df8ae6 100644 --- a/cmd/web/docs/swagger.json +++ b/cmd/web/docs/swagger.json @@ -1954,6 +1954,43 @@ } } }, + "/admin/v1/flags/{country_code}": { + "get": { + "security": [ + { + "BearerAuth": [] + } + ], + "description": "Retrieve a country flag by its 3-letter country code for admin panel", + "consumes": [ + "application/json" + ], + "produces": [ + "application/json" + ], + "tags": [ + "Admin Flags" + ], + "summary": "Get flag by country code (Admin)", + "parameters": [ + { + "type": "string", + "description": "3-letter country code (e.g., POL, GRC)", + "name": "country_code", + "in": "path", + "required": true + } + ], + "responses": { + "200": { + "description": "SVG content", + "schema": { + "type": "string" + } + } + } + } + }, "/admin/v1/health": { "get": { "description": "Get comprehensive server health status including system information, dependencies status, and performance metrics. This endpoint is used for monitoring and load balancer health checks.", @@ -3997,6 +4034,38 @@ } } }, + "/api/v1//{country_code}": { + "get": { + "description": "Retrieve only the SVG content of a country flag by its 3-letter country code", + "consumes": [ + "application/json" + ], + "produces": [ + "image/svg+xml" + ], + "tags": [ + "Flags" + ], + "summary": "Get flag SVG", + "parameters": [ + { + "type": "string", + "description": "3-letter country code (e.g., POL, GRC)", + "name": "country_code", + "in": "path", + "required": true + } + ], + "responses": { + "200": { + "description": "SVG content", + "schema": { + "type": "string" + } + } + } + } + }, "/api/v1/companies": { "get": { "security": [ @@ -6301,25 +6370,25 @@ "$ref": "#/definitions/customer.CompanySummary" } }, - "companyIDs": { + "company_ids": { "type": "array", "items": { "type": "string" } }, - "createdAt": { + "created_at": { "type": "integer" }, "email": { "type": "string" }, - "fullName": { + "full_name": { "type": "string" }, "id": { "type": "string" }, - "lastLoginAt": { + "last_login_at": { "type": "integer" }, "password": { @@ -6334,7 +6403,7 @@ "type": { "type": "string" }, - "updatedAt": { + "updated_at": { "type": "integer" }, "username": { @@ -7314,6 +7383,10 @@ "description": "Administrative inquiry management operations for web panel including CRUD operations, search, statistics, and comprehensive filtering with pagination", "name": "Admin-Inquiries" }, + { + "description": "Administrative flag management operations for web panel including flag listing and retrieval", + "name": "Admin-Flags" + }, { "description": "Customer authentication and authorization operations for mobile application including login, logout, token refresh, and profile access", "name": "Authorization" @@ -7337,6 +7410,10 @@ { "description": "Public inquiry management operations for mobile application including inquiry submission and inquiry listing", "name": "Inquiries" + }, + { + "description": "Public flag management operations for mobile application including flag retrieval and listing", + "name": "Flags" } ] } \ No newline at end of file diff --git a/cmd/web/docs/swagger.yaml b/cmd/web/docs/swagger.yaml index 02d15ca..b0692d3 100644 --- a/cmd/web/docs/swagger.yaml +++ b/cmd/web/docs/swagger.yaml @@ -359,19 +359,19 @@ definitions: items: $ref: '#/definitions/customer.CompanySummary' type: array - companyIDs: + company_ids: items: type: string type: array - createdAt: + created_at: type: integer email: type: string - fullName: + full_name: type: string id: type: string - lastLoginAt: + last_login_at: type: integer password: type: string @@ -381,7 +381,7 @@ definitions: type: string type: type: string - updatedAt: + updated_at: type: integer username: type: string @@ -2242,6 +2242,30 @@ paths: summary: Get feedback by ID tags: - Admin-Feedback + /admin/v1/flags/{country_code}: + get: + consumes: + - application/json + description: Retrieve a country flag by its 3-letter country code for admin + panel + parameters: + - description: 3-letter country code (e.g., POL, GRC) + in: path + name: country_code + required: true + type: string + produces: + - application/json + responses: + "200": + description: SVG content + schema: + type: string + security: + - BearerAuth: [] + summary: Get flag by country code (Admin) + tags: + - Admin Flags /admin/v1/health: get: consumes: @@ -3557,6 +3581,28 @@ paths: summary: Update user status tags: - Admin-Users + /api/v1//{country_code}: + get: + consumes: + - application/json + description: Retrieve only the SVG content of a country flag by its 3-letter + country code + parameters: + - description: 3-letter country code (e.g., POL, GRC) + in: path + name: country_code + required: true + type: string + produces: + - image/svg+xml + responses: + "200": + description: SVG content + schema: + type: string + summary: Get flag SVG + tags: + - Flags /api/v1/companies: get: consumes: @@ -4681,6 +4727,9 @@ tags: - description: Administrative inquiry management operations for web panel including CRUD operations, search, statistics, and comprehensive filtering with pagination name: Admin-Inquiries +- description: Administrative flag management operations for web panel including flag + listing and retrieval + name: Admin-Flags - description: Customer authentication and authorization operations for mobile application including login, logout, token refresh, and profile access name: Authorization @@ -4699,3 +4748,6 @@ tags: - description: Public inquiry management operations for mobile application including inquiry submission and inquiry listing name: Inquiries +- description: Public flag management operations for mobile application including + flag retrieval and listing + name: Flags diff --git a/cmd/web/main.go b/cmd/web/main.go index 82dac19..35d4376 100644 --- a/cmd/web/main.go +++ b/cmd/web/main.go @@ -50,6 +50,9 @@ package main // @tag.name Admin-Inquiries // @tag.description Administrative inquiry management operations for web panel including CRUD operations, search, statistics, and comprehensive filtering with pagination +// @tag.name Admin-Flags +// @tag.description Administrative flag management operations for web panel including flag listing and retrieval + // @tag.name Authorization // @tag.description Customer authentication and authorization operations for mobile application including login, logout, token refresh, and profile access @@ -68,11 +71,15 @@ package main // @tag.name Inquiries // @tag.description Public inquiry management operations for mobile application including inquiry submission and inquiry listing +// @tag.name Flags +// @tag.description Public flag management operations for mobile application including flag retrieval and listing + import ( "context" "fmt" "net/http" "time" + "tm/internal/assets" "tm/internal/company" "tm/internal/company_category" "tm/internal/customer" @@ -129,7 +136,7 @@ func main() { tenderApprovalRepository := tender_approval.NewTenderApprovalRepository(mongoManager, logger) inquiryRepository := inquiry.NewInquiryRepository(mongoManager, logger) logger.Info("Repositories initialized successfully", map[string]interface{}{ - "repositories": []string{"customer", "user", "company", "category", "tender", "feedback", "tender_approval"}, + "repositories": []string{"customer", "user", "company", "category", "tender", "feedback", "tender_approval", "inquiry"}, }) // Initialize validation service @@ -144,8 +151,9 @@ func main() { feedbackService := feedback.NewFeedbackService(feedbackRepo, tenderService, logger) tenderApprovalService := tender_approval.NewTenderApprovalService(tenderApprovalRepository, tenderService, logger) inquiryService := inquiry.NewInquiryService(inquiryRepository, logger) + flagService := assets.NewFlagService(logger, conf.Assets.FlagsPath) logger.Info("Services initialized successfully", map[string]interface{}{ - "services": []string{"customer", "user", "company", "category", "tender", "feedback", "tender_approval"}, + "services": []string{"customer", "user", "company", "category", "tender", "feedback", "tender_approval", "inquiry", "flag"}, }) // Initialize handlers with services @@ -157,16 +165,17 @@ func main() { feedbackHandler := feedback.NewFeedbackHandler(feedbackService, userHandler, customerHandler, logger) tenderApprovalHandler := tender_approval.NewHandler(tenderApprovalService, logger) inquiryHandler := inquiry.NewHandler(inquiryService, logger) + flagHandler := assets.NewHandler(flagService, logger) logger.Info("Handlers initialized successfully", map[string]interface{}{ - "handlers": []string{"customer", "user", "company", "category", "tender", "feedback", "tender_approval"}, + "handlers": []string{"customer", "user", "company", "category", "tender", "feedback", "tender_approval", "inquiry", "flag"}, }) // Initialize HTTP server e := bootstrap.InitHTTPServer(conf, logger) // Register routes - router.RegisterAdminRoutes(e, userHandler, companyHandler, customerHandler, tenderHandler, feedbackHandler, tenderApprovalHandler, inquiryHandler, categoryHandler) - router.RegisterPublicRoutes(e, customerHandler, tenderHandler, feedbackHandler, tenderApprovalHandler, companyHandler, inquiryHandler, categoryHandler) + router.RegisterAdminRoutes(e, userHandler, companyHandler, customerHandler, tenderHandler, feedbackHandler, tenderApprovalHandler, inquiryHandler, categoryHandler, flagHandler) + router.RegisterPublicRoutes(e, customerHandler, tenderHandler, feedbackHandler, tenderApprovalHandler, companyHandler, inquiryHandler, categoryHandler, flagHandler) // Start server serverAddr := fmt.Sprintf("%s:%d", conf.Server.Host, conf.Server.Port) diff --git a/cmd/web/router/routes.go b/cmd/web/router/routes.go index 4bbd6e9..41741d0 100644 --- a/cmd/web/router/routes.go +++ b/cmd/web/router/routes.go @@ -1,6 +1,7 @@ package router import ( + "tm/internal/assets" "tm/internal/company" "tm/internal/company_category" "tm/internal/customer" @@ -13,7 +14,7 @@ import ( "github.com/labstack/echo/v4" ) -func RegisterAdminRoutes(e *echo.Echo, userHandler *user.Handler, companyHandler *company.Handler, customerHandler *customer.Handler, tenderHandler *tender.TenderHandler, feedbackHandler *feedback.Handler, tenderApprovalHandler *tender_approval.Handler, inquiryHandler *inquiry.Handler, categoryHandler *company_category.Handler) { +func RegisterAdminRoutes(e *echo.Echo, userHandler *user.Handler, companyHandler *company.Handler, customerHandler *customer.Handler, tenderHandler *tender.TenderHandler, feedbackHandler *feedback.Handler, tenderApprovalHandler *tender_approval.Handler, inquiryHandler *inquiry.Handler, categoryHandler *company_category.Handler, flagHandler *assets.Handler) { adminV1 := e.Group("/admin/v1") // Admin Users Routes @@ -120,9 +121,16 @@ func RegisterAdminRoutes(e *echo.Echo, userHandler *user.Handler, companyHandler inquiryGP.PUT("/:id/status", inquiryHandler.UpdateInquiryStatus) inquiryGP.DELETE("/:id", inquiryHandler.DeleteInquiry) } + + // Admin Flags Routes + flagsGP := adminV1.Group("/flags") + { + flagsGP.Use(userHandler.AuthMiddleware()) + flagsGP.GET("/:country_code", flagHandler.AdminGetFlagSVG) + } } -func RegisterPublicRoutes(e *echo.Echo, customerHandler *customer.Handler, tenderHandler *tender.TenderHandler, feedbackHandler *feedback.Handler, tenderApprovalHandler *tender_approval.Handler, companyHandler *company.Handler, inquiryHandler *inquiry.Handler, categoryHandler *company_category.Handler) { +func RegisterPublicRoutes(e *echo.Echo, customerHandler *customer.Handler, tenderHandler *tender.TenderHandler, feedbackHandler *feedback.Handler, tenderApprovalHandler *tender_approval.Handler, companyHandler *company.Handler, inquiryHandler *inquiry.Handler, categoryHandler *company_category.Handler, flagHandler *assets.Handler) { v1 := e.Group("/api/v1") customerGP := v1.Group("/profile") @@ -179,4 +187,10 @@ func RegisterPublicRoutes(e *echo.Echo, customerHandler *customer.Handler, tende { inquiryGP.POST("", inquiryHandler.CreateInquiry) } + + // Public Flags Routes + flagsGP := v1.Group("/flags") + { + flagsGP.GET("/:country_code", flagHandler.GetFlagSVG) + } } diff --git a/internal/assets/flag.go b/internal/assets/flag.go new file mode 100644 index 0000000..6cb7a5a --- /dev/null +++ b/internal/assets/flag.go @@ -0,0 +1,400 @@ +package assets + +import ( + "fmt" + "os" + "path/filepath" + "strings" +) + +// CountryCodeMapping maps 3-letter country codes to 2-letter ISO codes +var CountryCodeMapping = map[string]string{ + "POL": "pl", // Poland + "GRC": "gr", // Greece + "DEU": "de", // Germany + "FRA": "fr", // France + "ITA": "it", // Italy + "ESP": "es", // Spain + "GBR": "gb", // United Kingdom + "NLD": "nl", // Netherlands + "BEL": "be", // Belgium + "AUT": "at", // Austria + "SWE": "se", // Sweden + "DNK": "dk", // Denmark + "FIN": "fi", // Finland + "NOR": "no", // Norway + "IRL": "ie", // Ireland + "PRT": "pt", // Portugal + "CZE": "cz", // Czech Republic + "SVK": "sk", // Slovakia + "HUN": "hu", // Hungary + "ROU": "ro", // Romania + "BGR": "bg", // Bulgaria + "HRV": "hr", // Croatia + "SVN": "si", // Slovenia + "EST": "ee", // Estonia + "LVA": "lv", // Latvia + "LTU": "lt", // Lithuania + "LUX": "lu", // Luxembourg + "MLT": "mt", // Malta + "CYP": "cy", // Cyprus + "USA": "us", // United States + "CAN": "ca", // Canada + "AUS": "au", // Australia + "JPN": "jp", // Japan + "CHN": "cn", // China + "IND": "in", // India + "BRA": "br", // Brazil + "RUS": "ru", // Russia + "TUR": "tr", // Turkey + "UKR": "ua", // Ukraine + "EGY": "eg", // Egypt + "ZAF": "za", // South Africa + "NZL": "nz", // New Zealand + "KOR": "kr", // South Korea + "THA": "th", // Thailand + "SGP": "sg", // Singapore + "MYS": "my", // Malaysia + "IDN": "id", // Indonesia + "PHL": "ph", // Philippines + "VNM": "vn", // Vietnam + "CHL": "cl", // Chile + "ARG": "ar", // Argentina + "MEX": "mx", // Mexico + "PER": "pe", // Peru + "COL": "co", // Colombia + "VEN": "ve", // Venezuela + "ECU": "ec", // Ecuador + "BOL": "bo", // Bolivia + "URY": "uy", // Uruguay + "PRY": "py", // Paraguay + "GUY": "gy", // Guyana + "SUR": "sr", // Suriname + "ISR": "il", // Israel + "SAU": "sa", // Saudi Arabia + "ARE": "ae", // United Arab Emirates + "QAT": "qa", // Qatar + "KWT": "kw", // Kuwait + "BHR": "bh", // Bahrain + "OMN": "om", // Oman + "JOR": "jo", // Jordan + "LBN": "lb", // Lebanon + "SYR": "sy", // Syria + "IRQ": "iq", // Iraq + "IRN": "ir", // Iran + "AFG": "af", // Afghanistan + "PAK": "pk", // Pakistan + "BGD": "bd", // Bangladesh + "LKA": "lk", // Sri Lanka + "MDV": "mv", // Maldives + "BTN": "bt", // Bhutan + "NPL": "np", // Nepal + "MMR": "mm", // Myanmar + "LAO": "la", // Laos + "KHM": "kh", // Cambodia + "BRN": "bn", // Brunei + "TLS": "tl", // East Timor + "PNG": "pg", // Papua New Guinea + "FJI": "fj", // Fiji + "TON": "to", // Tonga + "WSM": "ws", // Samoa + "VUT": "vu", // Vanuatu + "SLB": "sb", // Solomon Islands + "KIR": "ki", // Kiribati + "TUV": "tv", // Tuvalu + "NRU": "nr", // Nauru + "PLW": "pw", // Palau + "FSM": "fm", // Federated States of Micronesia + "MHL": "mh", // Marshall Islands + "COK": "ck", // Cook Islands + "NIU": "nu", // Niue + "TKL": "tk", // Tokelau + "WLF": "wf", // Wallis and Futuna + "ASM": "as", // American Samoa + "GUM": "gu", // Guam + "MNP": "mp", // Northern Mariana Islands + "PRI": "pr", // Puerto Rico + "VIR": "vi", // U.S. Virgin Islands + "BHS": "bs", // Bahamas + "BLZ": "bz", // Belize + "CRI": "cr", // Costa Rica + "GTM": "gt", // Guatemala + "HND": "hn", // Honduras + "NIC": "ni", // Nicaragua + "PAN": "pa", // Panama + "SLV": "sv", // El Salvador + "JAM": "jm", // Jamaica + "HTI": "ht", // Haiti + "DOM": "do", // Dominican Republic + "CUB": "cu", // Cuba + "TTO": "tt", // Trinidad and Tobago + "BRB": "bb", // Barbados + "LCA": "lc", // Saint Lucia + "VCT": "vc", // Saint Vincent and the Grenadines + "GRD": "gd", // Grenada + "ATG": "ag", // Antigua and Barbuda + "DMA": "dm", // Dominica + "KNA": "kn", // Saint Kitts and Nevis + "BWA": "bw", // Botswana + "ZWE": "zw", // Zimbabwe + "ZMB": "zm", // Zambia + "MWI": "mw", // Malawi + "MOZ": "mz", // Mozambique + "MDG": "mg", // Madagascar + "MUS": "mu", // Mauritius + "SYC": "sc", // Seychelles + "COM": "km", // Comoros + "DJI": "dj", // Djibouti + "ERI": "er", // Eritrea + "ETH": "et", // Ethiopia + "KEN": "ke", // Kenya + "TZA": "tz", // Tanzania + "UGA": "ug", // Uganda + "RWA": "rw", // Rwanda + "BDI": "bi", // Burundi + "SSD": "ss", // South Sudan + "SDN": "sd", // Sudan + "LBY": "ly", // Libya + "TUN": "tn", // Tunisia + "DZA": "dz", // Algeria + "MAR": "ma", // Morocco + "ESH": "eh", // Western Sahara + "MRT": "mr", // Mauritania + "MLI": "ml", // Mali + "BFA": "bf", // Burkina Faso + "NER": "ne", // Niger + "TCD": "td", // Chad + "CAF": "cf", // Central African Republic + "CMR": "cm", // Cameroon + "GAB": "ga", // Gabon + "GNQ": "gq", // Equatorial Guinea + "STP": "st", // São Tomé and Príncipe + "GNB": "gw", // Guinea-Bissau + "GIN": "gn", // Guinea + "SLE": "sl", // Sierra Leone + "LBR": "lr", // Liberia + "CIV": "ci", // Ivory Coast + "GHA": "gh", // Ghana + "TGO": "tg", // Togo + "BEN": "bj", // Benin + "NGA": "ng", // Nigeria + "COG": "cg", // Republic of the Congo + "COD": "cd", // Democratic Republic of the Congo + "AGO": "ao", // Angola + "NAM": "na", // Namibia + "LSO": "ls", // Lesotho + "SWZ": "sz", // Eswatini +} + +// GetISOCode returns the 2-letter ISO code for a 3-letter country code +func GetISOCode(countryCode string) string { + if isoCode, exists := CountryCodeMapping[strings.ToUpper(countryCode)]; exists { + return isoCode + } + return "" // Return empty string if not found +} + +// IsValidCountryCode checks if a 3-letter country code is valid +func IsValidCountryCode(countryCode string) bool { + _, exists := CountryCodeMapping[strings.ToUpper(countryCode)] + return exists +} + +// GetCountryName returns the full country name for a 3-letter country code +func GetCountryName(countryCode string) string { + // This is a simplified mapping - in a real application, you might want to use a more comprehensive mapping + countryNames := map[string]string{ + "POL": "Poland", + "GRC": "Greece", + "DEU": "Germany", + "FRA": "France", + "ITA": "Italy", + "ESP": "Spain", + "GBR": "United Kingdom", + "NLD": "Netherlands", + "BEL": "Belgium", + "AUT": "Austria", + "SWE": "Sweden", + "DNK": "Denmark", + "FIN": "Finland", + "NOR": "Norway", + "IRL": "Ireland", + "PRT": "Portugal", + "CZE": "Czech Republic", + "SVK": "Slovakia", + "HUN": "Hungary", + "ROU": "Romania", + "BGR": "Bulgaria", + "HRV": "Croatia", + "SVN": "Slovenia", + "EST": "Estonia", + "LVA": "Latvia", + "LTU": "Lithuania", + "LUX": "Luxembourg", + "MLT": "Malta", + "CYP": "Cyprus", + "USA": "United States", + "CAN": "Canada", + "AUS": "Australia", + "JPN": "Japan", + "CHN": "China", + "IND": "India", + "BRA": "Brazil", + "RUS": "Russia", + "TUR": "Turkey", + "UKR": "Ukraine", + "EGY": "Egypt", + "ZAF": "South Africa", + "NZL": "New Zealand", + "KOR": "South Korea", + "THA": "Thailand", + "SGP": "Singapore", + "MYS": "Malaysia", + "IDN": "Indonesia", + "PHL": "Philippines", + "VNM": "Vietnam", + "CHL": "Chile", + "ARG": "Argentina", + "MEX": "Mexico", + "PER": "Peru", + "COL": "Colombia", + "VEN": "Venezuela", + "ECU": "Ecuador", + "BOL": "Bolivia", + "URY": "Uruguay", + "PRY": "Paraguay", + "GUY": "Guyana", + "SUR": "Suriname", + "ISR": "Israel", + "SAU": "Saudi Arabia", + "ARE": "United Arab Emirates", + "QAT": "Qatar", + "KWT": "Kuwait", + "BHR": "Bahrain", + "OMN": "Oman", + "JOR": "Jordan", + "LBN": "Lebanon", + "SYR": "Syria", + "IRQ": "Iraq", + "IRN": "Iran", + "AFG": "Afghanistan", + "PAK": "Pakistan", + "BGD": "Bangladesh", + "LKA": "Sri Lanka", + "MDV": "Maldives", + "BTN": "Bhutan", + "NPL": "Nepal", + "MMR": "Myanmar", + "LAO": "Laos", + "KHM": "Cambodia", + "BRN": "Brunei", + "TLS": "East Timor", + "PNG": "Papua New Guinea", + "FJI": "Fiji", + "TON": "Tonga", + "WSM": "Samoa", + "VUT": "Vanuatu", + "SLB": "Solomon Islands", + "KIR": "Kiribati", + "TUV": "Tuvalu", + "NRU": "Nauru", + "PLW": "Palau", + "FSM": "Federated States of Micronesia", + "MHL": "Marshall Islands", + "COK": "Cook Islands", + "NIU": "Niue", + "TKL": "Tokelau", + "WLF": "Wallis and Futuna", + "ASM": "American Samoa", + "GUM": "Guam", + "MNP": "Northern Mariana Islands", + "PRI": "Puerto Rico", + "VIR": "U.S. Virgin Islands", + "BHS": "Bahamas", + "BLZ": "Belize", + "CRI": "Costa Rica", + "GTM": "Guatemala", + "HND": "Honduras", + "NIC": "Nicaragua", + "PAN": "Panama", + "SLV": "El Salvador", + "JAM": "Jamaica", + "HTI": "Haiti", + "DOM": "Dominican Republic", + "CUB": "Cuba", + "TTO": "Trinidad and Tobago", + "BRB": "Barbados", + "LCA": "Saint Lucia", + "VCT": "Saint Vincent and the Grenadines", + "GRD": "Grenada", + "ATG": "Antigua and Barbuda", + "DMA": "Dominica", + "KNA": "Saint Kitts and Nevis", + "BWA": "Botswana", + "ZWE": "Zimbabwe", + "ZMB": "Zambia", + "MWI": "Malawi", + "MOZ": "Mozambique", + "MDG": "Madagascar", + "MUS": "Mauritius", + "SYC": "Seychelles", + "COM": "Comoros", + "DJI": "Djibouti", + "ERI": "Eritrea", + "ETH": "Ethiopia", + "KEN": "Kenya", + "TZA": "Tanzania", + "UGA": "Uganda", + "RWA": "Rwanda", + "BDI": "Burundi", + "SSD": "South Sudan", + "SDN": "Sudan", + "LBY": "Libya", + "TUN": "Tunisia", + "DZA": "Algeria", + "MAR": "Morocco", + "ESH": "Western Sahara", + "MRT": "Mauritania", + "MLI": "Mali", + "BFA": "Burkina Faso", + "NER": "Niger", + "TCD": "Chad", + "CAF": "Central African Republic", + "CMR": "Cameroon", + "GAB": "Gabon", + "GNQ": "Equatorial Guinea", + "STP": "São Tomé and Príncipe", + "GNB": "Guinea-Bissau", + "GIN": "Guinea", + "SLE": "Sierra Leone", + "LBR": "Liberia", + "CIV": "Ivory Coast", + "GHA": "Ghana", + "TGO": "Togo", + "BEN": "Benin", + "NGA": "Nigeria", + "COG": "Republic of the Congo", + "COD": "Democratic Republic of the Congo", + "AGO": "Angola", + "NAM": "Namibia", + "LSO": "Lesotho", + "SWZ": "Eswatini", + } + + if name, exists := countryNames[strings.ToUpper(countryCode)]; exists { + return name + } + return countryCode // Return the code itself if name not found +} + +// GetFlagAsset returns the flag SVG asset from filesystem +func GetFlagAsset(flagsPath, isoCode string) ([]byte, error) { + flagPath := filepath.Join(flagsPath, strings.ToLower(isoCode)+".svg") + + f, err := os.ReadFile(flagPath) + if err != nil { + return nil, fmt.Errorf("failed to read flag asset, %v", flagPath) + } + + return f, nil +} diff --git a/internal/assets/handler.go b/internal/assets/handler.go new file mode 100644 index 0000000..abd84ec --- /dev/null +++ b/internal/assets/handler.go @@ -0,0 +1,65 @@ +package assets + +import ( + "net/http" + + "tm/pkg/logger" + + "github.com/labstack/echo/v4" +) + +// Handler handles HTTP requests for flag operations +type Handler struct { + service Service + logger logger.Logger +} + +// NewHandler creates a new flag handler +func NewHandler(service Service, logger logger.Logger) *Handler { + return &Handler{ + service: service, + logger: logger, + } +} + +// **************************** PUBLIC ENDPOINTS **************************** +// GetFlagSVG returns only the SVG content of a flag +// @Summary Get flag SVG +// @Description Retrieve only the SVG content of a country flag by its 3-letter country code +// @Tags Flags +// @Accept json +// @Produce image/svg+xml +// @Param country_code path string true "3-letter country code (e.g., POL, GRC)" +// @Success 200 {string} string "SVG content" +// @Router /api/v1//{country_code} [get] +func (h *Handler) GetFlagSVG(c echo.Context) error { + countryCode := c.Param("country_code") + + svgData := h.service.GetFlagSVG(c.Request().Context(), countryCode) + + c.Response().Header().Set("Content-Type", "image/svg+xml") + c.Response().Header().Set("Cache-Control", "public, max-age=86400") // Cache for 24 hours + return c.String(http.StatusOK, svgData) +} + +// **************************** ADMIN ENDPOINTS **************************** + +// AdminGetFlag returns a flag by country code (Admin) +// @Summary Get flag by country code (Admin) +// @Description Retrieve a country flag by its 3-letter country code for admin panel +// @Tags Admin Flags +// @Accept json +// @Produce json +// @Param country_code path string true "3-letter country code (e.g., POL, GRC)" +// @Success 200 {string} string "SVG content" +// @Security BearerAuth +// @Router /admin/v1/flags/{country_code} [get] +func (h *Handler) AdminGetFlagSVG(c echo.Context) error { + countryCode := c.Param("country_code") + + svgData := h.service.GetFlagSVG(c.Request().Context(), countryCode) + + c.Response().Header().Set("Content-Type", "image/svg+xml") + c.Response().Header().Set("Cache-Control", "public, max-age=86400") // Cache for 24 hours + return c.String(http.StatusOK, svgData) +} diff --git a/internal/assets/service.go b/internal/assets/service.go new file mode 100644 index 0000000..497b712 --- /dev/null +++ b/internal/assets/service.go @@ -0,0 +1,95 @@ +package assets + +import ( + "context" + "fmt" + "strings" + + "tm/pkg/logger" +) + +// Service defines business logic for flag operations +type Service interface { + // Get flag as SVG content only + GetFlagSVG(ctx context.Context, countryCode string) string +} + +// flagService implements the Service interface +type flagService struct { + logger logger.Logger + flagsPath string +} + +// NewFlagService creates a new flag service +func NewFlagService(logger logger.Logger, flagsPath string) Service { + return &flagService{ + logger: logger, + flagsPath: flagsPath, + } +} + +// GetFlagSVG retrieves only the SVG content for a flag +func (s *flagService) GetFlagSVG(ctx context.Context, countryCode string) string { + s.logger.Info("Getting flag SVG for country", map[string]interface{}{ + "country_code": countryCode, + }) + + // Normalize country code + countryCode = strings.ToUpper(countryCode) + + defaultFlag, err := GetFlagAsset(s.flagsPath, "eu") + if err != nil { + s.logger.Error("Failed to get default flag SVG", map[string]interface{}{ + "country_code": countryCode, + "error": err.Error(), + }) + return s.getDefaultFlag() + } + + // Get ISO code + isoCode := GetISOCode(countryCode) + + // Get SVG data + svgData, err := s.getFlagSVG(isoCode) + if err != nil { + s.logger.Error("Failed to get flag SVG", map[string]interface{}{ + "country_code": countryCode, + "iso_code": isoCode, + "error": err.Error(), + }) + return string(defaultFlag) + } + + s.logger.Info("Successfully retrieved flag SVG", map[string]interface{}{ + "country_code": countryCode, + "iso_code": isoCode, + }) + + return svgData +} + +// getFlagSVG retrieves the SVG content for a given ISO code +func (s *flagService) getFlagSVG(isoCode string) (string, error) { + // Try to get from filesystem + svgData, err := GetFlagAsset(s.flagsPath, isoCode) + if err == nil { + return string(svgData), nil + } + + // If not found in filesystem, return error + s.logger.Warn("Flag not found in filesystem", map[string]interface{}{ + "iso_code": isoCode, + "path": s.flagsPath, + }) + + return "", fmt.Errorf("failed to get flag SVG, %v from %v", isoCode, s.flagsPath) +} + +// getDefaultFlag returns a default flag SVG when all fallbacks fail +func (s *flagService) getDefaultFlag() string { + // Return a simple default flag SVG + return ` + + EU +` +}