From b8664c1af20c52765f671fcf27b8da78975b5643 Mon Sep 17 00:00:00 2001 From: guimoz Date: Thu, 26 Jan 2017 23:32:27 +0100 Subject: [PATCH] Import depuis le home de lhark --- README | 2 + assholes | 2 + immunity | 6 + players.db | Bin 0 -> 53248 bytes players.db.bak | Bin 0 -> 35840 bytes roulette.py | 417 +++++++++++++++++++++++++ roulette.wsgi | 4 + schema.sql | 23 ++ static/favicon.ico | Bin 0 -> 1406 bytes static/img/asocial_metzwork_v1.png | Bin 0 -> 9798 bytes static/img/corner_bottomleft.png | Bin 0 -> 773 bytes static/img/corner_bottomright.png | Bin 0 -> 780 bytes static/img/corner_topleft.png | Bin 0 -> 770 bytes static/img/corner_topright.png | Bin 0 -> 754 bytes static/img/k6lqsh.png | Bin 0 -> 4160 bytes static/img_red/asocial_metzwork_v1.png | Bin 0 -> 9798 bytes static/img_red/corner_bottomleft.png | Bin 0 -> 651 bytes static/img_red/corner_bottomright.png | Bin 0 -> 405 bytes static/img_red/corner_topleft.png | Bin 0 -> 412 bytes static/img_red/corner_topright.png | Bin 0 -> 413 bytes static/img_red/k6lqsh.png | Bin 0 -> 3526 bytes static/style.css | 188 +++++++++++ static/style_red.css | 188 +++++++++++ templates/banned.html | 16 + templates/home.html | 27 ++ templates/home.html~ | 27 ++ templates/layout.html | 43 +++ templates/layout_banned.html | 44 +++ templates/login.html | 15 + templates/not_subscribed.html | 9 + templates/not_subscribed.html~ | 9 + templates/play.html | 23 ++ 32 files changed, 1043 insertions(+) create mode 100644 README create mode 100644 assholes create mode 100644 immunity create mode 100644 players.db create mode 100644 players.db.bak create mode 100644 roulette.py create mode 100644 roulette.wsgi create mode 100644 schema.sql create mode 100644 static/favicon.ico create mode 100644 static/img/asocial_metzwork_v1.png create mode 100644 static/img/corner_bottomleft.png create mode 100644 static/img/corner_bottomright.png create mode 100644 static/img/corner_topleft.png create mode 100644 static/img/corner_topright.png create mode 100644 static/img/k6lqsh.png create mode 100644 static/img_red/asocial_metzwork_v1.png create mode 100644 static/img_red/corner_bottomleft.png create mode 100644 static/img_red/corner_bottomright.png create mode 100644 static/img_red/corner_topleft.png create mode 100644 static/img_red/corner_topright.png create mode 100644 static/img_red/k6lqsh.png create mode 100644 static/style.css create mode 100644 static/style_red.css create mode 100644 templates/banned.html create mode 100644 templates/home.html create mode 100644 templates/home.html~ create mode 100644 templates/layout.html create mode 100644 templates/layout_banned.html create mode 100644 templates/login.html create mode 100644 templates/not_subscribed.html create mode 100644 templates/not_subscribed.html~ create mode 100644 templates/play.html diff --git a/README b/README new file mode 100644 index 0000000..e2d5581 --- /dev/null +++ b/README @@ -0,0 +1,2 @@ +Le serveur a besoin des droits en écriture sur la base SQLite3 et le répertoire +la contenant. diff --git a/assholes b/assholes new file mode 100644 index 0000000..4c41dba --- /dev/null +++ b/assholes @@ -0,0 +1,2 @@ +Luc Absil +Louis-Guillaume Dubois diff --git a/immunity b/immunity new file mode 100644 index 0000000..dfe4b59 --- /dev/null +++ b/immunity @@ -0,0 +1,6 @@ +Goulven Kermarec +Lazare Olivry +Brieuc Lacroix +Cyriaque Millot +Juliette Tibayrenc +Siqi Liu diff --git a/players.db b/players.db new file mode 100644 index 0000000000000000000000000000000000000000..54df649c31875a8df85fa5c4004acf99426aa121 GIT binary patch literal 53248 zcmeFa34B!5`8PiIUXsj2AalJyNJ2=45s@uqvd0bC5rVSsibEK}NRojpY>ITIbz_}m zqTmu1Aq%+IeXWYtwQhB3l%OKkwd%Ci+FI@Z`#k5Kdk5P7{_p#Ke!utqz3<0-+Nj?= zXT9f~XFboEHKQWf5XfB~s;lug9)%b#!XFN*w+lm0yc zPW)HYG4j~pUVxGmT~+_CuF<9|M-@Gh=D*p$ho@{zN$=ZNiL7n#FRczN_1D(Z|DEGz zP8c(LLhkG_V=E@)5|VpHYA$|)%W{LY4S}jaUGA#7V2!_SeeTM@`doiwLnv5VSr@1Y z)HaM@%2n0=^?|x22?c6H4Y{?A)z#wf4gR{SK*PWPdwpYNWuU&^YVM@c!5VzV>JYx7 z{6p%{aNo;Q(zCOb@J1d?jlXh5ur^RH|Cw~cpd|XAKCs}b+=jrq6Z)l%N=essCA^yZ z68|_u?E$vI~6YYq0?7!L0{HZ%X&A?AH@c%yp{iAb1G_t85 ze&@$lN?e5$;uJgMBS z+@M^ktX3{k&R2>RkJ8KWSI0+=*Bp;I4mz%Lgi*Qt(Kk;;`(EuT*-KwZk-m8%V=>vy zg2F<5^9074ZLC1wJf5*8yR1*&JT4I{%PS}ZHkPrdT{d6eJmw^>7&>A8PZNj9qPG7+X1G=6KORAI4U8GKTs}8N1Rdn~(mL zF!l=@E7La@Gxl>EL%T(cMQp5C-(1L;xsK3oKH4o{>}P@w3#k}w_!!$H%lgWJf}tC&CQ9|Ic(AgzA}r=& z{mSKB+h~idu*7}k`CQZ^G3=o$c^}9IP_&@P{qv*~#z5ODGMZ|0JRnN?@(PNINRT*1 zdxCaok@mgzt@gF{nRZ+|s{KxT9rnOqi$BqyfBN}p27a1>|AsSA`14ulRl(0m>UTv* z#vc-ygWp+^;rKl)LOy$MnDmCs@JRg54r}iF#nl1Im^TZ$>mPY+xDmNRqONZRdgah|BeGGV zPEDXw&b-%%TrN@9QGpuo)fth?EVPQzx}z`eHX<7&>MRrJp^sM^k@XUFbqRFco`pta zokX4E1UhEeDMn%aQKh}2kUr$DdYe7g~;mZ-B>p#Hi+Mr5UhRtj|J(esSRr55UB z^wMwFUTH*v7CK6xPs})AL{>=D^-F>7cw&tasj|?Q1iJ8&8;!_vi8`kW)O*(?BNDLC zgNz10oUy@(ER(3KiP068E~_*ml@d+O6sSA5#)vGn(4LG|z1H_#BjT5+t3#lZ)R+;u z#6qtZsQU?g%_S0bj$w59%bPQe$i)`w7HG}5bBxGE5=}i-phd}N8j-~kb-m4K;2+yC zJBuvzPJteN?F=KbP@>L|K)3AZYeW`UXqrIheznes%(u`*0`-(XWJKm!=m zBQn=Q&ll+9_v{w(|7s!s{~GfD9&M|(9w)#oZL~IAOV>2@EA?IVS@j-ukGe%&t5&KP zs%NP~R73fP^11T1a#*=jxkagY+Z;DIu5^$G(*Dt# zSmu-}6ojUdLcNLQODVrV6)G!pH<5hlNtz|aoKl~=i9|_H(hLa|=j%;E8oWzFz7k+8 zswG`uVUTp2PAAbPX_}3d=}j!YB~{p1sor!N(@n9lBE2bxu}L;opf?RBH_@kT^8bgbWjPoUR(GL-|7KQhu%6qwH0-DeINx$}C6%Bb7`g z#qo{feaCMc4?8*>Esmd=HUM|Dj{B5r^{GgYl1ajwWLhbxPnd^QOlD$ixrl}s8fcZo z)YLL$nsLhVO3U5ROBqU+RHbElGziF>)Xy5T4^y*($xI9-OWaXXv^+_MRTA|F7&=u# zC8)oWA-4sguB8m6SrF>-Gt}FHeD3Ha4E2&waj_m<0?3=xQ$QHFuhbpAn8{46EUy?V zXE8&kSS3-}B8Hq2Dnh{p3?*9-dNH4&Bn$HC(RqNpNj(HaO=20&Wik_k`3jY>x|*cP zlF&J$vzbbj5G-2JSqv!_1ge%X82>l`pgViFe322c{_C%;i-$93vS4%J@0;5yN ztNm7X%va3&f0Sb-@&9+U=d}B@TeKa}0D{^aw*O~g|Nj{}z{~2xYP;I3UZGy9&Q-^% zd1@xKfIlLZ_XXvClmIeRi*Qr|e@vae=;-zI#Hy3yKQ$t@Po&+AfQ($fs|mPw&;9wXuAC zt1$hUEx>M5P?)xrzebM?*(yqkuVES-u}r~cwiZ%t(jEhhdLj&5<`94tmbteM1D(gF zgPnCNNgE#R3)zt(U)okOJ>_U^7Nl>@rTVpB%3c%{l;~So)X?s>F|^5|hGh9(jxV0?KXz`PG#(Xg@Mg(W${DXZ(%UZZtcxw~~F{t8K9{d<+svJeq0vEXym$Crf3>v}XeHxwn$=;nCL0lBFm}vWG`A zEsbS)B?a!SBzkx>)6j^$SEg^_ji#DX8kR(vPv1hk-K$wAfUm^o-f}4w?a@az06}33 zGac=I3HgfLTbRRWe~=Iid0Q^xHm%A^3*1|#GxW8f^5qp4rETGZQ2SUw1vuljkik4h z_O&3dNZ(Qd#H($R#R`f_iT{ss)Z6~QecE>IGHnI+|5*0_C98i_kE$=g2C!dk!v0^W z&R55)`RYKmr}CY0TzOS_R5_?z4?94uvQU|*6et6gRL5T&$Ke5Z+;J;3fU8k`;*Y+A zXD310FDgpgK`cKHqwg7uBoLk$)jyHE1Fen4t#ZF!+S|AK`yp!b_NSH5eJ9d=fF=c#wgQB$U zNoXNQGr1JjyS|+TW4Sv~4yVjEu1kJUV%3H2ZM0)OHXXRsHn9;Om)$4=mDq?DR8X9@ z4O=Xs6UD{uZPcVki^_67oCmc$a_fLCD8~6hl9*SE3o`Vg0A~q_V%A0^4CfljVqSST z1Ecelg)!-#BMfCp7_+_=uzZ}8v~0ZEyH*?U32tQx&0eVGCGM?@K<3fRPYOm}?B2SN zA=77v!vyCGOK92?va;fG_f}eO9?hH&2!N&Ttt^e%q64I{tt^dckH~_BMeeOEjcE^A z5c3l`8_U zCcanv$iw$%ZQhvV$j(Ta9jpm8tT=pdT&TJ_&_I9f=l{jqnOjCBInuLJF2L=V>ZzfX z{@V5aTKZ%8!6Z-rEp_-~M#}g=ZLofgfKL zZ#ge}+hA1aO__Q4U`?*B+M`fodzXXyeo<{#@1HHx_{)9$%3XWJOm zIvBI$KYVBX_(1Mh40d^_zMenaz$0J3nz5}aal}(`9g6!j^7Y3yWo}!+b37JpHda>n zE9*i*`ZgbAS3mt^`nF4x9DOrVCO1}v#s=#Ab<1cdXP#F$C}-PhER`I4sZ2x1LK_19 zMxrSG+rb05+Zr&HIhcvMs>VPaF8)mOV_6;UtmA%7t(f&q`nJn3sPvR6jn%=x^gu%c z_v*Z(i$~^e$2T03kuoLVuN^tozp4RWBQP%zTpFmR`p@RKp%f$GH8qRrvqH75FC)c}iJEpJ)==G*V^- zR|hMCJQHia`pch%{ci=y|Gz`D-(A|x+BI5(c8OM@mB9nx#+|)Suz z3?D#|nw!A=JCzpYXG*m)Um36DD+3hg3DW=Njumt&=v&yZCQoPPH~JQmiM^7`0fPZ) zi;#f7lBbrhtXSV7Bw$klBDzw2OE#CiLeLRbqHhtr&k~-XQ|ViTv}>-v8Mb)7{oXiw_%?4z`zx@kWlEAr#)c>`WBK3z4Evx3}uOPS~?3!=xCP>O`6FA zKnLErnS~*FBohYLHQ9l@Qc)rdZtq6MOlCnC!UpOYv$&_P9B%o#lQFbG!j)ID5V-!! z;r1r+$}4#YVQ9C8F_Vc9hIUD8^-3;67}^aoX3DL=V3pcTHWjbb&}ZW2Ud_~S2t%KVoqMH*Ll{B{h@X3*}K~@+`!yydg5K^Tn z84`wZ2&vN4dI-ZfNNn}m@{+F<;~=K))plFsEkXZ?t9vz5>p|HP^p6y4uXcmnGbG<_ zCe7N?kFow>?A<(#v7Hv3uTboN$p8P*{(n<_O1(q95!Syt_yDJ>W$J0_scirM9lU^d zDK{(EC=JRbN`+FUoTj)PKR7;fyzMybxYKddKS}>M3YxBCeQ*H+x*?!kC-F7)FAEf1`HNZScrmou^{fg!so#XwJWU88|4-#k- z?;nW~9k41cYYz1#rVHw zaafz?85ljW@SFLtmK_BKA)r|t){lse5>}=+i$mDdsR%38oB6;^GWRcGC3-V2R%wtW ztXOX*9m*@!Si%bRX3~Ycnz=CvE6|(CuHsEHCzmjv-pq%q^g|McKJ($4bd%^Gwn#bJ z;KMb^JcJ2D8@z<=gPA@;vsl9RhruDyOr{!3SU?*-)Hj;@a;7y05I&mEX3SjbM2G%~ z#WdWeL;u8LI>o|pm^6#Ulz^cxyl~`JM|}`Tntj|C^Uxuz$laU|%wyA)<)<}!0Ocg% z&*X3ench5*J9mpfAfdpP*DRzoOHwF+%eHv{H(*OzFrqbQF=o?YcQ&)+<}meF)Q2;? zxj*PEs{+mh^f#TG-DfphgzwmotFr{7ff#dJwvY<8c7 zK}c&(;whWS#Nkc4QDEqDe!jce18&|9AYK_Wx(< zTPN`UDQby2NbRlsP5D@P;on?x3(v*hFzBCeUwdu@k=3d-CuI(I$N zQiDZ`uxZ*U2@vcpG1?R!+fWOKTZ|6agh=gTR9{Sx&~+8-fbj}2kE6BtKqFk?gHnCR??34@=#=87-`QlhNL zbzdILPchP=JW0v2C~R*r+ME{T%Y#H5gQ<*X=VLq|{5&wVU{h#I9Ozm96|72*% zbpHo2fDgg{7gIOE{yz`)K%bhex|BaFA1E&?k0>3c1z>??|Nqu;%<;16{kLxb=r{7G zPd52Fv4{fq4SWtHn{Kc|@HF=gr(xWlWJ?Bzq5lRtZ9U1BlL>O6^2JOLFDTV_ z@$5*9B&#BQ7s<0;yEfe8(07rj>P>!9lm#6;io00bk{IfP#<`1S)#OhsIz&g#jXg(}Kvyr0*KWCC%ZJJO_-A1356X3ct{bXN$w>?I(7Bzo zD!s|y%Z`Afxp%TZB>5YG`SOa(+&gI%c@m%!eJ4*zvS}7C0FMJUmuvgXstt0^&N+z~ zF`zPiC(A?0CacCa$}e{BB=+r*(}eF;=-x>ui6_})w*`5aq@8`aHgl3_7nSNe`GAmL zpD@rdw@t(f+&fdaI@3genZr(?-uJ-r3)>uEQ8l5dt1Qk0)|JuQ(Oxopr|cS{2iNjC>r5v~%kpqlhYSao7N2Mykcl*mr`|73xtY_n780b5afMgG>Mm$5Zc2Iw1kepy}&M*1PH+@ z|KipG-xElnDq{OT`~Ob7|5M5Le}>}zkE(u&_`m1W`_z5vcJ(r~N}a8af&V{Cbz=V? zQ(l4pPg($J{}(E`xB>JxL;$|wc+zo) zYFECzQWT^kAQ3|Kv;{n=CNBjQ>bfuyf-9%U-A)RDC$)#H9!|%0(gzZu61|#rKl2@zZM4S_No({ZK$yf#Zos6XlGqa& zOlC51NFA6k(j&bto3GPCWA@}aZuPA=KdqhEQ;zFH**A2}%_U6)4M2Ns@5$Kvf(lFq z47;6pxYuQ3M2D}L%Ggn>g`#4;oh4sa0*0Ot1N6F%SoOi4+n$_=QGIBGrD4~*HXZ6? zPLqg%j<~1S)n(IRqSQnT^+7IeXPwdYJF9=xF6)emSh3!=iOare)d#h??Fz=;wy{#Z zjaanTWn$Duk={l;+Ut7DZo{XyU6xoM=%_xH>RoSG^}$Qu#>`w|L|3M_kyP(>{nn}v zLPZ;k^$8f2C8qCny>8csvWVs{rt)8)0Z90s%E)gR-jE!{y*DE$1+9fH%n}}g- zp_4F}V%k_IkaSdEiQY!ifYx)-g!z&z2$ zVxQ|J8_U<*0!(LOXg44Ff83Gf80&DnrKBKocc$YKrB2zYyx@3P`Ga~2?0gf|TE}kn zHpfQw1??2v0RCE=fau`8+S87)+WWMzv!dix&Pu89H`XE7<-|Z8e3Nx>J089NzT?L- zqp5JCW{ba03c{J{uVshzghx-gZeSE{@(gdv)WZkY1ZyV;Yia`3OZ{-jlGAd+)kimF zL~~F&D`jeE*`=Xr{+Ah>l6a5{YG93e~ga4d7;}y42D4qygYUSJaIngHvW8e`Q0kc2b?cp&_u!Un_znju*ak=T%wJQ{e;lq>QN! zteX^STm_f6={{Bl&0m}z?Sqc>O<6#p47IcIp=i!huG@QjV6;CR%Q?aqj#_79Wb5&< zD?#w_7gMuGXGAmkJB_LJBbEUkd=WZu^qsaeRsF=#Q+Bq06hRYNec^Yn@nb+!154TU zT`_6lt+`P|KAh}TpBX||Fmr`vOMUg7Sy2zX>g3-xLqIA5m45!PCA;?gA}b2FJl5e{ zq+P`f%tVNS855B9ZTVZ;Fo%s=lmj!B9gx2u*-6Nm89W|%_i`qR=M6L`^H<#SViCCVM zSW(mb4FTRpBc8b6n~W&pKKf=O$RZG$*|;=Ni!`s)>w#_G?#qrA;?p6lquReLSQD(9 z8mdN;+A3OTN869KLsUoNPY3S*eU6M@PinVmJGF>bqs`aGA^I;v>w()p@8I_TUFuEn z{;h`he-ds0W<&P>6Jmd#SMF8zD4Uf=`2MCUCAjjt!5A(<*I@zPqd#j5lVI{A0$h6cMq{W1Q@srC`F>KlafSq)?E>6? zZ<;a00{Q+|*Pc;7ylb3pfuosn_xojc8G|L5I#GblzrV^j%>q3F9Ct;r;kCd`47PrA z|7pe`2|CLKcz){zhDU;~e+V%7=PgFA1>Viz%~wX=Fmfy~Ai$wFeQFGpptFj>n;sg! z%E-3B!2(r&{0*4DS5kt~(7~f=<3k*R?Y`q0(?$;Dv(noEZTlO@glP8NB|J-ybu2 zOVHUzfUP$lGI~kS)gr(P=bmNsw7`29yzYyK?l(@6V9JjIY*{tmNR?n}mH^8~Ej3&c z6nFc&ntq*HZa6LQ5K~^e+WCNyVu8P9@anbqpJ60hpjgR2zb@3*NRptlKU0QJjprLZ zEO0o3mlv$+YiJS_H)Ffj`9A%UO0KWO%muB*uV;Z)d~^XHTmZDx3i*UILfnACanlo2kK|~SJZ$p2dRRhL&uM0M~l&p zH)Ud=q0T?kUmx<2~L4$!cLfYtEw7MWYim<&b15t26F#W3O zf@z=C<+?H>ijcjG3}*Jh`ULD*s2;;FEhCft3G&(NHQJ9lL ztcqhBM_T+EvSF>icA4O*MPr7n%ZyG$RftHGEVp`v|5BQc^VAWq^ovfyT=h*Ex4te| zJtb649eB^XHS4?n(eqKNZ_4=Kh83aOs#$2A{&f1|cl)xVQ^1L{Y!P8>bqEb|U|z}V zP5V7jWW4j{NOrnlO`v{kunOUU%f!Tu@ZSEKc9BCS$u!qg|7Zo6C?@&vLBt5w1}>^-6rh(CEm{+fmq!8YjJF7YbA%MT< zN3$B|>>LoCj;0Xg86sgi2$EI)s#=y320iqA2Xg!J(1mchj6yiklVkqRZuy~qbSD1^ zVXAf2f%TK>LL60^y(sxN7{`|M2E6uq4GLM*>q+4ZZ=URVi+2ksJu?g z%|~&4yU9jnVN_qSzMCyl&Y;z21T^i=V>;c&FgCU|InDSLObdJmyUEt%buPF2lCSS( zW0St!r+76 zO-2^4#HbC7gRLyi1vVY9bfz;gqQkdj%ZqcKpd$?9CCiJ~IoB$Sc)i_hdyyE?p)YAn zH%FEwx5aMuIyz_B7{!bjmA0Mro+5Axm^<@ zI(&~5#wu(&w83^8=Y>|gh=JVA_88|h8$*3;k8w`5%VG}L9^*9YLmP;T+|BkFNk>?r z-YT}%7^^1w zd;eqi8(~W?NXci~x98q)ixIXJgSbGGAFeXOmS!OGigdlTE40N3TdF}S=cnj;Yt(Vw z2wS>=>shYh&9*BqHo}&2kj(ihy51c5c^@NeX$MY?Y2SFbYJw5A)dL~)zfs`4)(G4B z!6{7p+w0wbHo}&I;ChSE*I$`^lM%Kx1R>(Te$Fcw8ev;SSkJVtZM|ry5w>-NzcBjh zqwnuB!j_UC1iP+R9{W?i5w^92aZLMi_sBy=*isWj#*?n!oRfLA5w`RMr_g*}dhOB5a`7BPdCDr!jRg7(dWMJ z|DF-HGzO7hrR%xd$KVTDDuc-8()H|jS6ym^EuA6d?_9&Pcf7dA2wO^n>q~*2dOFsb zr8T7XWAxWgj{dz7w$z5yWPz@^2D4-74M}$jG<(?vM%Ypuk{@UEnKy3VX@o7!A(b=L zbUm{@b*vG#REN}DL3`fQ2aK?#JBSP|T~Gggca{;hl!s)_=F;`_uCo^#VM}`uxnsJX z)_%9p2wUod$Y0ZS_>O7IiU0qX@BfJ0({b0kG@|Z#-9{i}Xg779~^(3Ei_M&p~z>xu@f)Y#->J z)&DR1jELORan~E%hndH`vy6z`)A3Y3@w#UoC`d9Qa!-m| zZw(_N_jFvCX}YIP*g4UN$UPkwwuqn*oeqI9T(P$?uy7S zki|&u>9{b!bXOGBzhy+^o{qcNUeP_Z>%(V^h}_fhRE5VjbxtO-_sBgR7Z!`|NyAYk9X z6`6kIo{kH=|39i< z{0I3zDgV#i%5G(gvQ7yoGnLWGa3vj5OWe`zc+v5Yqumih_K#}T037-umJwwz24olb zoez*rN!<;KEfhJG-1CZLB~)$j&aO$HE}k9%N^i6tYnkfvpGG*_A+t**#c8 zeUTWoTc{tbCd_4y0%dW1;NZ%WFu24I3P+jgLIxcI?+#Wmo#`wDR_JpdTnx(K~rq&O!@A41XsN%Q;A5^eH-d2u?F*1s@TSjh(`WXMSp6@HKZ{ z%zeqX%2HoAphhlC&_O@$q~UvA<^m?nr+3o$y{_A>vc7!c|HB=P|JnBc2ORqxTTt!4 z{xQPxfI2SH!gU=!{mCIlSRPQvMf$d`r#d?K8ewU+Jnnjlj_%=If7)D)nx}MnRYcVd9 zpmPKlf1>b*9mWO;iqwT&zk2hWp2m6$yoD)$6>VE%tg}EN4*u#C^*6>^2|Cl5^6_6* z_cPW=Fi9BjANOCIX~^t?$6XH#%Kmdl8x4}uS;^pIZ=9WH$lQX*oudR89Wua>sRfTa z_X%+HSwTZ)7Ci3a+=N|^##jE_kckD4JB8Bp=+4=thRiE?+$nUMM<-3c+mLAmk2?=? zosWFi>z782>{9Bv0zCBUXGXOIos$H(;P@nCr3Fr9@Zs(+M;ez(P^9zgdU(gEr;MNk zoi__g?|=$pg#=wJ0Chd|)bw|aDhWELGv!0Y&5s((EpQBj4<7ma79(JRECqHwc*RrS z7|SH+`czP6ez@4El%UAM*Y!Z>{XZH@EpQQ2J}}~yp@!cAg&uJK!RKx>E|H+?Hm1Bk zr|)EAi3R?K!TX+FRbyN%!Bka%Yu%q37fI0dz5vfCd)-)UfkMT)_c!UkHWo?HDOTOR z8y?$dERj<3*IAi?A|2Jd!fO{`cJz^8d_*2QXh7fc!t-sPA+9 zZwKOkf2P)`3)Bhl4tUgF%3qa_l-HEUkpJU4Z*?J}LgM;lyLWy>}eW zA&=87&LObn0{7lA44LLKO8KSlEuhm%TC&Ix=yUJQXR_x-NlwYKH;15v;L{@aUJ?X6 zPSYNOn7wlMUXlbXF#}O*K7FsS;Ft`IqIOF3y={D%Dst~3cHohLrl3N>Wel0}0-}9O^*xnH*50v0whUs?>UVj^8*3` zmG>m5z`chIt{&$;*#Lqy_jnjG#VQoU43W9jK&%1}MazD_eX83HQ`k|8uv>O_k| ztlcRKmf$;)*)l-}EOqapCGU~(+y!|h#lrr-%9j6IwQG^v!>?U{48TLQKAMB`|NmP3 z<-g7U`Oo)%|BgJsZ#bSn{?A>GUpQ7J?tZ;>J-XnPHb~L|iuG2p!wN*-u_%-R8ubNjaBP;uh^|y`UBP1;ZH)uB-CBiQXJSN$HpKQe*AOry1#Ml*WzVw8 zA|kZapNJ7%iMy5Lzl4K~hQZ>WJfP4$99pd`{z;6AqRaESI#Zb-I+%{d$zWp$foq+c zNJnKc3<{R^%AJd{a8tDM2_p3s(BaBTt2jZ5tzp2`&^m+bGclqo(Oc{0vSiZaU0$?7ePu7QE$8Y6%T^H=*;>YACWKbuKWQyt%sk!+!(@tc&*W}| zVXWfZ%MsNP$K&|l|MK{s`BLz3JtG8<)6N)U%#&cUkV1d?s|5wdTnoI4DStU1M(;Ti zbgmL$%8xsY*%C|^V$a?8U4Nr7OM=erOnLX1-=-NeCFuH)!Moo4&8@}^2|C|l@XoK> z6l1ytCJAt9{&~iQ7C4i^J8t|k#kfF%sUo)Ijv=qFGp0$OC?wMT$wpLLUQz66s$Ver<^=X_;MmZ0-u0rro#8n&G1Q3*m=8d*)!mCBVU5T%-eNKzpKACMoCcEbG!Dv zG4CoP&jN*-vv2F;!;O&=6gJ+jeUq-eNXY--|9{~3f9}>=`TZZd|8tHe@Bh4`3jV)U zU8e@r8S1&}Ftr~-iM~Xv(6h+?y9f5awaPMOhH|bl!p#2rfq4VqddJTbB>;CPF&vNU zIqT>vb$8C;Q_i$i<jSc@(J$$KcU=) zS3rL8Klc7tCz-~*@^T9G9ZRhTW8YeRhs4;aGWMj6mFOLt7&Gm@D2tuYaRp=6>Y!kf z4iV&F%?}w@JJv9rd4~+k9zh}F|E=^et(YaVSx22AJ!mLf>En>*M9;CkHZ z3Kmz##WW0OnvJ0=LLqS47`noy0=ZPt2K1y3HWfHewdpVgtR%=Y6?Dii)4@tYB8KUk z%k7$$7@|Y}SRqLDTJ_;+st%zLglr6bVTB-J8RVC{J1S^eoC*4?yMs?|36ajBchJf0 zb@s7pD=ts#AVEJzVz~0CchF&O#Wvx%ft=q#r@1%PwBn$@(Ca!__D{qx20G)tu03`O zsE^DR-h|H$eXWB|ey>#L$vTBL=$!W^cx#{~bdch30*3LQpgEu~Fz<8-hF}>H$Q;ul z7((3Y3rs#8tR~1?f+!1RuY*h>mZgj^%sVp<+owg!UWd>fG`qh4P4PdLte-lF#imc6 zbU2N$CG5L?6zGPJo;1RiwC~!>=*QK|5iw$k`%Yb;Bfh%Q2wU>L>oG=u|M`lwM%Whk z?-J;tB{Pk%CGoqS6X>$bCK_Q&@#p z)StpN9Dn0MM2uKszv~r&UfI8&5w_)iVWU5O&OIZIur2t%z_cHJ)4SCOTatgOkkUWA zeZguYY>ED<0|f2LjQfnRCHp%~bWjE&o-EyJ{0!_Vcw-L4!0%tX&?`-)CBEKw+ zz$H|VcidsDbz3D64xX-Cf?EIf6 z=Ks1KuYX*L8$cJS=c~m?NZ`i%pPwmjBmbZ6|0nr>xYA!qa{STp9{m3g;1s;+Y>|LLRP12E(`lP#i4l2)SsWg#_m2+4DrjTN~& zgyd;j(qTL;b$5{Dncy%e%XfDSBPi8$(jou=Y?@`!1jy&^U|Cd}A3=qJBzJmJeX>c| zojO?Tln@1}mbg1|iOgxrzwrM9B1zPfYKoYEirpPT5Vas^DjnHOWm<6%B><`c42_aa z!qwfuM&nc)LdW_Ol`V}RBT@%Trm4eZK^VF^SmaDKZBryuxjTAs^`>bGyreX(gQUg; zJ2GZE1&CKNdN4m+pYBLL8N*j%c~1%sM29cT@?NSrBw%oAcW7KT0mD~k889_hbeHG~ z^bUpT5-_yE0kNs3QH$ts(Vb<*1dJ{>vs{=uz^acfH?QaV5-=obSjSkFO@|BFYfr{- zADv`Mk5ro=WPq%m$fU*yfdyHX+F8s@?I)}A!S&KE#LNT?_qK&dX-YOIONj$mq)at2 zD1Xp&+5_AbQ)UAl-RobLh=C6BV>`=_scz9OVW4AKQ6}C%*?jZ;k4x?RKQjOSY~1o0 zq4n32)VSJh=KqhX8}a^!$p14?Jw^G8ng8F;|1kk~h_V$IG60DDKkbfYy#H}2c>wf% z!g@bW^av{pi)LQ~&sYLhsPC&|%#7$Jx_o`#YQ`?K$`+w)=%likv3)BU3)*x(eIL)F z{3@sq`)VHx;WCmO3%^9)Cj?s4C=W6O&hKM^*52`S;d~zpuL&5@v2ZEQ-qAUcdz9C+q3Ck(S94!je)Os89d>ySd8 z_VMv!cMoZ9_tEj=b-p7e3cCieO#Ap`kr>o(K>a}Gk!gqENd?rGphT(My{|Vz=2|PD zL`3^YOZ7dg5jGY07VOn0-aj%4}0OHRUIW!SqInAJNd{Q2&^iwJUB)xnIjmrY?ZPz)BPLigSa zn95YN$nN0YJB=Z89Z}!hdxfrKUKN0U8+Dz}R2J()#;Cod$aoT$z2N@|`M>1;r}sZb z!T;~V`#&F?@cz#{b(}g1uYgkiuVcvn^)T{(#gGBKMp>XtNO=F_)qi>cTyNup%Jrg{ zEX*^Uv28r5t{1Ecgl^u(hnK{N4#^OBqFv@Z5ax5YT|(oL<}9QGLQ$T3X+y%?AVp9c zoqLvD31mg?HvSwk+6-Q8bcD5B*HczUkUOl64+YmVHiky|8%YdBK{gu=SjijEC=}l| zK0BldjXn}uC1uznF%&Iux6yIpk*&gBgdt4l+Mcu;MY5iaf>w*y^((t5S|HWhBQcQWyW4mLNqYmLEzq~gT+%X9k#De# zPd}GwnZZbLz_yWU?UCVUD2n+Nnzd=sATo@B7Nl1iqzFTG<4(e0E^RxHF}o~wXxnJU z?5-e|qK&j@kF=qoS&WtaZwWzfwC2v{q7PZ)M~>4rQmj2L6T?|l=58xt=zd8C$9`LJ zA_OWxbgFw?_X;XN=tcoU_sD|uo#~wSxNHd1OUJy&b+@EK_MkQrbv@E(NAC-{+vwm= zq(WEe-1oTdvI?SlmUAVhy6D+Sa{nYtIxT zB6a$>h%W11w&0;pjfm9g<05dXd)a9@J&cId>EkYroa(OpaM5c~{P~?mMC$Z$5uw)YKf3lpBO-PBxCl|}_HP~dxe<{%eOyFeb^9xp zy>CRMP9GP6THSuFKjO%xP9GPsXWf@P^wMWWMC$Z$5tY?_$yuH*BO-PBxVYKTy(Au4 zYDAhy6Dt<}Axrn20KNS!{O%ns7-C1<>XNPnr*$AyQq`{K{W zf>!GEaS;U8eevx#;{{=<)5k@yTldAQlC~QWsnf@W=d}Ccyzk#LB2uT13)gA)MIYb# zcOxQo`nYg@c3*TL{G$<(I(=L?dAl#FD#h&xsnf@WtFrr|%!+A7MC$Z$;j8RkeB@6z z7!j${$Aw?AdvV)eXBZKw)5nFMxO?%+2aXsKsnf@u?5^xyoLRlgh)A72E?kq{i{5!; zf)SBAeO&l@yBA%T_X{H;b^5rI{kq+Y7P$~lFLnC3liju5iw2kAmWb5p%`nZ$5qumP&$M!KIQm2m#H*WWWZ@#(1h)A72?qdIF_kxG-!+MZ9ecZ)v&+Y{q zXF80C)am2GZQ8wH>;T-wkUD)__&B>4^z1v(h)A72p3Dy3?)h&;;zmSz`r^XJ+C6{Y z!bwJCgz5i_3x8_&{3WSR)Bew=`@bjV|E$txC%peh{QnWPQ@u`&s3GJ4IUgB-g$3YK zD-DK`z?^B)od1 ziwzjg@BJ+N$sCSIqgm?Szl!>5LkRENPufNT1WkN@4M9?VBO%niznUQ{E)bDx`&RpkVIFSwx1M|92x$N+0pm2q9-G6z#7X7^!+S9C17yh?H2;5EiFKT z*v~?c^Pm_y$|B}|KZ`QbYX}VY681BLmx)FplwwfC%ssY`6Hj^VC+6#su{wpw_wC+K zyw}QI38>7ypINU=X9)HpYxvY%*2NgO&mTD_eDj>8-hU!G9z`dV&v6RPg zxdWYGUMz2N0755tkvYw84*rjE6EF5A=061)uPLWxe&(q%q7x-C70gp*%poi} zXp(tqf^!qyA4+|dbBJD`uR~6PQ2pry$%3HDckds3B7|Jd`%gOw!lxwN&Fi${!rdIc z`knfb`Z~Y=y9+sh8dN`C06$wDiU0EH1>;!gT8y!*!Q4IyCi_R!ZbVfmRwGTskWWj>cv^M&>InqxBsngxYA6KSO zrA_Z{)4AMws~ofeH$$e&6t!cz(h?zZio4rRAxPdlN6-Z7axv8na@2S{q|JE}RFu}1 z0w~92QDGj0_HHSwg@tKtNldg$R#lSL)`Jjx-$H%TfOuV2*XeoWHZlo%TupK~NZ#3| zFm$~IVT2BbOiv;*zk^|HIuU~QaNr6+Ua4v0ScYDGU?Y>Y$jWfb?7-!Ka$II*I2O_l zTy`Q-ly-nDiwQIZ?gM03^teoJgiis8Oo$$r*-=(64y-u|DsdmEXUOaU>kDS3$eOx@>vl-$#ZI3y~PDRq}` z{=sF0H%U~atm-a%z2{0Je1$|^9PZa$Sliai2yc|Aa~{k8qwc-nxDmcwqApHl)jgtn z;ASIynT7t9X;1&QVu%smAW>%~qy5{AA|t$Bq9O-D_o=UL-eH8-NmS%yI`a1~<426} zS_|c1=QM+Z|?i}E+gDvp)(kb|F#}}#d?W~ z`}9Y?y!e?;BU~p@asU6wA8OaaPq$j4;-<`zPp|ddYJ^u=Xd%~o{Aed?2uV}~P9FK- z<+kxgxK^T04t+fG?$+p;Mz}_z;_B3q-z~vapK!H>{+8=~yX5>o7-4y@C+=!z^o_O8 zk2b>cVo%&ToY7aKWzQI4d9x=j!sw2?{KDWVMp$0$iHl5DN1i_L*&-us-tBSD5D}0^ z4*W5Fx)C-n_c#Z;j&r?pLifxw!uIW+X@qut`OVK>HNw{Q91s2M8$GbkOzZ3q|`4V;gAZQ2lzCqakaR28^zW;MCGJ9^*HfYN@{%@Gp zPt(+|VgG;L%>TVXU9Qej&r?U@{qGdz8#Dhu+5f}*{_iBE2w4DoJHE#afH$rD-zVSy zX=S>S5^b7KG4p62Lq%NCtMXLU$_*6H@R5Q$Rr> zl3DH+x^Y0lM1t{|(muDcG$EsPaK2;YECJY(KVH{pWi3U4w2nAUNaHa?cx;5 zTLmgq&yqsIa{w3-O9}}uI^bK9q~J|4=M^J@H>#Bc1FzF`3Dbu|QIZTi5(Ce|_a)K5 zD{o8@8H$o1;FVtv807p`k_1k`irqIe-?y8EY3^p`@lsGm3!vhqAu~>)wsQSu{sM_g zL#g{_{sIZ{kAQgATyKig+nxHs92)>b= zfR^3^cW;4yV}RVmI>2N>~gRPn5K- z$iwf|OVu5jj!K92zIIrSK8IcbPiTag{pE(XPZ1>)WiX zRTklm;B3dA$*cE2@RQp@S$>Czq)3KwW5Uu#&U0j=pi&kHcD! zS$6nPP%K{_s1G4^YaJR`KP!l&dAXFoE)cBqgC)E-dP(xo!Pg;0@9@MFb)4#NlD`(I zZ;_xCbnoAN*C-{UWfPiBmnmh(29Vm7>ge15o8vhxNL}YeR=(QWz{pv6jTfl`>0Mj# zW^V6i`>n}n!Lzt1J?`+qO5_T}8?r%8R_i_5u(*E<<@A$jXr~72IHTNq6EpYM4QxSz z!7NV-bs8yT@i1+zKX*J5=2FY0hs)OFwv;A0MjCd4z1;aoB^;=m+{h$FJr94_zXkbt zks)sa<)o_(T!?pKsq`>+_TRHxkPsFb@+b!|a`Dw6!C`eZG6&M%lRlmKq#AZ){L7D; z(SkQ^k!5z8zZM^nvdA`Ydo$G!zshPEhOBiNDdYUB8Y_`g@dAHku#UgpfO@qtvjwSr zDS=@lnp;23PR#3G_Ol7vC5{3AvOR#=Ey&1=zFMgS$5l7VXMFR=J#}|>ixoQxA)fv+}p*n=YPw`h`mGVM6qexqv-GZ#p zn8LY!jFFy{p28y$%lM7%PpE^sn&|*PFIDH@ea|Rf`h8aYNb8~HYG-Q;w0gYreJgGT zfAH@<(ogvRn=_CZorleX7u7kB`7&ftucAb$g~|)z37=*~7x0G1vf?zA((eIDU|Tlm9xzQ`$Ep zdNKZ*j#b}?=hmw)@NWoGF6$3_&HQdb|7ay2nj-x=-hUT)F-H!4_v)-@fGb@Ps7DI! z0A6vg4mEOrT*IEdYd~~43g)0vI;Ll>#6DOGD%5*y_+$OIWJIg55$Q+_RtCm^1BjIA z@AbIi&XSC15JhPg=$ZFP{<_K_pL!Xa+P=w*uH8XgAz5?JHM+ve*yv+2~&FKW(=hH%E_U~Vq;k4LST zQ$MHj9s3TRJWhEABRMyJfG)mx?xF14C&pi4>2)-JgdBD zvNm3LweoX^abhPNnX%JAp2gE2s^$0UiLVz<&Mn{Cw||Tzl60Jy)xl81*v5ti{sLe4 z=g!WKQI7e91hV4;wIr(0$15xO{@3X-dXXSKWo%tzZD=AE5ihc=Z~k~%Mr1qyet2T8%Ti z%6iG&`RuMG=`nm!tgIQqb$H}`VnFcjq3*|SPmh6RAQ>=`ukeS=xlcZ{__>Ujcr0N? z&`<0HqJk(j>{9=8na%6PRAH+IYB(uzEwAx0XFqpEW^*HNWh;m8SiHf&!`lAfFS45J zu_8S*$(0pgdX06p=0gWF3wur+*t{CO!D|D|Jp*IcLnOc%BG{{u|3&fOX4-d!DU-0y ztEL4*b(Mii%E~+yuN^?h;N?+t^u-GYHq++zNH&gT0Tw9J>$_Y3ct?5@&Krz-9Gy1H zv2#d*doTOC;n!t1QL5mal-WV_&JPBT*9&SPq2TZDzxl)R`T8Kc@fe<|)S_IcoqiGXb9?fdP^1|mE z7pkpqK)!xF2T&Q}(F{6k;A@#pSYcS15DOuUjKyHg?9!(V|MgdeO;|+f7h-wgD4GT- z%3q&5h0_z$#LV?KuA_fW4B^=V^Lc@+v6)F(O%Q%b{6eN=Ke+!iOb<8s)o&}V+?v^h z4T*#Nf?y@dFLV76-FWMq`Q|0Nd#Nt$|J4rd7rphk^Ygsp)|0m0fBc`Bv2%DUOo2E8scZdge=x9= zW^Vk!@*SBm$e0kgi?m}GKlEuzG35J(xH)Eh4PHwL z(I#W>HbC}?*=nxwd#wrPJex5|CmΜZ&IBS$)G9~GHb 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 literal 0 HcmV?d00001 diff --git a/players.db.bak b/players.db.bak new file mode 100644 index 0000000000000000000000000000000000000000..d37b1989289b7d682fd8d95df98c33946eacbf6c GIT binary patch literal 35840 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 Xo7+*%i>>72(sC&IzW1-%zUjXJsaq8f literal 0 HcmV?d00001 diff --git a/roulette.py b/roulette.py new file mode 100644 index 0000000..3a49173 --- /dev/null +++ b/roulette.py @@ -0,0 +1,417 @@ +# -*- coding: utf8 -* + +from flask import Flask, request, session, g, redirect, url_for, \ + abort, render_template, flash + +from functools import wraps +from contextlib import closing +import sqlite3 +import MySQLdb as mdb +from time import time, localtime, strftime +import locale +import random + +# configuration +DEBUG = True +SECRET_KEY = "\xf3'\xd2\xf7\xa4[.h\x8e\x11|\xda\x00\x9fyS\xfe\xb3(!\x91'6\x16" +USERNAME = 'admin' +PASSWORD = 'pipo' + +SQLITE_FILENAME = '/var/www/roulette/players.db' +SQLITE_SCHEMA = 'schema.sql' + +MYSQL_HOST = 'mysql.rez' +MYSQL_USER = 'rezo_admin_ro' +MYSQL_PASSWORD = 'rezopaspipo' +MYSQL_DB = 'rezo_admin' + +BAN_DURATION = 30. * 60. + +IMMUNITY_FILE = '/var/www/roulette/immunity' +ASSHOLES_FILE = '/var/www/roulette/assholes' + +IMMUNITY = [ + 'Lazare Olivry', + 'Brieuc Lacroix', + 'Elliot Butty', + 'Jean-Christophe Carli', + 'Juliette Tibayrenc', + 'Elise Laurent', + 'Goulven Kermarec', + 'Siqi Liu', + ] + +ASSHOLES = [] + +app = Flask(__name__) +app.config.from_object(__name__) +app.secret_key = SECRET_KEY + +random.seed(time()) + +locale.setlocale(locale.LC_ALL, 'fr_FR.utf8') + +# Utilisation de la base SQLite +def connect_sqlite(): + return sqlite3.connect(SQLITE_FILENAME) + +def init_db(): + # Initialisation de la base SQLite + with closing(connect_sqlite()) as con_sqlite: + with app.open_resource('schema.sql') as f: + con_sqlite.cursor().executescript(f.read()) + con_sqlite.commit() + + # Connexion à la base SQLite locale + con_sqlite = connect_sqlite() + cur_sqlite = con_sqlite.cursor() + + # Connexion à la base MySQL sur babel + con_mysql = mdb.connect(MYSQL_HOST, MYSQL_USER, MYSQL_PASSWORD, MYSQL_DB, \ + charset='utf8', use_unicode=True) + cur_mysql = con_mysql.cursor(mdb.cursors.DictCursor) + + # Remplissage de la table players à partir de la table utilisateurs + cur_mysql.execute("""select id,prenom,nom from utilisateurs + where etat='STATE_ACTIVE' and ecole_id=1 and id<>1 + and typeUtilisateur='membre'""") + rows = cur_mysql.fetchall() + for row in rows: + if row['prenom'] + ' ' + row['nom'] in IMMUNITY: + print(row) + cur_sqlite.execute("""insert into players values (?,?,?,?)""", \ + ((row["id"]), row["prenom"], row["nom"], 0)) + + # Remplissage de la table ip à partir de la table equipements + cur_mysql.execute("""select equipements.id,utilisateurs.id,equipements.ip + from utilisateurs + inner join equipements on utilisateurs.id=equipements.utilisateur_id + where utilisateurs.ecole_id=1 and utilisateurs.id<>1 + and utilisateurs.etat='STATE_ACTIVE' and equipements.etat='STATE_ACTIVE' + and utilisateurs.typeUtilisateur='membre'""") + rows = cur_mysql.fetchall() + for row in rows: + print(row) + cur_sqlite.execute("""insert into machines values (?,?,?)""", \ + (row["id"], row["utilisateurs.id"], row["ip"])) + + con_sqlite.commit() + cur_sqlite.close() + cur_mysql.close() + +def duration_format(seconds): + hours = seconds / 3600 + seconds -= 3600*hours + minutes = seconds / 60 + seconds -= 60*minutes + s_str = seconds <= 1 and 'seconde' or 'secondes' + m_str = minutes <= 1 and 'minute' or 'minutes' + h_str = hours <= 1 and 'heure' or 'heures' + if hours == 0: + if minutes == 0: + return '%01d %s' % (seconds, s_str) + return '%01d %s et %01d %s' % (minutes, m_str, seconds, s_str) + return '%01d %s, %01d %s et %01d %s' % (hours, h_str, minutes, m_str, seconds, s_str) + +def get_ip(): + return request.remote_addr + +def get_player(player_id): + con = connect_sqlite() + cur = con.cursor() + + cur.execute("""select id,firstname,name,ban_end from players + where id=(?)""", [player_id]) + + row = cur.fetchone() + con.close() + + return {'id': row[0], 'firstname': row[1], 'name': row[2], 'ban_end': row[3]} + +def get_player_from_ip(ip): + con = connect_sqlite() + cur = con.cursor() + + cur.execute("""select players.id,players.firstname,players.name, + machines.id,machines.ip,players.ban_end + from players + inner join machines on players.id=machines.player_id + where machines.ip=(?)""", [ip]) + + row = cur.fetchone() + con.close() + + user = None + if row is not None: + user = {'id': row[0], 'firstname': row[1], 'name': row[2], \ + 'machine_id': row[3], 'ip': row[4], 'ban_end': row[5]} + + return user + +def get_player_from_full_name(firstname, name): + con = connect_sqlite() + cur = con.cursor() + + cur.execute("""select players.id,players.firstname,players.name, + machines.id,machines.ip,players.ban_end + from players + inner join machines on players.id=machines.player_id + where players.firstname=(?) and players.name=(?)""", [firstname, name]) + + row = cur.fetchone() + con.close() + + user = None + if row is not None: + user = {'id': row[0], 'firstname': row[1], 'name': row[2], \ + 'machine_id': row[3], 'ip': row[4], 'ban_end': row[5]} + + return user + +def is_banned(user_id): + con = connect_sqlite() + cur = con.cursor() + + cur.execute("""select ban_end from players where id=(?)""", [user_id]) + + ban_end = cur.fetchone()[0] + con.close() + + return time() < ban_end + +def playable_required(f): + @wraps(f) + def decorated_function(*args, **kwargs): + user = get_player_from_ip(get_ip()) + + # Attention : un utilisateur inscrit ne peut pas être forcé à être + # désinscrit s'il n'enlève pas son cookie de session. On évite la + # réexécution de la requête. + if 'subscribed' not in session or not session['subscribed']: + session['subscribed'] = user is not None + if not session['subscribed']: + return render_template('not_subscribed.html') + + # Un utilisateur banni ne peut pas jouer + if user and is_banned(user['id']): + return banned() + + return f(*args, **kwargs) + return decorated_function + +def get_players_not_banned(): + con = connect_sqlite() + cur = con.cursor() + + cur.execute("""select id,firstname,name from players + where (?) > ban_end """, [time()]) + + rows = cur.fetchall() + con.close() + + return [{'id': row[0], 'firstname': row[1], 'name': row[2]} for row in rows] + +def cheat(player_id, target_id): + success = random.choice([True, False]) + try: + ok = [line.strip().partition(' ') for line in IMMUNITY] + ok = [get_player_from_full_name(names[0], names[2])['id'] for names in ok] + + ko = [line.strip().partition(' ') for line in ASSHOLES] + ko = [get_player_from_full_name(names[0], names[2])['id'] for names in ko] + + if target_id in ko: + success = True + elif player_id in ko: + success = False + elif target_id in ok: + success = False + + except TypeError: + pass + + return success + + +def ban(player_id, target_id, success): + player = get_player(player_id) + target = get_player(target_id) + + banned_player = success and target or player + + con = connect_sqlite() + cur = con.cursor() + + cur.execute("""select id,ban_end from players + where id=(?)""", [banned_player['id']]) + + ban_end = cur.fetchone()[0] + ban_end = time() + BAN_DURATION + + cur.execute("""update players set ban_end=(?) + where id=(?)""", [ban_end, banned_player['id']]) + + cur.execute("""insert into bans (player_id,target_id,success,time) + values (?,?,?,?)""", [player['id'], target['id'], \ + success and 1 or 0, time()]) + + con.commit() + con.close() + +def unban(player_id): + con = connect_sqlite() + cur = con.cursor() + + cur.execute("""update players set ban_end=(?) + where id=(?)""", [time() - BAN_DURATION, player_id]) + + con.commit() + con.close() + +def get_bans(player_id): + con = connect_sqlite() + cur = con.cursor() + + # Bannissements concernant le joueur : + cur.execute("""select player_id,target_id,success,time from bans + where target_id=(?) + or player_id=(?)""", [player_id, player_id]) + + rows = cur.fetchall() + con.close() + + return [{'player_id': row[0], 'target_id': row[1], \ + 'success': row[2], 'time': row[3]} for row in rows] + +def banned(): + player = get_player_from_ip(get_ip()) + last_ban = sorted(get_bans(player['id']), key=lambda p: p['time'], \ + reverse=False)[-1] + + if last_ban['target_id'] == player['id'] and last_ban['success'] == 1: + source = get_player(last_ban['player_id']) + explanation = u'Tu t\'es fait bannir par %s %s.' \ + % (source['firstname'], source['name']) + else: + explanation = u'Tu t\'es banni toi-même, pas de chance...' + + timeleft = duration_format(int(player['ban_end'] - time())) + + return render_template('banned.html', \ + explanation=explanation, timeleft=timeleft) + + +@app.route('/banned_ip') +def banned_ip(): + # Liste des ip pour récupération par babel et plop + if get_ip() not in ['10.7.0.39', '10.7.0.254' ,'10.13.0.1', '10.69.8.5' ,'10.69.2.219']: + abort(403) + + con = connect_sqlite() + cur = con.cursor() + + cur.execute("""select machines.ip from players + inner join machines on players.id=machines.player_id + where players.ban_end>(?)""", [time()]) + + rows = cur.fetchall() + con.close() + + return '\n'.join([row[0] for row in rows]) + +@app.route('/') +@playable_required +def home(): + ip = get_ip() + player = get_player_from_ip(ip) + + #if ip not in ['10.69.8.5', '10.69.8.202']: + # abort(403) + + if session.get('logged_in'): + pass + + bans = sorted(get_bans(player['id']), \ + key=lambda ban: ban['time'], \ + reverse=True) + + bans_hist = [] + for ban in bans: + date = strftime('%Hh%M (%A)', localtime(ban['time'])) + source = get_player(ban['player_id']) + target = get_player(ban['target_id']) + + if target['id'] == player['id']: + if ban['success']: + entry = ('ban', u'%s : %s %s a réussi à t\'avoir.' \ + % (date, source['firstname'], source['name'])) + else: + entry = ('warn', u'%s : %s %s a essayé de te bannir, en vain.' \ + % (date, source['firstname'], source['name'])) + else: + if ban['success']: + entry = ('ok', u'%s : Tu as banni %s %s avec succès.' \ + % (date, target['firstname'], target['name'])) + else: + entry = ('ban', u'%s : Tu as échoué en voulant bannir %s %s.' \ + % (date, target['firstname'], target['name'])) + + bans_hist.append(entry) + + return render_template('home.html', bans_hist=bans_hist) + +@app.route('/jouer', methods=['GET', 'POST']) +@playable_required +def play(): + ip = get_ip() + player = get_player_from_ip(ip) + + # Traitement de la requête de bannissement + if request.method == 'POST': + target_id = request.form['target_id'] + if target_id != 'none': + if is_banned(target_id): + flash(u'Utilisateur déjà banni, il faut en choisir un autre.') + else: + success = cheat(player['id'], target_id) + if success: + target = get_player(target_id) + ban(player['id'], target_id, True) + flash(u'Trop cool, %s a été tranché pour un bon moment.' \ + % target['firstname']) + else: + ban(player['id'], target_id, False) + return banned() + + # Liste des joueurs non bannis, triée dans l'ordre croissant ou décroissant + players = sorted(get_players_not_banned(), \ + key=lambda player: player['firstname'], \ + reverse = random.choice([True, False])) + + # sans le joueur actuel + players = filter(lambda p: p['id'] != player['id'], players) + + return render_template('play.html', players=players) + +@app.route('/login', methods=['GET', 'POST']) +def login(): + error = None + if request.method == 'POST': + if request.form['username'] != app.config['USERNAME']: + error = 'Invalid username' + elif request.form['password'] != app.config['PASSWORD']: + error = 'Invalid password' + else: + session['logged_in'] = True + flash('You were logged in') + return redirect(url_for('home')) + return render_template('login.html', error=error) + +@app.route('/logout') +def logout(): + session.pop('logged_in', None) + flash('You were logged out') + return redirect(url_for('home')) + +if __name__ == '__main__': + app.run() diff --git a/roulette.wsgi b/roulette.wsgi new file mode 100644 index 0000000..608dad4 --- /dev/null +++ b/roulette.wsgi @@ -0,0 +1,4 @@ +import sys +sys.path.insert(0, '/var/www/roulette') + +from roulette import app as application diff --git a/schema.sql b/schema.sql new file mode 100644 index 0000000..f1f2bda --- /dev/null +++ b/schema.sql @@ -0,0 +1,23 @@ +drop table if exists players; +create table players ( + id integer primary key autoincrement, + firstname text not null, + name text not null, + ban_end float not null +); + +drop table if exists machines; +create table machines ( + id integer primary key autoincrement, + player_id integer not null, + ip text not null +); + +drop table if exists bans; +create table bans ( + id integer primary key autoincrement, + player_id integer not null, + target_id integer not null, + success integer not null, + time float not null +); diff --git a/static/favicon.ico b/static/favicon.ico new file mode 100644 index 0000000000000000000000000000000000000000..2b7f7c0627f8f5c55f4700bba42fb6e0db672ef3 GIT binary patch literal 1406 zcmeH{J8r^25Qaa;A+h5;aN;Dyc@aA?B(X0+WtT`4RCGuY;sTU3)LejuiVIjmqN7Ek zae<-Z0CcoSS)?GGhKiC|&Fp+L(m&cM79?@fX+%``Nx>bE7cNRM5 zR8>XOG<03ZFbqu7#Ih`G+s1JmT-U|(JPL&ZzV8zR0mWjGQmI6_T&7Z~P_0&})oRr1 zbsCKZ&1REUt3|urrqk)r?RM$)dW2y}zu#vt7%&_T8I4Aa$77->VltT!$1&6Cl-X>? zd_HHfSg>3!S*=#Po^$9OHgMR$9ygG^T#G%rH-DNJwgjqmmD|jCGQ_8oIrcWJI5N-I z8xr?J21iS9DtGoRG`4p8{oYkm+1hvh3$OD; A#sB~S literal 0 HcmV?d00001 diff --git a/static/img/asocial_metzwork_v1.png b/static/img/asocial_metzwork_v1.png new file mode 100644 index 0000000000000000000000000000000000000000..1f643cb337856fedf5895a92d86a95cd393d2e34 GIT binary patch literal 9798 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 L71`g?UjqLZ5>d6C literal 0 HcmV?d00001 diff --git a/static/img/corner_bottomleft.png b/static/img/corner_bottomleft.png new file mode 100644 index 0000000000000000000000000000000000000000..fd034286165b957b97e9992f84bb01e739ea0a2f GIT binary patch literal 773 zcmV+g1N!`lP)`alMD2Nc_-D+W&y#t%w>~7Ya15-@r-rjJtJMnk_xBnp6o<%Wvq=fU{N#=S0A1HHnM|b5 z=c9PyWK{;Uf0+dMdI-|I-SmkJwJKAyS}@-L$O%Y*ce3ufdG2F9=5l)B^%?&Y&OI3 z@i80Ym1?z$gM$M}7{y3kUtc2@i%E`>Yos!n44$5zzOXThB$G*8TwF*Y1RLYb<>e*v z`8*GqUMUufkQ<&~`t^knI6FJT{{Ft?j&UUv3gPDF2D`hv^26^KXC{*g(&;n?g8_Gr zS92PT#>VZOH^C7?Y}`VA)ArfMalyE_1yripAei*z~-%d-C23%_@LGS+n+i9`aaR0^q73VVBdf9(tQ|LT!} z5CVo_ARG=O5{V!ZiC|}E2Z2BUx~_k}hPtjBzuUBL&noCLah;r700000NkvXXu0mjf DKATNk literal 0 HcmV?d00001 diff --git a/static/img/corner_bottomright.png b/static/img/corner_bottomright.png new file mode 100644 index 0000000000000000000000000000000000000000..1cde1b7a22919e069237a56147df6552f866535d GIT binary patch literal 780 zcmV+n1M~ceP)c3fs(IBb{s{*}v!3Bss_=Xr!dm@_gM z41nM-k%tjQ5%hXJ!Nwe=)9DaNl5muc!?G-HBEN#cHRfnn%`gnXE8nAV97ianI7-JU zl}aDCag_FAu~^7xG{VO0r`2kGpdid%(&_ZUeHW-COr=s$MbUI)WLXBM(@EOxw(9em zZA>zm{1ipAjhW46#A>yIAPAoxqshj^$(@%en$U#OlLrQ7X-*=)Ye3jVApg+c)g2E*-6ZO;ZWolYSf4&VNq|12Pq zBq@nR;ID!E(^TrSsrE}tI_WW8Q1sZ0E}h;0000< KMNUMnLSTXi4oqDD literal 0 HcmV?d00001 diff --git a/static/img/corner_topleft.png b/static/img/corner_topleft.png new file mode 100644 index 0000000000000000000000000000000000000000..9d16b631a716a191c8bf49c3c2f818f460c3e464 GIT binary patch literal 770 zcmV+d1O5DoP)QEd8@F&+4rxSE@lw&ZYATG|q&`EH1kl-kOgX-$&KgA{ab(x^S;edwr=d$@xE!Iq=JKPI7V*1wM+Zs^FX>nM}ek3>b!icsveG z)4&+}b9^wycqkM)>Rie-Lomi*Sr%;DhHcwOrBdSN=H@KtzB-shA_2#7kjv$e$z;T_ zSKil&L?S4c%joy}5Lc3mf|#a>hldBORx5FBxd=!mlR>A`!Dh1&*P63}q|<5idOZjq zSS(^XokI95Cv8c$+w~pDNntqW7!HTNML7vfHk-wKKED?} z&yS*1Diy5PYY~L}*y66$YC!}jN25feQM|mo1PbM77+u#f9*+ZuB7_jiF->`UdxNg) zmtAn3D8CM!Qyw251B-GnOtaa<-Q8VaQ4YQ(3kkB<9Fxsv@%;QOR8AQIvhzD%P1ErD`ik4zTWRK%of^|_x1~ba38q*qBA?GocL!4bH-tu`5n{2JbTHpG zre3d0iSlh@(&;n?gMqXgUSBq*(P%*CT|nileV_ODcc~xwJsVT2)udngd}@qonivj; zLQxb@WBy9DT7~Q=pBfX1L@=ApL^vFl9_F9M6bc0piU&-oR3ee>p_E7@Fqur~t=x8F z9LFIIFPK~|M;hBhi7|%7Vj=g3fL@KUEDMC<0b|=XNf6AAbBwC0ST2`m`{LR+jp3Yw zP&{Cg$s{Rw!5D@?3IwwUOgtVZ1uqy)(@4P!hA~D81hXH^2Qhd&`MR!4t78=V~b2Lhec$w7j^ z2uBwQjpHxcau5`sr8q~QI|W{OPLvU3eO`OZo6q;ubGbq(rSJ)((Fjt?j+FARloC=( z42MHJK0d-UO_-*MMx%jFrvuxzF)zet!@QSeS-8Ky7o}1OrBVrZcXyCdGK_9%l}bev zi$$cdI^*$J<@0%jLLr86a(#V` z&CN}Q(Xnk?rBW$)JRXM8d3t)n(a{mZI4KkgU%MVP$7;12{C+>f==6HM)7{-&hS9Ms zOP!pYFpQJS%S*W3Zidmhxw(PY>tz_7X0r*yFy`}h{nc8nmWV_m==b|G{rn&NP=;Zs zY&JXdH|NKO0f7DeeU(b3_>FNg%dheu`;D1o+cpjk4#e&4El+8Z+wDd!mplE)^Wj%4 z=2g937u(z07!HSA%%qKt4VB4ccuG3aXjHxD-*bM|DZT1;yCM(>ym?Z;ZZQDh^ZC@p z#RV6mGa8MswY4Rx)hZV=$>nk(nM`sqPQu}^s8lLk%(V0Kb1uf=t%zVSC>|ajxS0Qz zAq39O&bSzzmzNj#d_FN447iv{i;Ihh#bP`qo#W$Uo{|&8FvRQs?BZf3#N%CN8WK+D?EnA(07*qoM6N<$f^8gOkpKVy literal 0 HcmV?d00001 diff --git a/static/img/k6lqsh.png b/static/img/k6lqsh.png new file mode 100644 index 0000000000000000000000000000000000000000..66d04687a4ff37e149a29f37802e8051b68a3512 GIT binary patch literal 4160 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 KMNUMnLSTZf( literal 0 HcmV?d00001 diff --git a/static/img_red/asocial_metzwork_v1.png b/static/img_red/asocial_metzwork_v1.png new file mode 100644 index 0000000000000000000000000000000000000000..1f643cb337856fedf5895a92d86a95cd393d2e34 GIT binary patch literal 9798 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 L71`g?UjqLZ5>d6C literal 0 HcmV?d00001 diff --git a/static/img_red/corner_bottomleft.png b/static/img_red/corner_bottomleft.png new file mode 100644 index 0000000000000000000000000000000000000000..02c9b3060e69fdb1685982597ed4f2743ed26aef GIT binary patch literal 651 zcmeAS@N?(olHy`uVBq!ia0vp^ZXnFT1|$ph9<=}|wj^(N7l!{JxM1({$v_d#0*}aI z1_o|n5N2eUHAey{$X?><>&kwgQJR_6aJTk$pixW`o-U3d6}R5rw#^Pslwf!DK^H-!e@RPc!VwO%1_ySXpybq>nNgJ}nrWHa&~SFycqwD;AH-gw5z>niUY_}<`o-Q?WE zpB%oMC*Jl;FErb~;M(?&&G$X#8)sQ`CI7VeB5!@;_$!96v;J3q7b?jA{`A=4?fZz; fhQ=9}>X@xX-%kj7rF#*WY#2OU{an^LB{Ts5j#?1Z literal 0 HcmV?d00001 diff --git a/static/img_red/corner_bottomright.png b/static/img_red/corner_bottomright.png new file mode 100644 index 0000000000000000000000000000000000000000..7205d0f93696577398c3c7b98fd3e37cae64d42a GIT binary patch literal 405 zcmWlTODKeK6vcm^@tQFskD)p|R;H9USqN!}Vxtrm zln~{$pePn37D8b`W+8;|pT)VSd+zO=Gw5~|8+3^}z@XZdGQmXwglhuRAG0QC$nC7K z-N7IHz$=`?A#B1Fw1E>c;0uD`MEt`rID{c|LK+-EGkii6%)u{Y!V=`b23TMO9w8E{ zVHKVs6~4g=EievSa1GIr4qAW0ipY>WWv+6p50}CkslidKFc6Y#7mK#lUL|Tp#0DTS zHEj}Nm`5$Kh22O=nh>Mk(ikVC9#tu*sN8=!-PP`-7=zD_KAvjqn)liU-J$J1O8GVV z<0l-0O`~eYWT&sycPFQh9edB~^G3A&x7NNH--B#EevzLKX60Mitk2If>vi3Gp8kS* zx5*gV8zB9Bqg*F$p_-srlYTKfcQM;=kx*2<-afqGe7mxEpQP~Z=u&Twp+odRwYik# H!n&@1ueWOd literal 0 HcmV?d00001 diff --git a/static/img_red/corner_topleft.png b/static/img_red/corner_topleft.png new file mode 100644 index 0000000000000000000000000000000000000000..6004abdb7db3dc1b4d8910b44b06fa43e6296869 GIT binary patch literal 412 zcmWlUK}Z^47=|Ayvs_xO4lW5cvoIR?D`R*wQ&Y*rvO{)|iV+*TM0ML?(j3(0A!sm= z!4^T(p&*P#QNgBAfrBm^!h%7NgH}x#gE5`$_warX-}}MK`^^Od9*w$L4QPB`*MMYC zS=ANgnZLOu@gnFSbW2u3JNRJ=60ie@@EK0wClujYhCnaG;S>CYR(J~aFb-+xfJOKN z_h1c5V1{kb!aNMacSwQ(y5IsHLIGYu1MGqkzCyHQ*pzJ)(*uDJUAe4`MlsgwaWSiG z@yexU!W)(qZ#0&rAn`^gP1Uro&#n5V&{rrsRy=0;3om^x$KX)v^4Ow|il)l`AH_#^ zm38xlx5ts-(k)}m{%?Qm^_jEH_IrG9GThm4^5sE3o7`~NlTN$yam)Mr*4tu4m};v+ z7M;*FRXul%2FqC0KKuAi`mGj|-&U(mc{5kSl*x&BTHI;Wrec|MVO+>OS+>dRk#WIq Zy%wtM%z-}g;n$h0h0h&ut#^;i{0H)FZIu83 literal 0 HcmV?d00001 diff --git a/static/img_red/corner_topright.png b/static/img_red/corner_topright.png new file mode 100644 index 0000000000000000000000000000000000000000..402e0cf0654e92e32b437ac45f74cc2efa193899 GIT binary patch literal 413 zcmWlUJxE(|6vcm0<1;ZzjEf&nu}$z}(TENrD5)m(JxoIyGpOyLA|m3TL{JyM2GfXx zVj)4T;1a>oE`nfjkyp?{1Q8U)L3FT-5(kHp`t{Fn?z!i1IrrX>*VB?^EHDCDs^ats zexF1}YO>y2wgt_3-G0|Kyuc&G;RFug7c4^n+)xT>ViFQ?2=mY?0$~!Y@EiKT4F6yq zD&QG@KrQS*6)ZqD{Dn@~g12xB4)_oK@D+9;2QI({r<+#4*rXfrdD?K?oQY_3J*_QH zzUYe-Aq+!Ghd3)UHwhift9indM$`{3=~7pisxLMt<}!sfuR7oP+qJu+J;RjUtp8ZH z)*u}_5^?WC`G7mpyznihcyjd0*BM?M8w^AOE1ImDdV|x~_QQ+Dns_{F4UJC^$?`^c zy*~C-B1`*w!$L~?`F)#ONws3KXrE1%B{@CRT^X$tUD51L-ozhU@G2a;v8Uz6l<%4? d_$JadV~Cz-*I05s8QXis-=MlY&Yw+PGp{odZ~*`S literal 0 HcmV?d00001 diff --git a/static/img_red/k6lqsh.png b/static/img_red/k6lqsh.png new file mode 100644 index 0000000000000000000000000000000000000000..51d8119e701fd200f25384c30c2d5bfde7924af9 GIT binary patch literal 3526 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 t!70R#5aAW(3yO${(8dJ^;Jv*Tu es tranché +

