From 144fe0b1844650f055d9b3871fd7958d2f6bbdc9 Mon Sep 17 00:00:00 2001 From: Bob Mottram Date: Fri, 4 Nov 2022 17:17:13 +0000 Subject: [PATCH 1/8] Manual section about notifications --- manual/manual.epub | Bin 1982989 -> 1983628 bytes manual/manual.html | 30 +++++++++++++++++++----------- manual/manual.md | 9 +++++++++ 3 files changed, 28 insertions(+), 11 deletions(-) diff --git a/manual/manual.epub b/manual/manual.epub index 5020d2fd05ccd0e553340ddc7ca86b4551ab0c03..d59b6f6ab9e9c060f878e18c9c20e17149e55483 100644 GIT binary patch delta 8177 zcmZu$2|QHo_n#R%V-RCB!!)*%UG|+q%34Ax+bgo~Wk`)Blr8%$v@1oj#SoInk}X-Y z_mU<1k}dSVbEWrJ{bxS+GtWKuob#OXJ?A;kea^&O^N+sa&upwmMa=<&(ZgW4$n){c z@>Gx^Y z-WyhY&NzuU?Z4z&>Cfi(y*QX>!zNv9%zq^ScXEmy&3IiIVIOWy*TR~f2Dks2LO-*b?RxeQ#5uNJm;F`LahDLuA`X58~>59ynO zdEVs<{JkZcN|)+2j0!`v`;XqOR}XoS%)%8_UB#vD+Qs!9iBAg&Q;_3wuBj*NsmnhV z@#g-@>8+UhkHT!5=Kh(*YjzSouvsuTzeFzO!@X)$x?yS(R; z6UkC0xlK4>LhGv4Qf$L__0tN~AKgVBPKzHOlw3dmTxYF+uc{K$*K9Dmb*>O7WH;FU8Jv>l3_x+h@yW4$lgOPB7 zQ@(_}3XRwH33eUlE_)~T(#Ou+cqvoHu23@QBG8>UgR1BqCF@7V`o20mnxs2&(Lww6 zhxn5RBJHo9i_aYnANTYLEPvGE*{vOGQn}V~*E99rUafhmca3qy4}(!htzT&^+7#fM zKN{iqE>yyIbBdmlQ>KFkLdi2=e&kW|11?Jj+>x7bD6!JcSw1s;zo-haUK>7&tM8LL&~zkgx5-SRg2Q3HS?Q2!Pr)j+T5+5ObLtqVWi02#M~^ zbYv}Ij3pc*xv-)La7A)7D=LeILMZfNH6l|65e_XF@Ztimy<~?L>}DP`B{4o5sNPP94 zv2eQXIRes4(7Ur|5dma#C9?|nsWKt?7SHWT17g&xfoJGb}S2ylhMsx}(P ztI&qdh=xu$cp<=xirmmiEdoFuth&-fth&;I7ae%flUH3CZtzi_kV9`WeAI_=Yg&LM)+c&vD${o+%w-xYOLSI5(0*@4Gq(k3C|0O zRxWJawy<;fY+R9YjqTGWb;Hc|k+w%?Rq`q~TUX~dI!PlPlO*E8yPNwxr;k&o$fh|^ z6@MC?ushE3-A5&|dn&Vy8vTZklUtrBD#eJg5fT^qz|FjUJbvf^iT!5wkDGO!bHw}N z14}qGX3?1uv(>76bl&X6JD;%#^uW7uu6+VxBa^ycNUvaf)n!$p_PujmX8L_yjq7&< zeA_r~FmCGGxVD`rNfD6*;DrL7mTXQ$vO;l5Y-#}mS2)v>w{y$GdICy{o@LgEo@F+2 z&+;A_MGA$i$cd7BOAn4rEB4p81ITS=e$s$PAA$AF(2_Y}CGJ4ovG$y1hcXKhgS3~& zJ5$umYt;Ila;dzzxHL2;Icj%BwCw$aXESh&Vq5E<8eToy6+&xa6_Jg;E z7jHYVD#~7xc=HmLvL`B9vPdR8!R*MD*?dn6>T;KWRxEMRy>5Ndw(ygo>E)A*4w6R& z*#k3!Uv=cr=f=IegxF(xz}A|6tJ_aIDu=Yho3)>popw@0OK72XHN;Sa^vJTE&(8K4 zPa+k&(GyI+ni!BBrZ-F{o@3T&Z1G%9>}vY4Gw&ls(VKVrqo}%1@26JwG&;%cSG3aq zz(dBTLN}_eS~7t+c_RmlRH0gCU;ciZqhV{J6pM8ib)*)2F4{RPd~Q?8sX-IBcRZ1F z)9$P;v0KFLwrJ*6=cKFzMrS#CjCUVGQL)6q8&w#3cdjep2IOFrIkG4@iiZ29@9>{=^x3B)?2rXYY;eE zkZbs@sGO=ixPJCp?c1?5m4!nzE}h8H0BcMi+-G_0$(0kRqMiEY8~`pQRbdPr zIX(cXwNv6)mQc?sp|v9HjZr)YmG>`3Mr%r7u?mK^4KkVsqlaLiEFuffnWphXRT?Z@ zy6`kj2%My1`9(vXgtmq38M2S;Dv!l_r{qrUJ-m1F72X97Q2cD*;r=Www& zIm)v(lB28awwx|mR;+Gz`QUnay545>o~scXPLE^l1g2$kRQpeD`6V3Q&$DLpWv!7h z^NPMpz1fCs)-=oSXkcAe*yO2UK&uau3)~PVe2_Xjo96Qsu!J8XH?QCf=_p&|w-VS{X@gRrYUeE*Uch+XQ=E-!V6d|?n31Yr$) z9R@cXX)@Dilp+np>_Br?zy)M}Mq%az+?H|lWNaym&kp<1F^Ju93?;fl5Sv9265q7Z zkx$K{N+5s986uca9VmPj$CC zHcXXp($Ir8tV1s|3S{X;9A-zR+J8kT3(TXLowsDfAz88}J&9aqLe08p|Zt+;WTwJcgviQ8zShl1H3WWXXxFw@7A<5A zh;CU=yehJu+Bjjyj<>0lf~AoVsWopa{>6yuiWVDP$O22Ks>XZ*|D?o>PT8}~txV%8 zY6Ac8BTl`iYpm9!Z4)i}mAVD9J>qOX{4^?-U&~yqFK6JSu4v}}VAX$#Z<>cIIi1VP z3Fe51sJcxz(k?^4{Vk^qsT<4mM9N z@9V@PFY0sSbMtT7+^GK^>UT>GonBSLJ{kMth*yC12Db@Gk8~=sv^%bvef_2a-|0;u zKtw*6z9APaQc=B~a^-VNNM}<%%PRae#%zcumPk&sH5a$N*?x!rzGPWK1dqk53uQ+J zaa}{I&w@G`kW*Wm|bdf8UIvQUze|;q74L%^W40APAJ0S zE_X)+^K0Dv{@bNdMRw|!;nB3s`l#M@?)~rtPcA8O*tfVEvxHWzB!WfoH4gowjft@i zJuECi{@ZqvrVeh6{yii1Vu`U=)$SY}`(8KmCd|-NyY+}W2`dqx5_m(-&ayMjk*D-! zx3hhH%+hFcHzGkNJx5aWo!MZ0wFLL9x+EtZ(=66kX+}Khb8+Hl`PL=By}YjG^Bf|j z=SkZy_q`jlA)ir}_7IvEU!iX=NHJA28vIwNbMvJmA15Z8CZg8x$A{WT4eL_f zs2IwbnSSnKN)pfOA7QvV%*v*Jf_LqlwukJ@<9`l6`s8!>yH8Th6{E{13+6FIcP3UX z-r=w}%__r%p{X6u-_@FQZCsg>D!v;sIA+pz&ZfkO>)}fi{$sjK$@)dVVy)5G^W#X{DW4+bwqKu3*GDIIQg3uu;D^1L6-HeJ!kD$$ zpej2bt2~43v9DY`wOlYGYmXS-s5auD7nQke!36Nh?X-ShcInHCGgFZZFK19ag%t&F z$E$BiynQZjDxTMw2}^&)ofMKkZ+y+VS#Uul^T`pM@4#50V{Yh-9j0|o-D#9&Y~vbi zHRNzlX-E92MADV!0d@VZn;MhI2!{-}K-H)#!I^_z#ZlIMdl@pE*`MeeM^b6&J~-!{ z94E^d11#9S`o!Jz`p_jEzvAkGRGbWh!F&RX4deIY6H8mcVq+a4#`&I(Nu!QSolD>Dz%@K18Y9Ry*!n z>zS5kw1%_>baU|gJk!;*4tw3vE4mu!*vx2vR})if5~;QBvCxXkNv*4@z2%%j66l+e zOYtv?yjWqVn;Oe*nL~S_6n>*!vqN~DBofyYcF0>$drQIb>}~bNz`Qk9?WL1kDbm%b zUTNdC+uOWS7_2C*`LYFG75&aDbkuYDRJFm?hKoVtx~d+cWUk()h6|EX?_D<&Pwxy zxuVF|G7n?#-f})8Wz^Dk#JgMZG} z8;2Ot?8Dx=H*US>uPt@NmL}1>B-OOti^PbH9QSwC$|raD1CZ67+xx_7lcTfX|^7kSf9nQ>VI>n2$hpB%p>J|G=8<2bu8 z$ZQFehkq{>UaBt2`LcdHyIL>oU@1a07W?t~N3*^YwkA=X3w$p+0$7u6c#aG+MDyuA z-Og|^+!zpxL|-%7GagPPOW7}2TsO5mkw4q8Uv86akkdoEtX@*}U<&8vIPI&{aT$XV z!hq}75AT9su}6qAbnqzqI^CZo)jvq1`HJFsRjo15^gx-h<1uQ$>%O?xgdyT${t-Xy z)2U%*xv0$7!>Rlqp$0t(9vxLU)M$(nu{yZ?1f7RMoc!0{nD^A< zyykTf{`{yxU4lnV6^>yvMuEs5T+T-4ArL43?{EzDB1wn4JYHk)dZ_&Wa61w_da7{D zqs+?0N5SQ`bRIHs^3%gHw2R?9CbppsZBIj%CQy=a<7RUT1`b%j&>2fPF$M?iU&Z((2 zmv6IjE#1e<3vb#LZOn(f-VNz%6m`K}R-E2ff*nL62zNoHKZf`KMO$b$;56 zyxYSw`L9>?x^!c`ZEuOr#!Xdrw>f36TzWQG#`dL&zQe6xNW3$YNz*(uB}d9)fH!5u z<;Tl`%VlOBXEbU0rbu1=FWP}N7yr7ZjeW^ad$M^FoS*smUH^9P9y(OmZSKR@rPI!3 zH*)8MvIqIXlX@N=m-o9h_+#be$pOV0p0E!;+~GWyxWU0t-ydnrvWGC&ryh!Rs(Nqv zRZO;oe^}@rD?adH=7aju6UBqQQ?=7fZ8gQ~7IoL}9DCIzf5@CMg4BZJZ4yI7&b1t% zORZb^SjzFRUzB&G0Nau{Wf$Xba!io#gW`l$3=P#A&s-KEtAQrdkgYw(ue7;-jWH~5 z%a>PL)QK2$9E&;WkwkpdgZmbsU14=1*Sup2{r?PWrqBxk+T~Vkx#mBIq+jE(3M<=O z^PVa6O2A)3tL$<^|Cq&%QIe_u-UZIE?y&YO8w}$6_^U9%)gG!vEisM=!M88Oa${c) zrJwB!udDLtKJfKuk-zum+`V@Z`;7JA2o9=WEn`y;+iX$r4#oik-iqOcC~v30j2K=9 z8VHEvH3^in(0@H-7z_<^?|w3ZrQpDWc^pRUKfOC`!(VM>sy`+25ip=r9?!>1QT(gB z_!rwCc;b}jiIE?6@hVyV1MVF1xxL?M?380kmNNAFE&=)GH7-~RZHyk7>kdhlq4Y2KoTk%Et7dn6% z_B4eW#;}`2;BQ87PXaYCEQROXQAH7?6=nc1hw#vU8GyzikdmO!3|Jk)^OGp(pI(jk zW-5Wf_P>Y0*nd-XA({Cn`eN?(eqx>;KEC3f?ic>R*EB=SB1)tc4wLv74&(Yw!6O6I zu7ZDTeVpvX&fELiI=TAnYDtmC(?bC{Gs<}8KA0=cf5Ah|!8OhQ z3bM}q#oCQ$1!`1&Myf>-^mCcO3S_ANq_|U}Nz2a)v`YM>xXFQ()B9P0crZ*5UJdFL ziV!Oxtno8&Wh=@C#?3I;l`hKC{_m3!OcrJZG-dI;kf5P7D5$u`3b;z+`K&0gZhbvC zdKP=RduamE9Z9eCkZc2HXXc7~)rT$uzeK#|9D(g-Kq%>hEe=0D7iT?X)Ri@_v-pc-TLYNXw zb|wxW8jLTLDgj<;0YRYP_Fv09kc|T%f;AEHK1cx+l;Ge1KJVf&OhJf+lLKH^`^ghc zNvA7Z9KgOM6dI^h{JB&ED5d3K4+n5d4KDyGn^XZQ_A+RIPW7i1Q2Pr^gyFwp`B4rH z9NSGs3(B0+3TU8cx7Z*lQ8ZIU17~;b%A>eguZ0Fa>?#kecdL~LmEQ$jME!;=*KstE zN6`QV0N_yu2bcBGKu`tC-wAP-@^mDG6DU{46CnN}3dQdmC$OcA=igbO%BjkY1UM`} z6AlB5@~=-u@Kyc2fTjw5A0)^`SqJ`ZSl}R-i;&>2*4AG^aJ+~GXm{P;kOu{kL@aQ8 z*R@}5uD=AGu3&-j-DRyxi5^`L7FgiL{O#H?O5Dstu!(tXoPTYtH(wvvKBWVLjhXzp zwiP3=fEl=39HwM%uM&`XwGal|+Y5uS{c@aAYb%?vzp~fX-{a!{R~`X4SW^(L!2o{O z;&=*1w-<3h?k-0E_1XT+@CVB{AYr%Y|7yDZl}Q&jaDcAdF5fK>r(jQ;v$1Um`hVZI)A w;_i0DKgx^guYFW$-aPLq;HTS9H02?C!dk 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 diff --git a/manual/manual.html b/manual/manual.html index d65392cd8..a1a196946 100644 --- a/manual/manual.html +++ b/manual/manual.html @@ -277,6 +277,14 @@ server then see caddy.example.conf.

