diff --git a/12345.sh b/12345.sh new file mode 100644 index 00000000..a4fe2bef --- /dev/null +++ b/12345.sh @@ -0,0 +1,284 @@ +#!/bin/bash +################################################################################ +# Author: Fred (support@qo-op.com) +# Version: 0.1 +# License: AGPL-3.0 (https://choosealicense.com/licenses/agpl-3.0/) +################################################################################ +################################################################################ +## Collect email / phrase 1 / phrase 2 Form +## Generate / Find key & Astronaut PLAYER +## Return TW + +MY_PATH="`dirname \"$0\"`" # relative +MY_PATH="`( cd \"$MY_PATH\" && pwd )`" # absolutized and normalized +ME="${0##*/}" + +MOATS=$(date -u +"%Y%m%d%H%M%S%4N") +IPFSNODEID=$(cat ~/.ipfs/config | jq -r .Identity.PeerID) + +## CHECK FOR ANY ALREADY RUNNING nc +ncrunning=$(ps auxf --sort=+utime | grep -w nc | grep -v -E 'color=auto|grep' | tail -n 1 | cut -d " " -f 1) +[[ $ncrunning ]] && echo "already running" && exit 1 + +# Check if Astroport Station already has a "captain" +echo "Connect Astronaut" + +xdg-open "file://$HOME/.zen/Astroport.ONE/templates/instascan.html" 2>/dev/null + +function urldecode() { : "${*//+/ }"; echo -e "${_//%/\\x}"; } + +while true; do + + URL=$(cat $HOME/.zen/Astroport.ONE/templates/index.http | nc -l -p 1234 -q 1 | grep '^GET' | cut -d ' ' -f2 | cut -d '?' -f2) + echo "==================================================" + echo "GET RECEPTION : $URL" + arr=(${URL//[=&]/ }) + echo "PARAM : ${arr[0]} = ${arr[1]} & ${arr[2]} = ${arr[3]} & ${arr[4]} = ${arr[5]}" + + if [[ ${arr[0]} == "email" ]]; then + + EMAIL=$(urldecode ${arr[1]}) + SALT=$(urldecode ${arr[3]}) + PEPPER=$(urldecode ${arr[5]}) + + echo "$SALT" + echo "$PEPPER" + + # CHECK IPNS KEY EXISTENCE + ipfs key rm gchange 2>/dev/null + rm -f ~/.zen/tmp/gchange.key + ${MY_PATH}/keygen -t ipfs -o ~/.zen/tmp/gchange.key "$SALT" "$PEPPER" + GNS=$(ipfs key import gchange -f pem-pkcs8-cleartext ~/.zen/tmp/gchange.key ) + echo "/ipns/$GNS" + + echo "Getting latest online TW..." + mkdir -p ~/.zen/tmp/TW + rm -f ~/.zen/tmp/TW/index.html + YOU=$(ps auxf --sort=+utime | grep -w ipfs | grep -v -E 'color=auto|grep' | tail -n 1 | cut -d " " -f 1); + LIBRA=$(head -n 2 ~/.zen/Astroport.ONE/A_boostrap_nodes.txt | tail -n 1 | cut -d ' ' -f 2) + echo "$LIBRA/ipns/$GNS" + + [[ $YOU ]] && ipfs --timeout 12s cat /ipns/$GNS > ~/.zen/tmp/TW/index.html \ + || curl -so ~/.zen/tmp/TW/index.html "$LIBRA/ipns/$GNS" + + if [ ! -s ~/.zen/tmp/TW/index.html ]; then + rm -f ~/.zen/tmp/TW/index.html + echo "Aucun TW détecté! Creation TW Astronaute" + ################################################################################################### + PLAYER="$EMAIL" + PSEUDO=$(echo $PLAYER | cut -d '@' -f 1) + PSEUDO=${PSEUDO,,}; PSEUDO=${PSEUDO%%[0-9]*} + + ${MY_PATH}/tools/keygen -t duniter -o /tmp/secret.dunikey "$SALT" "$PEPPER" + G1PUB=$(cat /tmp/secret.dunikey | grep 'pub:' | cut -d ' ' -f 2) + + [[ ! $G1PUB ]] && echo "ERREUR. clef Cesium absente." && exit 1 + + ## CREATE Player personnal files storage and IPFS publish directory + mkdir -p ~/.zen/game/players/$PLAYER # Prepare PLAYER datastructure + mkdir -p ~/.zen/tmp/ + + mv /tmp/secret.dunikey ~/.zen/game/players/$PLAYER/ + + + # Create Player "IPNS Key" (key import) + ${MY_PATH}/keygen -t ipfs -o ~/.zen/game/players/$PLAYER/secret.player "$SALT" "$PEPPER" + ipfs key import $PLAYER -f pem-pkcs8-cleartext ~/.zen/game/players/$PLAYER/secret.player + ASTRONAUTENS=$(ipfs key import $G1PUB -f pem-pkcs8-cleartext ~/.zen/game/players/$PLAYER/secret.player) + + mkdir -p ~/.zen/game/players/$PLAYER/ipfs/G1SSB # Prepare astrXbian sub-datastructure + mkdir -p ~/.zen/game/players/$PLAYER/ipfs_swarm + + qrencode -s 12 -o ~/.zen/game/players/$PLAYER/QR.png "$G1PUB" + cp ~/.zen/game/players/$PLAYER/QR.png ~/.zen/game/players/$PLAYER/ipfs/QR.png + echo "$G1PUB" > ~/.zen/game/players/$PLAYER/ipfs/G1SSB/_g1.pubkey # G1SSB NOTATION (astrXbian compatible) + + secFromDunikey=$(cat ~/.zen/game/players/$PLAYER/secret.dunikey | grep "sec" | cut -d ' ' -f2) + echo "$secFromDunikey" > /tmp/${PSEUDO}.sec + openssl enc -aes-256-cbc -salt -in /tmp/${PSEUDO}.sec -out "/tmp/enc.${PSEUDO}.sec" -k $PASS 2>/dev/null + PASsec=$(cat /tmp/enc.${PSEUDO}.sec | base58) && rm -f /tmp/${PSEUDO}.sec + qrencode -s 12 -o $HOME/.zen/game/players/$PLAYER/QRsec.png $PASsec + + echo "Votre Clef publique G1 est : $G1PUB"; sleep 1 + + ### INITALISATION WIKI dans leurs répertoires de publication IPFS + ############ TODO améliorer templates, sed, ajouter index.html, etc... + MOATS=$(date -u +"%Y%m%d%H%M%S%4N") + echo "Nouveau Canal TW Astronaute" + mkdir -p ~/.zen/game/players/$PLAYER/ipfs/moa/ + + cp ~/.zen/Astroport.ONE/templates/twdefault.html ~/.zen/game/players/$PLAYER/ipfs/moa/index.html + sed -i "s~_BIRTHDATE_~${MOATS}~g" ~/.zen/game/players/$PLAYER/ipfs/moa/index.html + sed -i "s~_PLAYER_~${PLAYER}~g" ~/.zen/game/players/$PLAYER/ipfs/moa/index.html + sed -i "s~_PSEUDO_~${PSEUDO}~g" ~/.zen/game/players/$PLAYER/ipfs/moa/index.html + sed -i "s~_WISHKEY_~${G1PUB}~g" ~/.zen/game/players/$PLAYER/ipfs/moa/index.html + + sed -i "s~_G1PUB_~${G1PUB}~g" ~/.zen/game/players/$PLAYER/ipfs/moa/index.html + sed -i "s~_QRSEC_~${PASsec}~g" ~/.zen/game/players/$PLAYER/ipfs/moa/index.html + + sed -i "s~G1Voeu~G1Visa~g" ~/.zen/game/players/$PLAYER/ipfs/moa/index.html + sed -i "s~Moa~${PLAYER}~g" ~/.zen/game/players/$PLAYER/ipfs/moa/index.html + + + ASTRONAUTENS=$(ipfs key list -l | grep -w "${PLAYER}" | cut -d ' ' -f 1) + # La Clef IPNS porte comme nom G1PUB et PLAYER + sed -i "s~_MEDIAKEY_~${PLAYER}~g" ~/.zen/game/players/$PLAYER/ipfs/moa/index.html + sed -i "s~k2k4r8kxfnknsdf7tpyc46ks2jb3s9uvd3lqtcv9xlq9rsoem7jajd75~${ASTRONAUTENS}~g" ~/.zen/game/players/$PLAYER/ipfs/moa/index.html + sed -i "s~ipfs.infura.io~tube.copylaradio.com~g" ~/.zen/game/players/$PLAYER/ipfs/moa/index.html + + myIP=$(hostname -I | awk '{print $1}' | head -n 1) + sed -i "s~127.0.0.1~$myIP~g" ~/.zen/game/players/$PLAYER/ipfs/moa/index.html + + ## ADD SYSTEM TW + tiddlywiki --load ~/.zen/game/players/$PLAYER/ipfs/moa/index.html \ + --import ~/.zen/Astroport.ONE/templates/data/local.api.json "application/json" \ + --import ~/.zen/Astroport.ONE/templates/data/local.gw.json "application/json" \ + --output ~/.zen/tmp --render "$:/core/save/all" "newindex.html" "text/plain" + + [[ -s ~/.zen/tmp/newindex.html ]] && cp ~/.zen/tmp/newindex.html ~/.zen/game/players/$PLAYER/ipfs/moa/index.html + + ## ID CARD + convert ~/.zen/game/players/$PLAYER/QR.png -resize 300 /tmp/QR.png + convert ${MY_PATH}/images/astroport.jpg -resize 300 /tmp/ASTROPORT.png + + composite -compose Over -gravity SouthWest -geometry +280+20 /tmp/ASTROPORT.png ${MY_PATH}/../images/Brother_600x400.png /tmp/astroport.png + composite -compose Over -gravity NorthWest -geometry +0+0 /tmp/QR.png /tmp/astroport.png /tmp/one.png + # composite -compose Over -gravity NorthWest -geometry +280+280 ~/.zen/game/players/.current/QRsec.png /tmp/one.png /tmp/image.png + + convert -gravity northwest -pointsize 35 -fill black -draw "text 50,300 \"$PSEUDO\"" /tmp/one.png /tmp/image.png + convert -gravity northwest -pointsize 30 -fill black -draw "text 300,40 \"$PLAYER\"" /tmp/image.png /tmp/pseudo.png + convert -gravity northeast -pointsize 25 -fill black -draw "text 20,180 \"$PASS\"" /tmp/pseudo.png /tmp/pass.png + convert -gravity northwest -pointsize 25 -fill black -draw "text 300,100 \"$SALT\"" /tmp/pass.png /tmp/salt.png + convert -gravity northwest -pointsize 25 -fill black -draw "text 300,140 \"$PEPPER\"" /tmp/salt.png ~/.zen/game/players/$PLAYER/ID.png + + # INSERTED IMAGE IPFS + IASTRO=$(ipfs add -Hq ~/.zen/game/players/$PLAYER/ID.png | tail -n 1) + sed -i "s~bafybeidhghlcx3zdzdah2pzddhoicywmydintj4mosgtygr6f2dlfwmg7a~${IASTRO}~g" ~/.zen/game/players/$PLAYER/ipfs/moa/index.html + + ## Copy Astro TW + cp ~/.zen/tmp/TW/index.html ~/.zen/game/players/$PLAYER/ipfs/moa/index.html + + echo "## PUBLISHING ${PLAYER} /ipns/$ASTRONAUTENS/" + IPUSH=$(ipfs add -Hq ~/.zen/game/players/$PLAYER/ipfs/moa/index.html | tail -n 1) + echo $IPUSH > ~/.zen/game/players/$PLAYER/ipfs/moa/.chain # Contains last IPFS backup PLAYER KEY + echo "/ipfs/$IPUSH" + echo $MOATS > ~/.zen/game/players/$PLAYER/ipfs/moa/.moats + ipfs name publish --key=${PLAYER} /ipfs/$IPUSH 2>/dev/null + + ## MEMORISE PLAYER Ŋ1 ZONE + echo "$PLAYER" > ~/.zen/game/players/$PLAYER/.player + echo "$PSEUDO" > ~/.zen/game/players/$PLAYER/.pseudo + echo "$G1PUB" > ~/.zen/game/players/$PLAYER/.g1pub + echo "$ASTRONAUTENS" > ~/.zen/game/players/$PLAYER/.playerns + echo "$SALT" > ~/.zen/game/players/$PLAYER/secret.june + echo "$PEPPER" >> ~/.zen/game/players/$PLAYER/secret.june + + rm -f ~/.zen/game/players/.current + ln -s ~/.zen/game/players/$PLAYER ~/.zen/game/players/.current + + qrencode -s 12 -o "$HOME/.zen/game/players/$PLAYER/QR.ASTRONAUTENS.png" "http://127.0.0.1:8080/ipns/$ASTRONAUTENS" + echo; echo "Création de votre clef et QR codes de votre réseau Astroport Ŋ1" + + echo; echo "*** Espace Astronaute Activé : ~/.zen/game/players/$PLAYER/" + echo; echo "*** Votre TW Ŋ7 : $PLAYER"; echo "http://$myIP:8080/ipns/$ASTRONAUTENS" + + # PASS CRYPTING KEY + PASS=$(echo "${RANDOM}${RANDOM}${RANDOM}${RANDOM}" | tail -c-7) + + echo; echo "Sécurisation de vos clefs par chiffrage SSL... "; sleep 1 + openssl enc -aes-256-cbc -salt -in "$HOME/.zen/game/players/$PLAYER/secret.june" -out "$HOME/.zen/game/players/$PLAYER/enc.secret.june" -k $PASS 2>/dev/null + openssl enc -aes-256-cbc -salt -in "$HOME/.zen/game/players/$PLAYER/secret.dunikey" -out "$HOME/.zen/game/players/$PLAYER/enc.secret.dunikey" -k $PASS 2>/dev/null + openssl enc -aes-256-cbc -salt -in "$HOME/.zen/game/players/$PLAYER/$KEYFILE -out" "$HOME/.zen/game/players/$PLAYER/enc.$KEYFILE" -k $PASS 2>/dev/null + ## TODO MORE SECURE ?! USE opengpg, natools, etc ... + # ${MY_PATH}/natools.py encrypt -p $G1PUB -i ~/.zen/game/players/$PLAYER/secret.dunikey -o "$HOME/.zen/game/players/$PLAYER/secret.dunikey.oasis" + + ################################################# + # !! TODO !! # DEMO MODE. REMOVE FOR PRODUCTION + echo "$PASS" > ~/.zen/game/players/$PLAYER/.pass + # ~/.zen/game/players/$PLAYER/secret.june SECURITY TODO + # Astronaut QRCode + PASS = LOGIN (=> DECRYPTING CRYPTO IPFS INDEX) + # TODO : Allow Astronaut PASS change ;) + ##################################################### + + ## DISCONNECT AND CONNECT CURRENT PLAYER + rm -f ~/.zen/game/players/.current + ln -s ~/.zen/game/players/$PLAYER ~/.zen/game/players/.current + + ## CREATE GCHANGE+ PROFILE + ${MY_PATH}/Connect_PLAYER_To_Gchange.sh + + ## INIT FRIENDSHIP CAPTAIN/ASTRONAUTS (LATER THROUGH GCHANGE) + ## ${MY_PATH}/FRIENDS.init.sh + ## NO. GCHANGE+ IS THE MAIN INTERFACE, astrXbian manage + echo "Bienvenue 'Astronaute' $PSEUDO ($PLAYER)" + echo "Retenez votre PASS : $PASS" + + + ################################################################################################### + + + + else + + + ################################################################################################### + # EXTRACTION MOA + rm -f ~/.zen/tmp/tiddlers.json + tiddlywiki --load ~/.zen/tmp/TW/index.html --output ~/.zen/tmp --render '.' 'tiddlers.json' 'text/plain' '$:/core/templates/exporters/JsonFile' 'exportFilter' '[tag[moa]]' + TITLE=$(cat ~/.zen/tmp/tiddlers.json | jq -r '.[].title') # Dessin de PLAYER + PLAYER=$(echo $TITLE | rev | cut -f 1 -d ' ' | rev) + [[ $(ls ~/.zen/game/players/$PLAYER 2>/dev/null) ]] && echo "PLAYER déjà présent sur cet Astroport" && exit 0 + echo "Bienvenue Astronaute $PLAYER. Nous avons capté votre TW" + echo "Redirection" + [[ $YOU ]] && TWLINK="http://127.0.0.1:8080/ipns/$GNS" \ + || TWLINK="$LIBRA/ipns/$GNS" + echo "$TWLINK" + + # Injection TWLINK dans template de redirection. + sed "s~_TWLINK_~$TWLINK~g" ~/.zen/Astroport.ONE/templates/index.redirect > ~/.zen/tmp/index.redirect + ## Lancement one shot http server + cat ~/.zen/tmp/index.redirect | nc -l -p 12345 -q 1 & + + ################################################################################################### + + fi + + fi + + + if [[ ${arr[0]} == "qrcode" ]]; then + ## Astroport.ONE local use QRCODE Contains PLAYER G1PUB + QRCODE=$(echo $URL | cut -d ' ' -f2 | cut -d '=' -f 2 | cut -d '&' -f 1) && echo "Instascan.html QR : $QRCODE" + g1pubpath=$(grep $QRCODE ~/.zen/game/players/*/.g1pub | cut -d ':' -f 1 2>/dev/null) + PLAYER=$(echo "$g1pubpath" | rev | cut -d '/' -f 2 | rev 2>/dev/null) + + ## FORCE LOCAL USE ONLY. Remove to open 1234 API + [[ ! -d ~/.zen/game/players/$PLAYER || $PLAYER == "" ]] && echo "AUCUN PLAYER !!" && exit 1 + + ## LOGIN + rm -f ~/.zen/game/players/.current + ln -s ~/.zen/game/players/$PLAYER ~/.zen/game/players/.current + + [[ ${arr[2]} == "" ]] && continue + + fi + + ## Demande de copie d'une URL reçue. + if [[ ${arr[0]} == "qrcode" && ${arr[2]} == "url" ]]; then + wsource="${arr[3]}" + [[ ${arr[4]} == "type" ]] && wtype="${arr[5]}" || wtype="Youtube" + + ## LANCEMENT COPIE + ~/.zen/Astropor.ONE/ajouter_video.sh "$(urldecode $wsource)" "$wtype" "$QRCODE" & + + echo "$QRCODE $wsource" + + fi + + ## ENVOYER MESSAGE GCHANGE POUR QRCODE + + ## Une seule boucle !!! + [[ "$1" == "ONE" ]] && exit 0 + +done +exit 0 diff --git a/templates/data/$ _TiddlyTweaks_ReadOnly.json b/templates/data/$ _TiddlyTweaks_ReadOnly.json new file mode 100644 index 00000000..940a51c2 --- /dev/null +++ b/templates/data/$ _TiddlyTweaks_ReadOnly.json @@ -0,0 +1 @@ +[{"created":"20220505193946834","title":"$:/TiddlyTweaks/ReadOnly","creator":"Telumire","text":"\\define enable-autosave()\n<$action-setfield $tiddler=\"$:/config/AutoSave\" text=\"yes\"/>\n\\end\n\\define disable-autosave()\n<$action-setfield $tiddler=\"$:/config/AutoSave\" text=\"\"/>\n\\end\n\\define set-current-sidebar-tab()\n<$action-listops $tiddler=\"$:/state/tab/sidebar--595412856\" $field=\"text\" $filter=\"[[$:/tags/SideBar]tagging[]nth[1]]\"/>\n\\end\n\\define StartupAction()\n <$let read-only={{{ [subfilter{!!ReadOnlyFilter}] }}}>\n \n <$list filter=\"[match[true]]\" variable=_>\n \n \n \n \n <$list filter=\"[match[true]]\" variable=\"_\" emptyMessage=<> ><>\n\n <$list filter=\"[list[!!config-visibility]]\" variable=\"UI-elements\">\n <$list filter=\"[getenlist-input[]has[text]]\" variable=\"UI-element\">\n \n <$list filter=\"[search:title[Buttons]]\" variable=_>\n <$tiddler tiddler={{{ $:/config/[]/Visibility/[]+[join[]] }}}>\n <$list filter=\"[match[true]]\" variable=_>\n \n <$action-setfield initial={{!!text}}/>\n \n <$action-setfield text=\"hide\"/>\n \n <$list filter=\"[is[current]has[initial]]:filter[match[false]]\" variable=_>\n \n <$action-setfield text={{!!initial}} />\n \n \n \n \n <$list filter=\"[search:title[tabs]]:filter[match[true]]\" variable=\"_\" >\n <$action-listops $tiddler=<> $tags=\"-[[$:/tags/SideBar]] +[[$:/tags/SideBar/disabled]]\" />\n \n <$list filter=\"[search:title[tabs]]:filter[match[false]]\" variable=\"_\" >\n <$action-listops $tiddler=<> $tags=\"+[[$:/tags/SideBar]] -[[$:/tags/SideBar/disabled]]\" />\n \n \n \n \n <>\n \n\\end\n\\define checkbox(state,field)\n <$button class=\"tc-btn-invisible\" actions=\"\"\"\n <$action-listops $field=\"$field$\" $subfilter=\"+[toggle]\" />\n <$list filter=\"[[$state$]!match[checked]]\" variable=\"_\">\n <$action-deletetiddler $filter=\"[][search:title[$:/config/]search:title]\"/>\n \n <>\n \"\"\">\n \n \n\\end\n\\define toggle-visibility(filter,field)\n<$list filter=\"$filter$\" variable=\"toggle\">\n
\n \n
\n\n\\end\n\\define check-all()\n <>\n <$action-setmultiplefields $fields=\"[list[!!config-visibility]]\" $values=\" \"/>\n <$action-deletetiddler $filter=\"\"\"\n $:/tags/ViewToolbar $:/tags/PageControls $:/tags/SideBar $:/tags/SideBar/disabled +[tagging[]]\n [search:title[$:/config/ViewToolbarButtons]]\n [search:title[$:/config/PageControlButtons]]\n \"\"\"/>\n\\end\n\\define uncheck-all()\n <>\n <$action-setmultiplefields $fields=\"[list[!!config-visibility]]\" $values=\"\"\"\n [[$:/tags/PageControls]tagging[]format:titlelist[]join[ ]]\n [[$:/tags/ViewToolbar]tagging[]format:titlelist[]join[ ]]\n [subfilter[$:/tags/SideBar $:/tags/SideBar/disabled]tagging[]format:titlelist[]join[ ]]\n \"\"\"/>\n\\end\n\\define save-changes()\n <>\n <$wikify name=\"site-title\" text={{$:/config/SaveWikiButton/Filename}}>\n <$action-sendmessage $message=\"tm-save-wiki\" $param={{$:/config/SaveWikiButton/Template}} filename=<>/>\n \n\\end\n\\define tabList() [[View toolbar]] [[Page controls]] [[Sidebar tabs]] [[Custom CSS]] [[Settings]]\n\\define tabViewToolbar()\n

\n Select which buttons can be displayed in read only mode.\n

\n <$macrocall $name=\"toggle-visibility\" filter=\"[[$:/tags/ViewToolbar]tagging[]]\" field=\"ViewToolbarButtons\"/>\n\\end\n\\define tabPageControls()\n

\n Select which buttons can be displayed in read only mode.\n

\n <$macrocall $name=\"toggle-visibility\" filter=\"[[$:/tags/PageControls]tagging[]]\" field=\"PageControlButtons\"/>\n\\end\n\\define tabSidebarTabs()\n

\n Select which tabs can be displayed in read only mode.\n

\n <$macrocall $name=\"toggle-visibility\" filter=\"$:/tags/SideBar $:/tags/SideBar/disabled +[tagging[]sort[]]\" field=\"SideBarSegments/tabs\"/>\n\\end\n\\define tabCustomCSS()\n

\n Write custom CSS rules to enable in read only mode.\n

\n <$edit-text field=\"ReadOnlyCSS\" tag=\"textarea\" class=\"tc-edit-texteditor full-width\"/>\n\\end\n\\define tabSettings()\n

\n <$button actions=<> >Hide all\n <$button actions=<> >Reset\n <$button\n actions=<>\n tooltip={{$:/language/Buttons/SaveWiki/Hint}}\n aria-label={{$:/language/Buttons/SaveWiki/Caption}}\n class=\"tc-btn-invisible\">\n \n {{$:/core/images/save-button}} <$text text={{$:/language/Buttons/SaveWiki/Caption}}/>\n \n \n

\n

Below is the filter used to trigger the read only.

\n <$edit-text field=\"ReadOnlyFilter\" tag=\"textarea\" class=\"tc-edit-texteditor full-width\"/>\n

\n <$radio field=\"override\" value=\"true\"> on\n <$radio field=\"override\" value=\"false\"> off\n <$radio field=\"override\" value=\"\"> auto\n

\n

Read only is <$text text={{{ [subfilter{!!ReadOnlyFilter}match[true]then[on]else[off]] }}}/>.

\n\\end\n<$tiddler tiddler=\"$:/TiddlyTweaks/ReadOnly\">\n\n <>\n\n\n<$let stateTab=<> >\n
\n
\n <$list filter=<> variable=\"currentTab\">\n <$button set=<> setTo=<> selectedClass=\"tc-tab-selected\"><>\n \n
\n
\n <$let defaultTab={{{ [enlistfirst[]] }}} >\n <$macrocall $name={{{ tab[get[text]elsetitlecase[]]+[split[ ]join[]] }}}/>\n \n
\n
\n\n\n \n\n
\nWARNING: The buttons are not properly turned on when turning off read only. For now, use the <$button actions=<>>Reset button.\n
\n","modified":"20221002161339157","modifier":"Telumire","tags":"$:/tags/StartupAction $:/tags/Stylesheet $:/tags/ControlPanel/Appearance","type":"text/vnd.tiddlywiki","PageControlButtons":"$:/core/ui/Buttons/save-wiki $:/core/ui/Buttons/advanced-search $:/core/ui/Buttons/close-all $:/core/ui/Buttons/control-panel $:/core/ui/Buttons/encryption $:/core/ui/Buttons/export-page $:/core/ui/Buttons/fold-all $:/core/ui/Buttons/import $:/core/ui/Buttons/language $:/core/ui/Buttons/manager $:/core/ui/Buttons/more-page-actions $:/core/ui/Buttons/new-image $:/core/ui/Buttons/new-journal $:/core/ui/Buttons/new-tiddler $:/core/ui/Buttons/palette $:/core/ui/Buttons/print $:/core/ui/Buttons/refresh $:/core/ui/Buttons/storyview $:/core/ui/Buttons/tag-manager $:/core/ui/Buttons/theme $:/core/ui/Buttons/timestamp $:/core/ui/Buttons/unfold-all $:/core/ui/Buttons/permaview $:/core/ui/Buttons/full-screen","SideBarSegments/tabs":"$:/core/ui/SideBar/Open $:/core/ui/SideBar/Recent $:/core/ui/SideBar/Tools $:/core/ui/SideBar/More","ViewToolbarButtons":"$:/core/ui/Buttons/more-tiddler-actions $:/core/ui/Buttons/info $:/core/ui/Buttons/new-here $:/core/ui/Buttons/new-journal-here $:/core/ui/Buttons/clone $:/core/ui/Buttons/export-tiddler $:/core/ui/Buttons/edit $:/core/ui/Buttons/delete $:/core/ui/Buttons/permalink $:/core/ui/Buttons/permaview $:/core/ui/Buttons/open-window $:/core/ui/Buttons/close-others $:/core/ui/Buttons/fold-others $:/core/ui/Buttons/fold $:/core/ui/Buttons/fold-bar","config-visibility":"PageControlButtons ViewToolbarButtons SideBarSegments/tabs","ReadOnlyCSS":".tc-sidebar-search [aria-label=\"{{$:/language/Buttons/AdvancedSearch/Caption}}\"]{ \ndisplay:none;\n}","caption":"Read Only","revision":"0","bag":"default","list-after":"","ReadOnlyFilter":"[[TiddlyWiki Safe Mode]is[tiddler]]\n[{$:/status/IsLoggedIn}match[yes]]\n[{$:/info/url/protocol}match[file:]]\n[{$:/info/url/hostname}match[localhost]]\n+[!is[blank]limit[1]then[false]else[true]]\n:map[<..currentTiddler>get[override]!is[blank]else]","override":"false"}] \ No newline at end of file diff --git a/templates/index.http b/templates/index.http new file mode 100644 index 00000000..10264e2f --- /dev/null +++ b/templates/index.http @@ -0,0 +1,10 @@ +HTTP/1.1 200 Everything Is Just Fine +Server: Astroport +Content-Type: text/html; charset=UTF-8 + + + + +

CANAL TW ASTROPORT

+ + diff --git a/templates/index.redirect b/templates/index.redirect new file mode 100644 index 00000000..58ef4a7f --- /dev/null +++ b/templates/index.redirect @@ -0,0 +1,13 @@ +HTTP/1.1 200 Everything Is Just Fine +Server: Astroport +Content-Type: text/html; charset=UTF-8 + + + + + + + +

Please follow this link.

+ +