From 63617624bd7430dc00a11c6b3b827d9f32b425fa Mon Sep 17 00:00:00 2001 From: sneedmaster Date: Wed, 24 Jul 2024 13:08:08 +0200 Subject: [PATCH] /reg/ --- Nekrochan.toml.template | 1 + src/cfg.rs | 1 + src/db/banner.rs | 2 +- src/db/board.rs | 1 + src/db/models.rs | 1 + src/db/post.rs | 6 ++-- src/web/actions/appeal_ban.rs | 2 +- src/web/actions/create_post.rs | 3 +- src/web/actions/report_posts.rs | 2 +- src/web/actions/user_post_actions.rs | 2 +- src/web/staff/actions/update_board_config.rs | 3 ++ src/web/tcx.rs | 31 ++++++++++++++----- static/flags/reg/10.png | Bin 0 -> 1027 bytes static/flags/reg/20.png | Bin 0 -> 1042 bytes static/flags/reg/31.png | Bin 0 -> 1045 bytes static/flags/reg/32.png | Bin 0 -> 1045 bytes static/flags/reg/41.png | Bin 0 -> 1045 bytes static/flags/reg/42.png | Bin 0 -> 1042 bytes static/flags/reg/51.png | Bin 0 -> 1045 bytes static/flags/reg/52.png | Bin 0 -> 1045 bytes static/flags/reg/53.png | Bin 0 -> 1042 bytes static/flags/reg/63.png | Bin 0 -> 1042 bytes static/flags/reg/64.png | Bin 0 -> 1045 bytes static/flags/reg/71.png | Bin 0 -> 1042 bytes static/flags/reg/72.png | Bin 0 -> 1045 bytes static/flags/reg/80.png | Bin 0 -> 1045 bytes static/flags/reg/kralovec.png | Bin 0 -> 1039 bytes static/flags/reg/xx.png | Bin 0 -> 447 bytes templates/macros/post.html | 5 +++ templates/staff/board-config.html | 9 ++++++ 30 files changed, 55 insertions(+), 14 deletions(-) create mode 100644 static/flags/reg/10.png create mode 100644 static/flags/reg/20.png create mode 100644 static/flags/reg/31.png create mode 100644 static/flags/reg/32.png create mode 100644 static/flags/reg/41.png create mode 100644 static/flags/reg/42.png create mode 100644 static/flags/reg/51.png create mode 100644 static/flags/reg/52.png create mode 100644 static/flags/reg/53.png create mode 100644 static/flags/reg/63.png create mode 100644 static/flags/reg/64.png create mode 100644 static/flags/reg/71.png create mode 100644 static/flags/reg/72.png create mode 100644 static/flags/reg/80.png create mode 100644 static/flags/reg/kralovec.png create mode 100755 static/flags/reg/xx.png diff --git a/Nekrochan.toml.template b/Nekrochan.toml.template index 06f3fba..9e513e9 100755 --- a/Nekrochan.toml.template +++ b/Nekrochan.toml.template @@ -33,6 +33,7 @@ reply_limit = 1000 locked = false user_ids = false flags = false +flags_reg = false thread_captcha = "off" reply_captcha = "off" board_theme = "yotsuba.css" diff --git a/src/cfg.rs b/src/cfg.rs index f049f72..d1cc5f8 100755 --- a/src/cfg.rs +++ b/src/cfg.rs @@ -64,6 +64,7 @@ pub struct BoardCfg { pub locked: bool, pub user_ids: bool, pub flags: bool, + pub flags_reg: bool, pub thread_captcha: String, pub reply_captcha: String, pub board_theme: String, diff --git a/src/db/banner.rs b/src/db/banner.rs index ab2b68f..46ecba9 100644 --- a/src/db/banner.rs +++ b/src/db/banner.rs @@ -20,7 +20,7 @@ impl Banner { pub async fn read(ctx: &Ctx, id: i32) -> Result, NekrochanError> { let banners: Vec = ctx.cache().zrangebyscore("banners", id, id).await?; - let json = banners.get(0); + let json = banners.first(); let banner = match json { Some(json) => Some(serde_json::from_str(json)?), diff --git a/src/db/board.rs b/src/db/board.rs index f701333..7fef431 100755 --- a/src/db/board.rs +++ b/src/db/board.rs @@ -37,6 +37,7 @@ impl Board { files JSONB NOT NULL, password VARCHAR(64) DEFAULT NULL, country VARCHAR(2) NOT NULL, + region VARCHAR(64) NOT NULL, ip INET NOT NULL, bumps INT NOT NULL DEFAULT 0, replies INT NOT NULL DEFAULT 0, diff --git a/src/db/models.rs b/src/db/models.rs index 797ce19..3e21838 100755 --- a/src/db/models.rs +++ b/src/db/models.rs @@ -60,6 +60,7 @@ pub struct Post { pub files: Json>, pub password: String, pub country: String, + pub region: Option, pub ip: IpAddr, pub bumps: i32, pub replies: i32, diff --git a/src/db/post.rs b/src/db/post.rs index 8dfd198..1fde8f8 100755 --- a/src/db/post.rs +++ b/src/db/post.rs @@ -27,13 +27,14 @@ impl Post { files: Vec, password: String, country: String, + region: Option, ip: IpAddr, bump: bool, ) -> Result { let post: Post = query_as(&format!( r#"INSERT INTO posts_{} - (thread, name, tripcode, capcode, email, content, content_nomarkup, files, password, country, ip) - VALUES ($1, $2, $3, $4, $5, $6, $7, $8, $9, $10, $11) + (thread, name, tripcode, capcode, email, content, content_nomarkup, files, password, country, region, ip) + VALUES ($1, $2, $3, $4, $5, $6, $7, $8, $9, $10, $11, $12) RETURNING *"#, board.id) ) .bind(thread) @@ -46,6 +47,7 @@ impl Post { .bind(Json(files)) .bind(password) .bind(country) + .bind(region) .bind(ip) .fetch_one(ctx.db()) .await?; diff --git a/src/web/actions/appeal_ban.rs b/src/web/actions/appeal_ban.rs index e6e02f9..4567dfe 100644 --- a/src/web/actions/appeal_ban.rs +++ b/src/web/actions/appeal_ban.rs @@ -26,7 +26,7 @@ pub async fn appeal_ban( QsForm(form): QsForm, ) -> Result { let tcx = TemplateCtx::new(&ctx, &req).await?; - let (ip, _) = ip_from_req(&req)?; + let (ip, _, _) = ip_from_req(&req)?; let ban = Ban::read_by_id(&ctx, form.id) .await? diff --git a/src/web/actions/create_post.rs b/src/web/actions/create_post.rs index b138249..bec8c02 100644 --- a/src/web/actions/create_post.rs +++ b/src/web/actions/create_post.rs @@ -49,7 +49,7 @@ pub async fn create_post( None => PermissionWrapper::new(0, false), }; - let (ip, country) = ip_from_req(&req)?; + let (ip, country, region) = ip_from_req(&req)?; let board = form.board.0; let board = Board::read(&ctx, board.clone()) @@ -238,6 +238,7 @@ pub async fn create_post( files, password, country, + region, ip, bump, ) diff --git a/src/web/actions/report_posts.rs b/src/web/actions/report_posts.rs index b98347b..68e5821 100644 --- a/src/web/actions/report_posts.rs +++ b/src/web/actions/report_posts.rs @@ -29,7 +29,7 @@ pub async fn report_posts( QsForm(form): QsForm, ) -> Result { let tcx = TemplateCtx::new(&ctx, &req).await?; - let (reporter_ip, reporter_country) = ip_from_req(&req)?; + let (reporter_ip, reporter_country, _) = ip_from_req(&req)?; let bans = Ban::read_by_ip(&ctx, reporter_ip).await?; if let Some(ban) = bans.get(&None) { diff --git a/src/web/actions/user_post_actions.rs b/src/web/actions/user_post_actions.rs index 6c9f580..c301f8f 100644 --- a/src/web/actions/user_post_actions.rs +++ b/src/web/actions/user_post_actions.rs @@ -34,7 +34,7 @@ pub async fn user_post_actions( QsForm(form): QsForm, ) -> Result { let tcx = TemplateCtx::new(&ctx, &req).await?; - let (ip, _) = ip_from_req(&req)?; + let (ip, _, _) = ip_from_req(&req)?; let bans = Ban::read_by_ip(&ctx, ip).await?; if let Some(ban) = bans.get(&None) { diff --git a/src/web/staff/actions/update_board_config.rs b/src/web/staff/actions/update_board_config.rs index bce3864..8b19081 100755 --- a/src/web/staff/actions/update_board_config.rs +++ b/src/web/staff/actions/update_board_config.rs @@ -18,6 +18,7 @@ pub struct UpdateBoardConfigForm { locked: Option, user_ids: Option, flags: Option, + flags_reg: Option, thread_captcha: String, reply_captcha: String, board_theme: String, @@ -58,6 +59,7 @@ pub async fn update_board_config( let locked = form.locked.is_some(); let user_ids = form.user_ids.is_some(); let flags = form.flags.is_some(); + let flags_reg = form.flags_reg.is_some(); let thread_captcha = form.thread_captcha; let reply_captcha = form.reply_captcha; let board_theme = form.board_theme; @@ -81,6 +83,7 @@ pub async fn update_board_config( locked, user_ids, flags, + flags_reg, thread_captcha, reply_captcha, board_theme, diff --git a/src/web/tcx.rs b/src/web/tcx.rs index e721af0..9c659f2 100755 --- a/src/web/tcx.rs +++ b/src/web/tcx.rs @@ -34,7 +34,7 @@ impl TemplateCtx { None => PermissionWrapper::new(0, false), }; - let (ip, _) = ip_from_req(req)?; + let (ip, _, _) = ip_from_req(req)?; let yous = ctx.cache().zrange(format!("by_ip:{ip}"), 0, -1).await?; let account = account.map(|account| account.username); @@ -99,7 +99,7 @@ pub async fn account_from_auth_opt( Ok(account) } -pub fn ip_from_req(req: &HttpRequest) -> Result<(IpAddr, String), NekrochanError> { +pub fn ip_from_req(req: &HttpRequest) -> Result<(IpAddr, String, Option), NekrochanError> { let ip = req .connection_info() .realip_remote_addr() @@ -107,10 +107,27 @@ pub fn ip_from_req(req: &HttpRequest) -> Result<(IpAddr, String), NekrochanError ip.parse().unwrap_or(IpAddr::V4(Ipv4Addr::UNSPECIFIED)) }); - let country = req.headers().get("X-Country-Code").map_or_else( - || "xx".into(), - |hdr| hdr.to_str().unwrap_or("xx").to_ascii_lowercase(), - ); + let country = req + .headers() + .get("X-Country-Code") + .and_then(|hdr| hdr.to_str().ok()) + .unwrap_or("xx") + .to_ascii_lowercase(); - Ok((ip, country)) + let region = req + .headers() + .get("X-Region-Code") + .and_then(|hdr| hdr.to_str().ok()) + .unwrap_or("xx") + .to_ascii_lowercase(); + + let region = if country == "cz" { + Some(region) + } else if country == "ru" && region == "kgd" { + Some("kralovec".into()) + } else { + None + }; + + Ok((ip, country, region)) } diff --git a/static/flags/reg/10.png b/static/flags/reg/10.png new file mode 100644 index 0000000000000000000000000000000000000000..11fafc8d95af98a9b4807b529e8997d2bb8b8b9c GIT binary patch literal 1027 zcmZ9KdrVVz6vuzaCa<9|5g1Y_x4rlF&25VymC3-Cw&P)ivicYbr7aeRlu~p!R8aSD zZ|COR=5%i#OZ<1qmbqkGHaDcD76fIkLV?nEX?xqkWOsKlSu+1P=bQ7*`J9uJoRf-r zX?kj2DgYo|E)zG9nn6Zdaw3^4%a_wgp|;5y>Hs)|05EU@fF;rzm^Dv#X=jt0o@#CTZg#T>)gpv zj(sB6@;kUYndSHKL*Cket1%khxwyD17H?WyQpVy+JlYtGs3HN?f=9I!QAR_h_Pg0* zg1=}OIK7PL=x}=TWS4S3GBQZ4|(?!Bsd_hnArN?pU`0e#WW{TS*jpBO0 zr^D;j`4@B^{~mXs*&Ar_2ed)oUOZ?ZmW_B=VYAV0jvyib*1zM1sJ|Nz?vF>iV$qH$ z-X0F=7J`~^Kp*k#i~Eg4+!*yK#>`0g#|mOnO-%I@ca9K$9ww&yiK#x~4-;{_o0#Y! zZXFfU`Es%LL-6n=?k~KeX z1k=2=-crQH=TEb-Sw1!^;Mv(MJDYO{f$uSpDJIhnF=rS|7q4In&6we?a~9Fun9yBR zGRx&ok(~_IJ(OcdnbQdBKpC?%jsrqxXnAu;&O9sM!=d{)d=E!B$6`8A#DTCJ2xkW7 zIOxn-I_!iIC&YGAQ5Qt?>e; z3lJZb5~NcIg4q4_`Cjr%64W(P@s(>URoBQO#UR_!1Hh`E{*8oRyDn)+Gsz^clO)Y2 z<)#P|dzLS-Nb485xKf!sp70$I6Xb{$iH|(GGATJFHSMwVRjWZp=HqL!)@JAAK9RRB zpR&FHPzxa%9Y#MJ%b7%H&Vi)YjF5 zt%_|8jmoB`XH?sF?A-NiGuXYSrB&Ug(P%Zg_PzR!ec-vy{auD`qp`=-d*I;neTTpc z{fCbn9T*%ucKpPPFTMQAN$~1xufOr;TW_Cw=k&Ypoq7N42jIhx&V79T!Y7}8_W2iI zes%HE<@$>v&6(qa-;fuL9r4m6AAeu0iTUwA`DyY zy6pTP(AlNY>-ru71Okzu1CK(`? L)QhiHwH*5gI!(5; literal 0 HcmV?d00001 diff --git a/static/flags/reg/20.png b/static/flags/reg/20.png new file mode 100644 index 0000000000000000000000000000000000000000..31e16099a45276f48a83518cfc6d6774c79ae526 GIT binary patch literal 1042 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 Zm4PutkI1?=z*NA%;OXk;vd$@?2>`x>ZZQA= literal 0 HcmV?d00001 diff --git a/static/flags/reg/41.png b/static/flags/reg/41.png new file mode 100644 index 0000000000000000000000000000000000000000..05361531fd98f330b2ddb8f85f7e85ac5be89104 GIT binary patch literal 1045 zcmeAS@N?(olHy`uVBq!ia0vp^0zk~o!3-oFZT@ltDTQQ@AYTTCDm4a%h86~fUqGRT z7Yq!g1`G_Z5*Qe)W-u^_7tGleXv4t3Bpl!q;@ZzF+rz*=gMoW419v|I(+n1Y=?r`s zjAlm8s~ID1GbB7?NPo}Zca0(b6>t1|R_}YQ3|trNeJ+^Vt`w5I5fr^n#qf-#&1$FY zxVp<4eVL@?fVfm0|F_RraQ^9s;-v?|3wt`k5|;*t zPV(|zU0n40@|C{$!fwm-0zOZM;QJ;s{;N&DZ8HBLgStiN^8GRskNfuSo$emA)7WTx zP{RMqkN>}XJKNKLv%bq51}TQfHswwng7}AZrHE;&sTjxcm99p#w+*NU)|^){C~m9 zv#DwScdwn}=lFlknl@e$Cg-Q3F<%&hZn7soVhF#>67`rn_PLzHnpEAWVpgFpZjmwu zhHPHmBo6j|CDk$p=Kufy2VMB#1WY%KN#5=*8=O=K;D%*B7_YXOChdAc};a9n5H&EWDMXao~83o9Et2PYRd4=*1-gMgrr zu!yLbxP+vXw2Z8rJcELwlCp}bn!1LjmbQ+ro<4(tp^>qPshPQjrIodft(`rCgQJtP zi>sTvho_gfkFTFULqK3qa7buactm7WbWChqJVQcaQgTXaT6#uiR(4KqUOq!XVNr2O zX<2ziWmR=eZCyP>Lt|5OOKV$uM`u@ePj6p8!-R>GCQq35`HGdRRU+M`Ycb$v`~}p00i_>zopr00>x(s{jB1 literal 0 HcmV?d00001 diff --git a/static/flags/reg/42.png b/static/flags/reg/42.png new file mode 100644 index 0000000000000000000000000000000000000000..b1c6b0c0c1b7ff1196c6a01f3c98b3563539df18 GIT binary patch literal 1042 zcmeAS@N?(olHy`uVBq!ia0vp^0zk~o!3-oFZT@ltDTQQ@AYTTCDm4a%h86~fUqGRT z7Yq!g1`G_Z5*Qe)W-u^_7tGleXv4t3BoN>e;@Zc+H-$lH4ujZ42F@vLLcQGFwM-0I za_nCIYAXIxE?I_3KD^qg(!xV!6$nP`kyUqBYvH7#ObEI$aI)`M-0;|ECwX*y~+Uk~`vQ726SQ zwJc}e^G!jM;x_z0>AE1*Y(fxMipoR=hQsD&i{%vG78m{BvEiJ*$8B@7ZH`ury`_=! zt9QIU71A8P`o%ua_PDee)f!*uvwWd(2V?zyEJvnQP1b z|M|+0p{b~ko?JR4Lo=D5)fTZ=+rgZ@s8@fztlgbtYjWanMpdfpRr>`sf3w8-k zW9H(&^R<9N$2?seLpZK8?q+cL4>W>_nT3^&or9B$n}?T=pFu!SNLWNvOk6@zN?Jx% zPM$$QQAt@vRZU$(Q%hS%S5Ke8z|hFp#MI2(!qUpx#@5cB!NJkV*~Qh(-NVz%+sD_> zpCKSHC^#fEEIcAIDmo@ME}kJFF)2AEH7z|OGb=kMH!q)|ps=X8q_nKOqOz*Grnau0 zp`o#roA(9{qf^FiYwYs9 zotH`2tg{VT|LoiUN5B3Xc`wy;oULLxWigNRULE7zX1aG%L;vqwe>%|Tj-}l?(>N=~ zHG*DeZ+`!;V!24$d)>t^|MmQLaHvh`XJ9yPZhqF?`v2Bt{~z4gXl`;=UHwc@xsm;P z@vz6|U;j67+-wnX{L=UT+I~k^)fY`}LS?0z| zyo@FkMQl#++GeEG?`^YKNw`8+rPR)NW{|@LOZDCHfro93rn)#S4=|fJ$*yyYN7Fi= z>S{Ufb>1xtY>RhA)aUc*avIH1_Bk#5f1l9S!$6A|lf2zsHaMrOI|Afz7I;J!GcfQ0CHM|A9?xHq0u*E~ z@$_|Nf59%nY0O;wcfJ--=$NOAV+hA}#@!4q|A9s@F|)9;v2$>8ar5x<@iPbr3JHsd ziit}|N=eJe%E>b*C@LwdsH&-JXliNe=<4Y+7#JEEo0yuJTUc6I+t}LKGdMUpIlH*J zxqEnedHeYK`7;Cr1_g(NhJ{B&Mn%WO#>F!vBqk-Nq^6~3WM*aOZ;?X}TNzuoKw^pR?bYeY#(Vo9o1a#1RfVlXl=GSM|K*EKQ;F|f2U zHnuW0(>5@$GB98gbU%fnAvZrIGp!O$gOQPyi7`Y2>)%{6pau=N4JDbmsl_FUxdmu? aObx9Jpn62sy_pQu!{F)a=d#Wzp$PzCu6Ysw literal 0 HcmV?d00001 diff --git a/static/flags/reg/52.png b/static/flags/reg/52.png new file mode 100644 index 0000000000000000000000000000000000000000..252ca1eeb33fe7b4497b0628b3ac2d309e9754a0 GIT binary patch literal 1045 zcmeAS@N?(olHy`uVBq!ia0vp^0zk~o!3-oFZT@ltDTQQ@AYTTCDm4a%h86~fUqGRT z7Yq!g1`G_Z5*Qe)W-u^_7tGleXv4t3Bpl!q;yROsZ3+Y190rm33^IKTf_;oaElgaQ ze7bh36+#N#qPjB$^k?#FP7%_bA!9O6SZm5e28Iikc3Y)1j_5n>w{Sb@?6X@-cbRRR zo9S#lucO+|i;cYJ+J&#ybz7inw^-C*_6!!L-Ri1$Jlrn$c>KR`a;1s(Yg?1uCNb__ zR~d|sJ4Y{Gx8u%=ZFil*ChB@EXi7&jd`@y;)*VbS(CCPAw>b*3!jS6VM^c+Da5s(0%Ds~?scIKS}^Tdo)FXtS3? z|CE*UE(hlY3pV~Y@|&UJGF`x^JB!6+Pgq-zO864Tf;NNTMZS4cj3Q@ywnv#QNb)=B ztvM^fez~1qTXeuYH_JvV?E*ukT2GrP!CrH{?Q6Zw12Q5j>>Vb1n@*qQ(m!82Yol}1 z0-Kt3p;MbQlQ(--Rdbn1n68qtT4@<`V9w6J!LgYuc3xHtK4j^zb){wY1%1aeHsRaN zLjRwBztXu7Odu$bi;waC*a+b^sl+>HWWLu>*Ci1KFnyD72G00D5;ppdL?c(K}r>a-U zz}3Sk2uv~m|Nocy_(cksZWxoi-CZ^~r>r{yvL>4nJ@ErzW#^d=bQh@V0QIITp(UQaXv3LW!waSY+O&bXVwYCcRdWMF^rskH`w)T$BuI`@RzJ7)Y6DLicGIiSY88c_io-=pee1-)J7cE}0blLJ1 zD_5;vvv%G3xxF@;>9?D`fIdM+xN3K8(8gLs*GILXlOA>Pn(DhhY85u$>v1Po- Q3)I8l>FVdQ&MBb@00zouV*mgE literal 0 HcmV?d00001 diff --git a/static/flags/reg/53.png b/static/flags/reg/53.png new file mode 100644 index 0000000000000000000000000000000000000000..68b19ca80f4de22712a64e1dc552c706e65dca0c GIT binary patch literal 1042 zcmeAS@N?(olHy`uVBq!ia0vp^0zk~o!3-oFZT@ltDTQQ@AYTTCDm4a%h86~fUqGRT z7Yq!g1`G_Z5*Qe)W-u^_7tGleXv4t3BoN>e;#$SPIGay=C9~ih28Kxt4DAdI6Bvc_ z*{wWvXR`^`8kpy<-}6%3s8c|Hrl`h5Ii0Dq_$2q~nC+EQKA@&?D=cK2iOCTiixp;> zcG?TA0**WTH$VUS-y~$Yisu$>*KGo-Gx`}Aj_Dd*ur_&-67hfQhJ9XMck~Sp*yNg< z9Z(Is|Ln*A2k-yi{{LUhZHv0!c}CT>(-?R!*|?suH~YU~$^To|&qv2xkdr%YpXcCw zfy3#_{XhR-{{MgE(|_53V@mF)h4gn$U{zTzXSC14@>Op7|3e2in_51zv_EK_YofhI zCFF@t;Hq5@{;Nfv(+s_#X0b&@Yf-tF`8@mZZDC0b%G$@WD!Y`;u7&4J(ujyLpYG(a z+SPrEZ@^p|ht=i=i=yln*@+h!O6b+5R-fKAGv&O*O>=08Zk#se?N8p^ppMD3K;~aFi7=ra&_{t zEmT#lXJDVeD%H*)1T^mY>Up39#+c;o?y~+|&SFC#hqJ&VvY3H^?=T269?xHq0u*E~ z@$_|Nf59%nY0O;wcfJ--=$NOAV+hA}#@!4q|A9s@F|)9;v2$>8ar5x<@iPbr3JHsd ziit}|N=eJe%E>b*C@LwdsH&-JXliNe=<4Y+7#JEEo0yuJTUc6I+t}LKGdMUpIlH*J zxqEnedHeYK`7;Cr1_g(NhJ{B&Mn%WO#>F!vBqk-Nq^6~3WM*aOxvr5(h=HY* ziG`J+rM7{Am4QL}@_V2lKxoL#PsvQHMAKkoWMyOu(XhZNup6jB18ze}W^QV6Nn&mR dnjTX_D+6PQ9+7o#CIj^_c)I$ztaD0e0sy^to}T~! literal 0 HcmV?d00001 diff --git a/static/flags/reg/63.png b/static/flags/reg/63.png new file mode 100644 index 0000000000000000000000000000000000000000..4c35d3fe056a3069905f79e23f08792bd1f655fd GIT binary patch literal 1042 zcmZ9Lc~q2T6vi)LF@P)riV@(FEJ83Jvw(aIL%@8@3<5ELC4$MGlnBC@C|G1_X=x#9 z7=i_2B#5yuDg&`9IF6t!rYXs$4BH`yMY?^QI(3eJ-1j;6x%YS9bI*C-V}8CuZB1iM z0MHhT1pc(@(V@jqqfa;9q82S{BSii_00%4pQV#>n(^l#*z+M92c_;vx0bmq=zDB|W zP}TGE4y2Y@^}70|E_q3ltV(vXwzm1+{o7@g zm$V%!^j&0z9!-A9%8Y6ZNx8d*YBb{&PRt=L;@rgK)RTUkn8&Bj@z2T5&K9t%F%IZ5 zko?jxk53SLX3^4HZY6A<{0nggv16z%Y#$cgXb29+5oL4z4X~&*-tuULq`hPWe?`2h zL^F}XQY;@^KpdY@q@-t>a_=}%1q2tBql)%6HFkrp+r5=u{Vu!bvKrA>`dDAkyH3>d z#|y;iDXge%42r0Bp)Py*;_!g1S;k`PtnDdlZ#CelL&80(j8UhO_fH z@H9Sv5_1i=2{)p00F{$f1gYR`lDYFxUXOhp1y0OXru{{L_Hr3M8$Z51G}g@lmF=lv z?jf#@I5ghoA(0dO0&}~Oq+~3}Ym|6(@&!4-=)85iyYbe8vijdjYkse*XuXm%*m=J@ z_i7SoW`e;PRg)78)9ek*6wo}YYLW)}^l~AUJ3Ht{qY}PZD7Y%$m1|EY8u6l_L;#(J zrBG>!%a5c@b*b2gQXf`dt-)4HT)bdSTg_sDTOgxble%-{>Yz?ekxBiU{<`$M#8?9~Lw6$XbVb5Z7xDJk+oJeP$3*Qyq za&z|(P@Y1O*lV-5kMG;yC-Dym-15%5TZ6U*hirdu2ZV-&het$4MZdo@=7SG+#qNf< z_&o`U(!C$;OWJ=RIpyHT@JZ^Yhdw)euvLlEG>dgY0r`x6|B;6D4eyGng!6 z)9tyo{?4~GJKwHe^J(+CFKae@S-0WW?rl$3FJLfU&gr_}Jo>S;@%q~z{+ooYWpUi5 zAGE73pnjfD#6(y3eiz4nE89Lxn@$I-bY&?9y(RLAchtNuoV@q{?f?H*KL1yZzOLnb z@c+~Q{~tX6f9=NqOPBtiKK1|Nh5r}N{#&+)!Fq>)_gNm}{SSWqfBOCZov;7(qaUam z?`ZR=T;b$9-_m8FncXTwvrTr63mrVu1thujH%i!^)CqkrYH{rP`~QyNd)1w<+Su;- z|Lp(&d++~W{qX-M+W=;w0K&U|%d+#X}4CO@OK(Zn8wlo zvx(hd0qaU58X}4Ut?KOU=E$f|p30zcK+0jCgv4HLp+|**OSGl-@u@BriVrY8>FRfQ zVN>qq^|k$NiyecOsJQN6(p^83L3oFN{B?bi4+$#&7Y5xgG&v(Fx>z8@*5tIN&yl%( z<)^kaR(32kj@>BYeSkrK%VK8PEkd$;q!{-bF`P-0+2PK+Uyy5wWQe)xULpHE@o5z` zb(OXWGlV@?^SB*kFyGV8Alt_v(a*rv&A>2KimQi{VFm+ZBfFKc_6!EC<>DqY_*)63h(*Uz6JATTI6Bs45MA~GsECN?gfAt5m-IVCkMJtH$KJ0~|UpP`_zsJNuG zth}PKs=B7OuAZTxv8lPGwXMCQv#YzOx38aJ!o*3Fr%atTea6gLv**m6H=kj_!bOXh zEM2yI#mZHy*Q{N)er~UgX8P@BFQAW9OI#yLQW8s2t&)pUffR$0fsu)>fw``cNr-`^ zm9eRnsgbsUft7)Qt-h2biiX_$l+3hBGz~^ZRz?O84WFv&bbuN(;5L+G=B5^xB<2>N c=`l65GBAed5n1mdKI;Vst0Oq`d_y7O^ literal 0 HcmV?d00001 diff --git a/static/flags/reg/71.png b/static/flags/reg/71.png new file mode 100644 index 0000000000000000000000000000000000000000..db2fbb47162e14357b55edb3d6ede6b1f590f0d2 GIT binary patch literal 1042 zcmeAS@N?(olHy`uVBq!ia0vp^0zk~o!3-oFZT@ltDTQQ@AYTTCDm4a%h86~fUqGRT z7Yq!g1`G_Z5*Qe)W-u^_7tGleXv4t3BoN>e;>uvSfkAf}gZ3Ojt0fGYllU!{Gia<7 zGpNmpGO3Pas7w;7P7^K)VVIQ5+7Q4nDVBjjd4+1|RTaM@LKbtc|N5^Rx<=afgof+n zolA>$&oEgrHNaAbVfAF=t&`PH%{QNv#K54rQ!nP3i0$56zyH7b|Nrja|GXZ1^um`N zSQc|=hLWZd12Y?gt{lUGrA7zmYBxtSuv%PXH9f8weEasF|8M{QzwzV0RM;gcml<1U zc^{vxAjr zah37>Ru4x5hNUx%wk*`XxYesNoPj}ajYi}J-Jm_X-iw3sSF1TxtJzI)@^4$dpn3Q5 ztUXI>x+?>BZL3_eBxU8oqLK^;S(|JFkCLjc)iaiCs&1>;xUqZJ(wtSZDy%$G%{@xo zU4tSc;tXAqEF(L_Ez9_gN}{7Y7R+l84KRv}GMPUwZ|l0O&C`w7FUr>SpQhr!WAcJ4 z)^5d>Gv6rq?^X&q%b>rmHk@b6WS3oweAX?9jEy!43^SXvsHku0e96EK(!uBQS}%vB zuFmQEq!Dyl)BhTS%Esy04Ev^P9$sj6cxA}qsc8+3`QbVFs(v+mo_o2S&sattQ?Op7 zA9X+G`kWeE&jc?^v)jFkb5y{Yn5>7H^1Nvt}Pc};h-8y*$1ILV;4nZaVO zki}Mh-R1xP|G&5AxE?UkFeZ7syR1K#v)B;G;VkfoEM{QfI}E~%$MaXD00r4gJbhi+ zU$9GX8Z#IFov#HHI_Bx(7{YO#aW{j@f1nXe%q*;I>>Qk2+&sK|{0stuLc$`VV&W2# zQqnTAa`Frcib~2Vs%q*Qnp)aAx_bHy28Kq)CZ=ZQ7M51lHnw*53=WP?&MvNQ?jD|A z-afv5{tN+uLBS!RVc`*xQPDB6aq$cZiAl*RscGpMnOWI6xq0~v1%*Y$C8cHM6_r)h zHMMp13=NG<%`L5M?H!$6-95d1{R|T(PMSPr>a^)IX3m;DXYRcD3=0-6TD)ZGvgIpQ zu3Ei@VePuv&DK>Jt$j;@K2j}ljVMV;EJ?LWE=mPb3`Pb$u# z+6D$z1_sl=PRv8mkei>9nO2FW!N|zU&;p{tU&?$1P=f~ChLX(O)Z&uF+yXQ`riNAq X#t=Os>)uQT>S6G7^>bP0l+XkK$d_+o literal 0 HcmV?d00001 diff --git a/static/flags/reg/72.png b/static/flags/reg/72.png new file mode 100644 index 0000000000000000000000000000000000000000..faa39f422280013f49296cf6a024f8d874008cb7 GIT binary patch literal 1045 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 {% endif %} + {% if board.config.0.flags_reg %} + {% if let Some(region) = post.region %} + + {% endif %} + {% endif %} {% if board.config.0.user_ids %} {{ post.user_id }} diff --git a/templates/staff/board-config.html b/templates/staff/board-config.html index 6946050..07651e8 100755 --- a/templates/staff/board-config.html +++ b/templates/staff/board-config.html @@ -69,6 +69,15 @@ + + Vlajky Regionů + +
+ +
+ + + CAPTCHA (vlákno)