Now you can navigate to your domain and register an account. The first account becomes the administrator.

+

Configuring notifications

+

Since Epicyon does not use javascript there are no notifications in +the browser. However, you can receive notifications via email, XMPP, Matrix or ntfy.

+

Add the following to /etc/crontab.

+
# */1 * * * * root /opt/epicyon/scripts/epicyon-notification

Installing on Onion or i2p domains

If you don’t have access to the clearnet, or prefer to avoid it, then @@ -294,24 +302,24 @@ instances.

Unlike some other instance types, Epicyon is really easy to upgrade. It only requires a git pull to obtain the changes from the upstream repo, then set permissions and restart the daemon.

-
cd /opt/epicyon
-git pull
-chown -R epicyon:epicyon *
-systemctl restart epicyon
+
cd /opt/epicyon
+git pull
+chown -R epicyon:epicyon *
+systemctl restart epicyon

Housekeeping

To avoid running out of disk space you will want to clear down old inbox posts. Posts from your instance outboxes will be unaffected.

Create an archive script /usr/bin/epicyon-archive:

-
#!/bin/bash
-cd /opt/epicyon || exit 0
-/usr/bin/python3 epicyon.py --archive none --archiveweeks 4 --maxposts 32000
+
#!/bin/bash
+cd /opt/epicyon || exit 0
+/usr/bin/python3 epicyon.py --archive none --archiveweeks 4 --maxposts 32000

