From 175174757bf484ce432a26c70f139389cdba3526 Mon Sep 17 00:00:00 2001
From: Romain J <romain@gnous.eu>
Date: Tue, 18 Aug 2020 21:50:23 +0200
Subject: [PATCH 1/2] improve getheaders

---
 cogs/utility.py | 95 ++++++++++++++++++-------------------------------
 1 file changed, 35 insertions(+), 60 deletions(-)

diff --git a/cogs/utility.py b/cogs/utility.py
index f66d5ee..5e47130 100755
--- a/cogs/utility.py
+++ b/cogs/utility.py
@@ -3,6 +3,7 @@ import json
 import pytz
 import random
 import urllib
+import aiohttp
 import ipinfo as ipinfoio
 
 from ipwhois.net import Net
@@ -246,10 +247,12 @@ class Utility(commands.Cog):
         # IPINFO api
         api_result = True
         try:
-            access_token = open('ipinfoio.key').read()
+            with open('ipinfoio.key') as k:
+                access_token = k.read().replace("\n", "")
             handler = ipinfoio.getHandler(access_token)
             details = handler.getDetails(ipaddress)
-        except:
+        except Exception as e:
+            await ctx.send(e)
             api_result = False
 
         try:
@@ -280,64 +283,36 @@ class Utility(commands.Cog):
         await iploading.delete()
 
     """---------------------------------------------------------------------"""
-    @commands.command(name='getheaders', pass_context=True)
-    async def _getheaders(self, ctx, *, adresse):
-        """Recuperer les HEADERS :d"""
-        if adresse.startswith("http://") != True and adresse.startswith("https://") != True:
-             adresse = "http://" + adresse
-        if len(adresse) > 200:
-            await ctx.send("{0} Essaye d'entrer une adresse de moins de 200 caractères plutôt.".format(ctx.author.mention))
-        
-        elif adresse.startswith("http://") or adresse.startswith("https://") or adresse.startswith("ftp://"):
-            try:
-                get = urllib.request.urlopen(adresse, timeout = 1)
-                embed = discord.Embed(title="Entêtes de {0}".format(adresse), color=0xd75858)
-                embed.add_field(name="Code Réponse", value=get.getcode(), inline = True)
-                embed.set_thumbnail(url="https://http.cat/{}".format(str(get.getcode())))
-                if get.getheader('location'):
-                    embed.add_field(name="Redirection vers", value=get.getheader('location'), inline=True)
-                if get.getheader('server'):
-                    embed.add_field(name="Serveur", value=get.getheader('server'), inline=True)
-                if get.getheader('content-type'):
-                    embed.add_field(name="Type de contenu", value = get.getheader('content-type'), inline = True)
-                if get.getheader('x-content-type-options'):
-                    embed.add_field(name="x-content-type", value= get.getheader('x-content-type-options'), inline=True)
-                if get.getheader('x-frame-options'):
-                    embed.add_field(name="x-frame-options", value= get.getheader('x-frame-options'), inline=True)
-                if get.getheader('cache-control'):
-                    embed.add_field(name="Controle du cache", value = get.getheader('cache-control'), inline = True)
-                await ctx.send(embed=embed)
-            except urllib.error.HTTPError as e:
-                embed = discord.Embed(title="Entêtes de {0}".format(adresse), color=0xd75858)
-                embed.add_field(name="Code Réponse", value=e.getcode(), inline = True)
-                embed.set_thumbnail(url="https://http.cat/{}".format(str(e.getcode())))
-                await ctx.send(embed=embed)
-                print('''An error occurred: {} The response code was {}'''.format(e, e.getcode()))
-            except urllib.error.URLError as e:
-                if "No address associated" in str(e):
-                    await ctx.send("Erreur, aucune adresse n'est associé à ce nom d'hôte.")
-                    return
-                if "timed out" in str(e):
-                    await ctx.send("Erreur, l'adresse en question dépasse le délais d'attente :(")
-                    return
-                if "SSL" in str(e):
-                    await ctx.send("Erreur avec le certificat SSL, essayez sans ``https://`` !")
-                    return
-                    return
-                if "no host":
-                    await ctx.send("Erreur, aucun nom d'hôte n'a été donné.")
-                    return
-                if "not known":
-                    await ctx.send("Erreur, nom de l'hôte inconnu.")
-                    return
-                print("ERROR @ getheaders @ urlerror : {} - adress {}".format(e, adresse))
-                await ctx.send('[CONTACTER ADMIN] URLError: {}'.format(e.reason))
-            except Exception as e:
-                print("ERROR @ getheaders @ Exception : {} - adress {}".format(e, adresse))
-                await ctx.send("{0} Impossible d'accèder à {1}, es-tu sur que l'adresse {1} est correcte et que le serveur est allumé ?".format(ctx.author.mention, adresse))
-        else:
-            await ctx.send("{0} Merci de faire commencer {1} par ``https://``, ``http://`` ou ``ftp://``.".format(ctx.author.mention, adresse))
-    
+
+    @commands.command(name='getheaders')
+    async def _getheaders(self, ctx: commands.Context, addr: str):
+        if (addr.startswith('http') or addr.startswith('ftp')) is not True:
+           addr = f"http://{addr}"
+
+        await ctx.trigger_typing()
+
+        try:
+            async with self.bot.session.get(addr) as s:
+                e = discord.Embed(
+                    title=f"Headers : {addr}",
+                    color=0xd75858
+                )
+                e.add_field(name="Status", value=s.status, inline=True)
+                e.set_thumbnail(url=f"https://http.cat/{s.status}")
+
+                headers = dict(s.headers.items())
+                headers.pop('Set-Cookie', headers)
+
+                for key, value in headers.items():
+                    e.add_field(name=key, value=value, inline=True)
+                await ctx.send(embed=e)
+
+        except aiohttp.ClientError:
+            await ctx.send(
+                f"Cannot connect to host {addr}"
+            )
+
+
     """---------------------------------------------------------------------"""
     @commands.command(name='peeringdb', pass_context=True)
     async def _peeringdb(self, ctx, *, asn):

From 17b3e658fc1d4bfdc8a60bde09d876d72954f060 Mon Sep 17 00:00:00 2001
From: Romain J <romain@gnous.eu>
Date: Tue, 18 Aug 2020 21:51:51 +0200
Subject: [PATCH 2/2] remove debug things

---
 cogs/utility.py | 1 -
 1 file changed, 1 deletion(-)

diff --git a/cogs/utility.py b/cogs/utility.py
index 5e47130..dae3f5b 100755
--- a/cogs/utility.py
+++ b/cogs/utility.py
@@ -252,7 +252,6 @@ class Utility(commands.Cog):
             handler = ipinfoio.getHandler(access_token)
             details = handler.getDetails(ipaddress)
         except Exception as e:
-            await ctx.send(e)
             api_result = False
 
         try: