/ rgproxy.mu
rgproxy.mu
1 #!/usr/bin/env python3 2 #^^^^ <--> Nomadnet specific to prevent page caching, may change if you like. 3 4 import urllib.parse 5 import ignition 6 import textwrap 7 import time 8 import yaml 9 from os import environ 10 import os 11 page = [] 12 redirect = "" 13 backlink = "" 14 backurl = "" 15 #with open("settings.yaml", "r") as file: 16 # settings = yaml.safe_load(file) 17 #MYNODE = settings.get("MYNODE") #config who's to listen 18 #USERS = settings.get("USERS") # List of users 19 20 def onReceive(message): 21 22 global redirect 23 emptyline = "" 24 iline = "" 25 redirect = "" 26 try: 27 #message_parts = message.split(" ") 28 reloadline = "" 29 if message[:9] == "gemini://" : 30 url = message[9:] 31 elif message[:9] == "gopher://" : 32 url = message[9:] 33 line = "`F091`[Click here to go back to gopher`:/page/gopher.mu`resultat="+url+"]`f``" 34 print (line) 35 url ="" 36 else : 37 url = message 38 url = url.replace("@@","=") 39 url = url.replace("##","?") 40 url = url.replace("%%","&") 41 42 master_path = "" 43 master_spath = "" 44 response = ignition.request("gemini://"+url) 45 parsed = urllib.parse.urlparse("gemini://"+url) 46 47 master_scheme = parsed.scheme 48 master_netloc = parsed.netloc 49 master_spath1 = parsed.path 50 master_spath = master_spath1.split("/" or "\n") 51 52 for spath in master_spath : 53 if ".gmi" not in spath and spath != "" and ".gemini" not in spath and "index" not in spath: 54 master_path = master_path +"/" + spath 55 56 master_query = parsed.query 57 home = master_netloc 58 59 if response.is_a(ignition.SuccessResponse) and not ".txt" in url and not ".png" in url: 60 print( "`B595 `!`["+master_netloc+"`:/page/rgproxy.mu`resultat="+master_netloc+"]`b`` "+url[:100]) 61 62 63 text = (response.data()) 64 text = text.replace("\t"," ") 65 text = text.replace("\r","") 66 tosend = text.split("\n") 67 print ("---") 68 for index, line in enumerate(tosend): 69 70 #line = line.replace("`","'") 71 if line[:3] == "```" : 72 line = "`=" 73 74 elif line[:3] == "###" : 75 line = ">>>"+line[3:] 76 elif line[:2] == "##" : 77 line = ">>"+line[2:] 78 elif line[:1] == "#" : 79 line = ">"+line[1:] 80 elif line[:2] == "=>": 81 line = line.replace("`","'") 82 83 line = line[2:].lstrip(" ") 84 85 line_part = line.split(" ",maxsplit=1) 86 requested_url = line_part[0] 87 88 #print (requested_url) 89 90 parsed = urllib.parse.urlparse(requested_url) 91 #print ("==="+showlink) 92 request_scheme = parsed.scheme 93 request_netloc = parsed.netloc 94 request_path = parsed.path 95 request_query = parsed.query 96 97 if request_scheme =="gemini" or request_scheme =="gopher" or request_scheme =="" : 98 #print (parsed) 99 if len(line_part) ==1 : 100 showlink = line_part[0] 101 else : 102 showlink = line_part[1] 103 showlink = showlink.replace("[","{") 104 showlink = showlink.replace("]","}") 105 #print (showlink) 106 107 if request_path[:2] == "//" : 108 request_netloc = request_path[1:] 109 request_path = "" 110 if ".gmi" in request_netloc or ".py" in request_netloc or ".txt" in request_netloc or ".md" in request_netloc: 111 if ".gmi" in request_path : 112 request_netloc = master_netloc 113 else : 114 request_path = "/"+request_netloc.lstrip("/") 115 request_netloc = "" 116 elif ".gmi" in request_path : 117 findit = request_path.find(".gmi")+4 118 if findit < len(request_path) : 119 #print (len(request_path)-findit) 120 request_path = request_path[:-(len(request_path)-findit)] 121 if request_path[:2] ==".." : 122 request_path = request_path[2:] 123 request_netloc = ".." 124 if request_path[:1] =="." : 125 request_path = request_path[1:] 126 request_netloc = "." 127 if request_path[:1] !="/" : 128 symbol ="/" 129 else : 130 symbol = "" 131 if request_netloc =="": 132 request_netloc=".." 133 if request_query !="" : 134 symbol2 ="?" 135 else : 136 symbol2 = "" 137 request_query = request_query.replace("=","@@") 138 request_query = request_query.replace("?","##") 139 request_query = request_query.replace("&","%%") 140 if request_netloc =="..": 141 line = "`F089`["+showlink+"`:/page/rgproxy.mu`resultat="+home.rstrip("/")+symbol+request_path+symbol2+request_query+"|backurl="+url+"]`f``" 142 #print(home.rstrip("/")+symbol+request_path+symbol2+request_query) 143 elif request_netloc =="." or (symbol =="/" and request_netloc==""): 144 line = "`F031`["+showlink+"`:/page/rgproxy.mu`resultat="+home.rstrip("/")+master_path+symbol+request_path+symbol2+request_query+"|backurl="+url+"]`f``" 145 elif request_netloc =="" : 146 line = "`F039`[`"+showlink+"`:/page/rgproxy.mu`resultat="+home.rstrip("/")+master_path+symbol+request_path+symbol2+request_query+"|backurl="+url+"]`f``" 147 elif request_scheme =="gopher" : 148 line = "`F091`["+request_scheme+"://"+request_netloc+symbol+request_path+symbol2+request_query+"`:/page/gopher.mu`resultat="+request_netloc+symbol+request_path+symbol2+request_query+"|backurl=gemini://"+url+"]`f``" 149 else : 150 line = "`F099`["+showlink+"`:/page/rgproxy.mu`resultat="+request_netloc+symbol+request_path+symbol2+request_query+"|backurl="+url+"]`f``" 151 elif request_scheme =="http" or request_scheme =="https" or request_scheme =="spartan": 152 line = "`F669"+request_scheme+"://"+request_netloc+request_path+"`f" 153 else : 154 line = "`F669 Unusable link `f " 155 156 else : 157 line = line.replace("`","'") 158 print (line) 159 160 elif response.is_a(ignition.SuccessResponse) and ".txt" in url: 161 print ("`B195 Text `!`["+master_netloc+"`:/page/rgproxy.mu`resultat="+master_netloc+"]`b`` "+url) 162 print ("---") 163 text = (response.data()) 164 text = text.replace("\t"," ") 165 text = text.replace("\r","") 166 print (text) 167 168 169 elif response.is_a(ignition.InputResponse): 170 print ("Needs additional input: ") 171 print () 172 print (f'{response.data()} ') 173 print('`B444`<30|user_input`>`b `!`B605`[Submit`:/page/rgproxy.mu`resultat='+url+'|user_input]`b') 174 175 elif response.is_a(ignition.RedirectResponse): 176 print(f"Received response, redirect to: {response.data()}") 177 if response.data()[:9] == "gemini://": 178 redirect = response.data() 179 180 else : 181 hurl = url.split("/") 182 home = hurl[0] 183 redirect = home+response.data() 184 185 elif response.is_a(ignition.TempFailureResponse): 186 print(f"Error from server: {response.data()}") 187 188 elif response.is_a(ignition.PermFailureResponse): 189 print(f"Error from server: {response.data()}") 190 191 elif response.is_a(ignition.ClientCertRequiredResponse): 192 print(f"Client certificate required. {response.data()}") 193 194 elif response.is_a(ignition.ErrorResponse): 195 print(f"There was an error on the request: {response.data()}") 196 else : 197 print (" not a compatible content on "+url) 198 except KeyError as e: 199 print(f"Error processing packet: {e}") 200 201 if environ.get("var_backurl") != None : 202 backurl = str(environ.get("var_backurl")) 203 204 print ("> Gemini Proxy `F919 Beta Version, under construction no certificate and somes bugs`f") 205 print ("") 206 print ('Input gemini link or search term `B500gemini://`B444`<30|user_input`>`b `!`B500`[Go to link`:/page/rgproxy.mu`user_input]`b or `!`B505`[Search`:/page/rgproxy.mu`resultat=kennedy.gemi.dev/search|user_input]`b') 207 print ("") 208 print ("`B559`!`[Main menu`:/page/index.mu]`b `B329`!`[Proxy Menu`:/page/rgproxy.mu`resultat=]`b `B128`!`[Search Engine`:/page/rgproxy.mu`resultat=kennedy.gemi.dev]`b `B659`!`[Back`:/page/rgproxy.mu`resultat="+backurl+"]`b") 209 print ("") 210 211 if environ.get("field_user_input") != None and environ.get("var_resultat") != None: 212 os.environ['var_resultat'] = environ.get("var_resultat")+"?"+environ.get("field_user_input") 213 214 215 if environ.get("field_user_input") != None and environ.get("var_resultat") == None: 216 os.environ['var_resultat'] = environ.get("field_user_input") 217 218 if environ.get("var_resultat") == None or environ.get("var_resultat") == "": 219 220 print ('>> Bookmarks') 221 print ("") 222 print ('`!`[Gemi.dev`:/page/rgproxy.mu`resultat=gemi.dev]') 223 print ("") 224 print ('`!`[Techrights`:/page/rgproxy.mu`resultat=gemini.techrights.org]') 225 print ("") 226 print ('`!`[GeminiSpace`:/page/rgproxy.mu`resultat=bbs.geminispace.org]') 227 print ("") 228 print ('`!`[Noulin Bookmarks`:/page/rgproxy.mu`resultat=gmi.noulin.net]') 229 print ("") 230 print ('`!`[Auragem`:/page/rgproxy.mu`resultat=auragem.letz.dev]') 231 print ("") 232 print ('`!`[Yesterweb`:/page/rgproxy.mu`resultat=cities.yesterweb.org]') 233 print ("") 234 print ('`!`[Hyperreal`:/page/rgproxy.mu`resultat=hyperreal.coffee]') 235 print ("") 236 print ('`!`[That it be`:/page/rgproxy.mu`resultat=thatit.be]') 237 print ("") 238 print ('`!`[Kelbots Gem-port`:/page/rgproxy.mu`resultat=gemini.cyberbot.space]') 239 print ("") 240 print ('`!`[test gopher link`:/page/rgproxy.mu`resultat=gopher.zcrayfish.soy]') 241 print ("") 242 print (">> Games") 243 print ("") 244 print ('`!`[Flower Flood`:/page/rgproxy.mu`resultat=gem.bahai.fyi/flower/]') 245 print ("") 246 print ('`!`[Underground Kingdom`:/page/rgproxy.mu`resultat=typed-hole.org/cyoa/underground]') 247 print ("") 248 print ('`!`[Secret of Pyramids`:/page/rgproxy.mu`resultat=typed-hole.org/cyoa2/pyramid.gemini]') 249 print ("") 250 print ('`!`[Twisty Puzzles (5 interactive puzzles)`:/page/rgproxy.mu`resultat=jsreed5.org/twisty/index.gmi]') 251 print ("") 252 253 254 else : 255 #print (environ.get("var_resultat")) 256 onReceive(environ.get("var_resultat")) 257 #print (redirect) 258 if redirect !="" : 259 onReceive(redirect) 260 print ("redirect to "+redirect) 261 262 print ("you're on "+environ.get("var_resultat"))