+ {{ explanation }} +

+

+ Rétablissement de la connexion externe dans approximativement : +

+

+ {{ timeleft }}. +

+

+ (redémarrer le navigateur peut être nécessaire une fois ce délai écoulé) +

+{% endblock %} diff --git a/templates/home.html b/templates/home.html new file mode 100644 index 0000000..01da8a4 --- /dev/null +++ b/templates/home.html @@ -0,0 +1,27 @@ +{% extends "layout.html" %} +{% block content %} +

24 heures

+

Toi aussi, joue au rézoman !

+

+ Jusqu'à samedi 11h, tu peux essayer de trancher tes + camarades pour 30 min. +

+

+ Jouer +

+

Historique personnel

+ +{% if bans_hist != [] %} +
    + {% for entry in bans_hist %} +
  • + {{ entry[1] }} +
  • + {% endfor %} +
+{% else %} +

+ Rien pour l'instant +

+{% endif %} +{% endblock %} diff --git a/templates/home.html~ b/templates/home.html~ new file mode 100644 index 0000000..0708e74 --- /dev/null +++ b/templates/home.html~ @@ -0,0 +1,27 @@ +{% extends "layout.html" %} +{% block content %} +

24 heures

+

Toi aussi, joue au rézoman !

+

+ Jusqu'à mercredi 9h, tu peux essayer de trancher tes + camarades pour 30 min. +

