/ 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"))