You can adjust the maximum number of weeks and the maximum number of inbox posts as needed. Then add it as a cron entry.

-
echo "*/60 * * * * root /usr/bin/epicyon-archive" >> /etc/crontab
+
echo "*/60 * * * * root /usr/bin/epicyon-archive" >> /etc/crontab

Registering accounts

You will notice that within the systemd daemon the registration option is set to open. In a browser if diff --git a/manual/manual.md b/manual/manual.md index e481b3424..4635b4040 100644 --- a/manual/manual.md +++ b/manual/manual.md @@ -245,6 +245,15 @@ If you are using the [Caddy web server](https://caddyserver.com) then see [caddy Now you can navigate to your domain and register an account. The first account becomes the administrator. +## Configuring notifications +Since Epicyon does not use javascript there are no notifications in the browser. However, you can receive notifications via email, XMPP, [Matrix](https://matrix.org) or [ntfy](https://ntfy.sh). + +Add the following to */etc/crontab*. + +``` bash +# */1 * * * * root /opt/epicyon/scripts/epicyon-notification +``` + ## Installing on Onion or i2p domains If you don't have access to the clearnet, or prefer to avoid it, then it's possible to run an Epicyon instance easily from your laptop. There are scripts within the *deploy* directory which can be used to install an instance on a Debian or Arch/Parabola operating system. With some modification of package names they could be also used with other distros. From 44982265baac930357ef21520bc8d326da626956 Mon Sep 17 00:00:00 2001 From: Bob Mottram Date: Fri, 4 Nov 2022 17:22:18 +0000 Subject: [PATCH 2/8] Manual section about notifications --- manual/manual.epub | Bin 1983628 -> 1983778 bytes manual/manual.html | 33 ++++++++++++++++++++------------- manual/manual.md | 13 +++++++++++-- 3 files changed, 31 insertions(+), 15 deletions(-) diff --git a/manual/manual.epub b/manual/manual.epub index d59b6f6ab9e9c060f878e18c9c20e17149e55483..a1bfaf2a40dc6682d1c8761a78d71113ce8b784d 100644 GIT binary patch delta 7321 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 delta 7143 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 diff --git a/manual/manual.html b/manual/manual.html index a1a196946..b8aeb7cc8 100644 --- a/manual/manual.html +++ b/manual/manual.html @@ -282,9 +282,16 @@ first account becomes the administrator.

the browser. However, you can receive notifications via email, XMPP, Matrix or ntfy.

-

Add the following to /etc/crontab.

+

Copy the notifications script:

# */1 * * * * root /opt/epicyon/scripts/epicyon-notification
+class="sourceCode bash">cp /opt/epicyon/scripts/epicyon-notification /usr/local/bin/epicyon-notification +chmod +x /usr/local/bin/epicyon-notification +

If you are using email for notifications and it is a single user +instance then you might want to edit MY_EMAIL_ADDRESS within +/usr/local/bin/epicyon-notification.

+

Then add the following to /etc/crontab.

+
# */1 * * * * root /usr/local/bin/epicyon-notification

Installing on Onion or i2p domains

If you don’t have access to the clearnet, or prefer to avoid it, then @@ -302,24 +309,24 @@ instances.

Unlike some other instance types, Epicyon is really easy to upgrade. It only requires a git pull to obtain the changes from the upstream repo, then set permissions and restart the daemon.

-
cd /opt/epicyon
-git pull
-chown -R epicyon:epicyon *
-systemctl restart epicyon
+
cd /opt/epicyon
+git pull
+chown -R epicyon:epicyon *
+systemctl restart epicyon

Housekeeping

To avoid running out of disk space you will want to clear down old inbox posts. Posts from your instance outboxes will be unaffected.

Create an archive script /usr/bin/epicyon-archive:

-
#!/bin/bash
-cd /opt/epicyon || exit 0
-/usr/bin/python3 epicyon.py --archive none --archiveweeks 4 --maxposts 32000
+
#!/bin/bash
+cd /opt/epicyon || exit 0
+/usr/bin/python3 epicyon.py --archive none --archiveweeks 4 --maxposts 32000

You can adjust the maximum number of weeks and the maximum number of inbox posts as needed. Then add it as a cron entry.

-
echo "*/60 * * * * root /usr/bin/epicyon-archive" >> /etc/crontab
+
echo "*/60 * * * * root /usr/bin/epicyon-archive" >> /etc/crontab

Registering accounts

You will notice that within the systemd daemon the registration option is set to open. In a browser if diff --git a/manual/manual.md b/manual/manual.md index 4635b4040..c4cd66ccd 100644 --- a/manual/manual.md +++ b/manual/manual.md @@ -248,10 +248,19 @@ Now you can navigate to your domain and register an account. The first account b ## Configuring notifications Since Epicyon does not use javascript there are no notifications in the browser. However, you can receive notifications via email, XMPP, [Matrix](https://matrix.org) or [ntfy](https://ntfy.sh). -Add the following to */etc/crontab*. +Copy the notifications script: ``` bash -# */1 * * * * root /opt/epicyon/scripts/epicyon-notification +cp /opt/epicyon/scripts/epicyon-notification /usr/local/bin/epicyon-notification +chmod +x /usr/local/bin/epicyon-notification +``` + +If you are using email for notifications and it is a single user instance then you might want to edit *MY_EMAIL_ADDRESS* within */usr/local/bin/epicyon-notification*. + +Then add the following to */etc/crontab*. + +``` bash +# */1 * * * * root /usr/local/bin/epicyon-notification ``` ## Installing on Onion or i2p domains From b16f14b478130d176f0175bc0d75a6926c1f889a Mon Sep 17 00:00:00 2001 From: Bob Mottram Date: Fri, 4 Nov 2022 21:07:55 +0000 Subject: [PATCH 3/8] Add gemini link to profile --- daemon.py | 17 +++++++++++ donate.py | 76 +++++++++++++++++++++++++++++++++++++++++++++++ webapp_profile.py | 14 +++++++-- 3 files changed, 104 insertions(+), 3 deletions(-) diff --git a/daemon.py b/daemon.py index 7522aee37..2dada9821 100644 --- a/daemon.py +++ b/daemon.py @@ -58,6 +58,8 @@ from donate import get_donation_url from donate import set_donation_url from donate import get_website from donate import set_website +from donate import get_gemini_link +from donate import set_gemini_link from person import clear_person_qrcodes from person import add_alternate_domains from person import add_actor_update_timestamp @@ -6452,6 +6454,21 @@ class PubServer(BaseHTTPRequestHandler): set_website(actor_json, '', self.server.translate) actor_changed = True + # change gemini link + current_gemini_link = \ + get_gemini_link(actor_json, self.server.translate) + if fields.get('geminiLink'): + if fields['geminiLink'] != current_gemini_link: + set_gemini_link(actor_json, + fields['geminiLink'], + self.server.translate) + actor_changed = True + else: + if current_gemini_link: + set_gemini_link(actor_json, '', + self.server.translate) + actor_changed = True + # account moved to new address moved_to = '' if actor_json.get('movedTo'): diff --git a/donate.py b/donate.py index 343c8a817..1064fef0e 100644 --- a/donate.py +++ b/donate.py @@ -21,6 +21,10 @@ def _get_website_strings() -> []: return ['www', 'website', 'web', 'homepage'] +def _get_gemini_strings() -> []: + return ('gemini', 'capsule', 'gemlog') + + def get_donation_url(actor_json: {}) -> str: """Returns a link used for donations """ @@ -82,6 +86,34 @@ def get_website(actor_json: {}, translate: {}) -> str: return '' +def get_gemini_link(actor_json: {}, translate: {}) -> str: + """Returns a gemini link + """ + if not actor_json.get('attachment'): + return '' + match_strings = _get_gemini_strings() + for property_value in actor_json['attachment']: + name_value = None + if property_value.get('name'): + name_value = property_value['name'] + elif property_value.get('schema:name'): + name_value = property_value['schema:name'] + if not name_value: + continue + if name_value.lower() not in match_strings: + continue + if not property_value.get('type'): + continue + prop_value_name, _ = \ + get_attachment_property_value(property_value) + if not prop_value_name: + continue + if not property_value['type'].endswith('PropertyValue'): + continue + return property_value[prop_value_name] + return '' + + def set_donation_url(actor_json: {}, donate_url: str) -> None: """Sets a link used for donations """ @@ -203,3 +235,47 @@ def set_website(actor_json: {}, website_url: str, translate: {}) -> None: "value": website_url } actor_json['attachment'].append(new_entry) + + +def set_gemini_link(actor_json: {}, gemini_link: str, translate: {}) -> None: + """Sets a gemini link + """ + gemini_link = gemini_link.strip() + not_link = False + if '.' not in gemini_link: + not_link = True + if '://' not in gemini_link: + not_link = True + if ' ' in gemini_link: + not_link = True + if '<' in gemini_link: + not_link = True + + if not actor_json.get('attachment'): + actor_json['attachment'] = [] + + match_strings = _get_gemini_strings() + match_strings.append('gemini') + + # remove any existing value + property_found = None + for property_value in actor_json['attachment']: + if not property_value.get('name'): + continue + if not property_value.get('type'): + continue + if property_value['name'].lower() not in match_strings: + continue + property_found = property_value + break + if property_found: + actor_json['attachment'].remove(property_found) + if not_link: + return + + new_entry = { + "name": 'Gemini', + "type": "PropertyValue", + "value": gemini_link + } + actor_json['attachment'].append(new_entry) diff --git a/webapp_profile.py b/webapp_profile.py index 5d24f5977..623b7f8ea 100644 --- a/webapp_profile.py +++ b/webapp_profile.py @@ -46,6 +46,7 @@ from posts import parse_user_feed from posts import is_create_inside_announce from donate import get_donation_url from donate import get_website +from donate import get_gemini_link from xmpp import get_xmpp_address from matrix import get_matrix_address from ssb import get_ssb_address @@ -699,6 +700,7 @@ def html_profile(signing_priv_key_pem: str, donate_section = '' donate_url = get_donation_url(profile_json) website_url = get_website(profile_json, translate) + gemini_link = get_gemini_link(profile_json, translate) blog_address = get_blog_address(profile_json) enigma_pub_key = get_enigma_pub_key(profile_json) pgp_pub_key = get_pgp_pub_key(profile_json) @@ -2168,8 +2170,8 @@ def _get_supported_languagesSorted(base_dir: str) -> str: def _html_edit_profile_main(base_dir: str, display_nickname: str, bio_str: str, moved_to: str, donate_url: str, website_url: str, - blog_address: str, actor_json: {}, - translate: {}, + gemini_link: str, blog_address: str, + actor_json: {}, translate: {}, nickname: str, domain: str) -> str: """main info on edit profile screen """ @@ -2225,6 +2227,10 @@ def _html_edit_profile_main(base_dir: str, display_nickname: str, bio_str: str, edit_text_field(translate['Website'], 'websiteUrl', website_url, 'https://...') + edit_profile_form += \ + edit_text_field('Gemini', 'geminiLink', + gemini_link, 'gemini://...') + edit_profile_form += \ edit_text_field('Blog', 'blogAddress', blog_address, 'https://...') @@ -2330,7 +2336,7 @@ def html_edit_profile(server, translate: {}, notify_likes = notify_reactions = '' hide_like_button = hide_reaction_button = media_instance_str = '' blogs_instance_str = news_instance_str = moved_to = twitter_str = '' - bio_str = donate_url = website_url = email_address = '' + bio_str = donate_url = website_url = gemini_link = email_address = '' pgp_pub_key = enigma_pub_key = '' pgp_fingerprint = xmpp_address = matrix_address = '' ssb_address = blog_address = tox_address = '' @@ -2343,6 +2349,7 @@ def html_edit_profile(server, translate: {}, moved_to = actor_json['movedTo'] donate_url = get_donation_url(actor_json) website_url = get_website(actor_json, translate) + gemini_link = get_gemini_link(actor_json, translate) xmpp_address = get_xmpp_address(actor_json) matrix_address = get_matrix_address(actor_json) ssb_address = get_ssb_address(actor_json) @@ -2484,6 +2491,7 @@ def html_edit_profile(server, translate: {}, edit_profile_form += \ _html_edit_profile_main(base_dir, display_nickname, bio_str, moved_to, donate_url, website_url, + gemini_link, blog_address, actor_json, translate, nickname, domain) From baab9ff98b50d9072fc11a288effdedaef7e980e Mon Sep 17 00:00:00 2001 From: Bob Mottram Date: Fri, 4 Nov 2022 21:13:07 +0000 Subject: [PATCH 4/8] Tidying --- donate.py | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/donate.py b/donate.py index 1064fef0e..0635b0e85 100644 --- a/donate.py +++ b/donate.py @@ -22,7 +22,7 @@ def _get_website_strings() -> []: def _get_gemini_strings() -> []: - return ('gemini', 'capsule', 'gemlog') + return ['gemini', 'capsule', 'gemlog'] def get_donation_url(actor_json: {}) -> str: @@ -255,7 +255,6 @@ def set_gemini_link(actor_json: {}, gemini_link: str, translate: {}) -> None: actor_json['attachment'] = [] match_strings = _get_gemini_strings() - match_strings.append('gemini') # remove any existing value property_found = None From 1dc62429ca145172d5eb5ff125721208e7b3ff47 Mon Sep 17 00:00:00 2001 From: Bob Mottram Date: Fri, 4 Nov 2022 21:20:01 +0000 Subject: [PATCH 5/8] Show gemini link on profile screen --- webapp_profile.py | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/webapp_profile.py b/webapp_profile.py index 623b7f8ea..f780fecba 100644 --- a/webapp_profile.py +++ b/webapp_profile.py @@ -727,6 +727,10 @@ def html_profile(signing_priv_key_pem: str, donate_section += \ '

' + translate['Website'] + ': ' + website_url + '

\n' + if gemini_link: + donate_section += \ + '

' + 'Gemini' + ': ' + gemini_link + '

\n' if email_address: donate_section += \ '

' + translate['Email'] + ': 🌐 ' + \ web_address + '

\n' + if gemini_link: + gemini_str = remove_html(gemini_link) + if '://' not in gemini_str: + gemini_str = 'gemini://' + gemini_str + options_str += \ + '

🌐 ' + \ + gemini_link + '

\n' if xmpp_address: options_str += \ '

' + translate['XMPP'] + \ From 5c1969121f7c7372f43f1fcfdc8412fa3023c77e Mon Sep 17 00:00:00 2001 From: Bob Mottram Date: Sat, 5 Nov 2022 11:34:04 +0000 Subject: [PATCH 7/8] Gemini emoji on person options screen --- webapp_person_options.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/webapp_person_options.py b/webapp_person_options.py index 85cceec14..ff89710f6 100644 --- a/webapp_person_options.py +++ b/webapp_person_options.py @@ -346,7 +346,7 @@ def html_person_options(default_timeline: str, if '://' not in gemini_str: gemini_str = 'gemini://' + gemini_str options_str += \ - '

🌐 ' + \ + '

β™Š ' + \ gemini_link + '

\n' if xmpp_address: options_str += \ From cd442d141592db09dbfd68c8342e64b3b35fd42a Mon Sep 17 00:00:00 2001 From: Bob Mottram Date: Sun, 6 Nov 2022 09:56:42 +0000 Subject: [PATCH 8/8] Block scanner --- crawlers.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/crawlers.py b/crawlers.py index d95aa2aa4..de61358f7 100644 --- a/crawlers.py +++ b/crawlers.py @@ -16,7 +16,7 @@ from blocking import update_blocked_cache from blocking import is_blocked_domain default_user_agent_blocks = [ - 'fedilist' + 'fedilist', 'ncsc scan' ]