+

+ Jouer +

+

Historique personnel

+ +{% if bans_hist != [] %} +
    + {% for entry in bans_hist %} +
  • + {{ entry[1] }} +
  • + {% endfor %} +
+{% else %} +

+ Rien pour l'instant +

+{% endif %} +{% endblock %} diff --git a/templates/layout.html b/templates/layout.html new file mode 100644 index 0000000..de1c7f1 --- /dev/null +++ b/templates/layout.html @@ -0,0 +1,43 @@ + + + + asocial metzwork - 24h + + + + + + +
+ + +
+
+
+
+
+
+ {% with messages = get_flashed_messages() %} + {% if messages %} +
    + {% for message in messages %} +
  • {{ message }}
  • + {% endfor %} +
+ {% endif %} + {% endwith %} + {% block content %}{% endblock %} +
+
+
+
+
+ +
+
+ + diff --git a/templates/layout_banned.html b/templates/layout_banned.html new file mode 100644 index 0000000..135c35d --- /dev/null +++ b/templates/layout_banned.html @@ -0,0 +1,44 @@ + + + + asocial metzwork - 24h + + + + + + + +
+ + +
+
+
+
+
+
+ {% with messages = get_flashed_messages() %} + {% if messages %} +
    + {% for message in messages %} +
  • {{ message }}
  • + {% endfor %} +
