123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109 |
- # THIS SOFTWARE IS A PART OF FREE COMPETITOR PROJECT
- # THE FOLLOWING SOURCE CODE I UNDER THE GNU
- # AGPL LICENSE V3 OR ANY LATER VERSION.
- # This project is not for simple users, but for
- # web-masters and a like, so we are counting on
- # your ability to set it up and running.
- # Server side
- from http.server import BaseHTTPRequestHandler, HTTPServer
- from subprocess import *
- import json
- import os
- from modules import search
- from modules import render
- CSS = "https://zortazert.codeberg.page/style/styles.css"
- try:
- with open("port.json","r") as f:
- json_stuff = json.load(f)
- PORT = json_stuff["port"]
- except:
- PORT = input("Port: ")
- try:
- PORT = int(PORT)
- except:
- print("Port should be a number")
- exit()
- # Who fucking made this http.server so I need to use classes?
- # I fucking hate who ever thought that it was a good idea...
- class handler(BaseHTTPRequestHandler):
- def start_page(self):
- self.send_response(200)
- if "/json/" not in self.path:
- self.send_header('Content-type', 'text/html')
- else:
- self.send_header('Content-type', 'application/json')
- self.end_headers()
- def send(self, text):
- text = str(text)
- csstext = '<link media="all" href="'+CSS+'" type="text/css" rel="stylesheet" />'
- text = '<head>'+csstext+'</head><body>'+text+'</body>'
-
-
- self.start_page()
- self.wfile.write(text.encode("utf-8"))
-
- def do_GET(self):
-
- if self.path.startswith("/json/"):
- # API CALL
-
- term = self.path[6:]
- software_data, match = search.search_app(term)
- data = {"found":{"data":software_data,"match":match}}
- data["suggestions"] = search.suggest(software_data)
- text = json.dumps(data, indent = 2)
- self.start_page()
- self.wfile.write(text.encode("utf-8"))
-
-
- elif self.path == "/":
- # If the user is at the front page, let him get only the search bar
- page = "<center><br><br><br><h1>Free Competitors</h1>"
- page = render.search_widget(page)
- page = page + "<p>Please search for any software to which you would like to find a Free Software replacement.</p></center>"
- page = render.source_code_link(page)
- self.send(page)
- elif "/search?item=" in self.path:
- # Clearing the url
- # instead of it being /search?item=softwarename
- # it will be just /softwarename
- item = self.path[self.path.find("item=")+5:].lower()
- self.send('<meta http-equiv="Refresh" content="0; url=\'/'+item+'\'" />')
- else:
- # This is when the fun is
- software = self.path.replace("/", "").replace("+", " ")
- software_data, match = search.search_app(software)
-
- page = render.search_widget("")
- page = page +"Search match: "+ str(int(match*100))+"%"
- # Let's add the found software to the page
- page = render.html(page, software_data)
- page = render.suggestions(page, software_data)
- page = render.source_code_link(page)
-
- self.send(page)
-
- serve = HTTPServer(("", PORT), handler)
- serve.serve_forever()
|