+ {% endif %} + {% endwith %} + {% block content %}{% endblock %} +
+
+
+
+
+ +
+
+ + diff --git a/templates/login.html b/templates/login.html new file mode 100644 index 0000000..d3b0844 --- /dev/null +++ b/templates/login.html @@ -0,0 +1,15 @@ +{% extends "layout.html" %} +{% block content %} +

Login

+{% if error %}

Error: {{ error }}{% endif %} +

+ +
+
Identifiant : +
+
Mot de passe : +
+
+
+
+{% endblock %} diff --git a/templates/not_subscribed.html b/templates/not_subscribed.html new file mode 100644 index 0000000..1c28c77 --- /dev/null +++ b/templates/not_subscribed.html @@ -0,0 +1,9 @@ +{% extends "layout.html" %} +{% block content %} +

Vous n'êtes pas inscrit

+

+ Si vous désirez participer malgré les risques que le jeu comporte, veuillez + envoyer un email à goulven.kermarec@supelec.fr . + (Vous ne pouvez pas jouer depuis Supélec) +

+{% endblock %} diff --git a/templates/not_subscribed.html~ b/templates/not_subscribed.html~ new file mode 100644 index 0000000..6c45143 --- /dev/null +++ b/templates/not_subscribed.html~ @@ -0,0 +1,9 @@ +{% extends "layout.html" %} +{% block content %} +

Vous n'êtes pas inscrits

+

+ Si vous désirez participer malgré les risques que le jeu comporte, veuillez + envoyer un email à goulven.kermarec@supelec.fr . + (Vous ne pouvez pas jouer depuis Supélec) +

+{% endblock %} diff --git a/templates/play.html b/templates/play.html new file mode 100644 index 0000000..46c40f3 --- /dev/null +++ b/templates/play.html @@ -0,0 +1,23 @@ +{% extends "layout.html" %} +{% block content %} +

24 heures

+

Trancher un joueur

+

+ Ta cible sera notifiée quelle que soit l'issue de ta tentative. Question + chance, c'est 50-50. +

+
+ + +
+

+« retour à l'accueil +

+{% endblock %}