Commit 420ef37f by Luciano Barletta

Version 0.6 - SMS added

1 parent 8095ea7e
# Multimensajería
#### version 0.56
#### version 0.6
Este repositorio es un servicio web de Flask en Python3 cuyo propósito es mandar mensajes de todo tipo de formatos a todo tipo de plataformas que tengan una API para ese propósito.
Implementa una base de datos de mensajes a enviar, usa la MAC address del host que pide mandar mensajes para diferenciar las consultas y permitir la posibilidad de que el mensaje venga encriptado.
......@@ -69,6 +69,8 @@ WhatsApp 1 - ['wpp1'](/Wpp1.md)
Mail - ['mail'](/Mail.md)
SMS - ['sms'](/SMS.md)
Los tipos que aceptan y la forma de usarlos se encuentran en los links.
......@@ -147,5 +149,4 @@ Para testear se debe tener una carpeta llamada 'testfolder' donde poder tirar lo
## Mejoras no implementadas
1. Añadir estado "partially delivered" para mensajes enviados a medias.
2. Posibilidad de usar un emisor de mensajes diferente. (hecho parcialmente)
1. Posibilidad de usar un emisor de mensajes diferente. (hecho parcialmente)
# Servicio SMS
## Tipos
- texto: 'text'
## Parámetros
Este servicio no acepta ningún parámetro
## Notas
El número de teléfono para este servicio es regional sin símbolos ni espacios
\ No newline at end of file
......@@ -2,10 +2,10 @@
## Tipos
texto - 'text'
imagenes - 'image'
todo tipo de archivos - 'document'
links - 'link'
- texto: 'text'
- imagenes: 'image'
- todo tipo de archivos: 'document'
- links: 'link'
Los últimos 3 funcionan de la misma manera, link se usa para cualquier link y los otros dos para su tipo respectivo
......@@ -13,4 +13,8 @@ Los últimos 3 funcionan de la misma manera, link se usa para cualquier link y l
- 'origen': especifíca el origen
Este servicio acepta no tomar parámetros
\ No newline at end of file
Este servicio acepta no tomar parámetros
## Notas
El número de este servicio se pone en formato internacional sin símbolos ni espacios
\ No newline at end of file
......@@ -25,6 +25,7 @@ class States:
class Services:
wpp1 = "wpp1"
mail = "mail"
sms = "sms"
@staticmethod
def validate(serv):
......
......@@ -141,9 +141,40 @@ class Mail(ServiceBase):
return False
return True
class SMS(ServiceBase):
Allowed = [Datatypes.text]
URL = "http://192.168.15.120:8080/v1/sms/send/"
def send(self,data):
types = json.loads(data[Table.type])
success = {}
for file in types:
with open(data[Table.path] + file) as m:
text = m.read()
if type(text) == bytes:
text = text.decode("utf-8")
response = requests.get(url = SMS.URL, params = {
"phone" : data[Table.dest],
"message" : text
})
success[file] = True if response.text == "OK" else False
return success
def validatetype(self,type):
return type in SMS.Allowed
def validateinfo(self,info):
if info == None:
return True
return False
def serviceFactory(serv):
if serv == Services.wpp1:
return Wpp1()
if serv == Services.mail:
return Mail()
if serv == Services.sms:
return SMS()
return None
import os, time, requests, json, threading
from database import DBconnection
URL = "http://192.168.15.21:5000/"
URL = "http://192.168.15.119:5000/"
TESTPHONE = "5493415959169"
TESTREGIONPHONE = "3415959169"
TESTMAIL = "sujetodeprueba0110@gmail.com"
FOLDER = "testfolder/"
SENDING_TIME = 60 # aumentar a medida que se vuelva necesario
......@@ -10,10 +11,10 @@ START_TIME = 10 # cambiar dependiendo de la velocidad de la máquina
def wpp1(phone):
id = requests.post(url = URL + "data", files = {
'wpmsg' : open(FOLDER + "wptext","rb"),
'wpimage' : open(FOLDER + "wpimage","rb"),
'wpmedia' : open(FOLDER + "wpmedia","rb"),
'wplink' : open(FOLDER + "wplink","rb")
'wpmsg' : open(FOLDER + "text","rb"),
'wpimage' : open(FOLDER + "image","rb"),
'wpmedia' : open(FOLDER + "image","rb"),
'wplink' : open(FOLDER + "image","rb")
})
assert int(id.text) > 0 , id.text + "no es mayor a 0"
state = requests.post(url = URL + "msg", params = {
......@@ -37,9 +38,9 @@ def wpp1(phone):
def mail(mail):
id = requests.post(url = URL + "data", files = {
'mailmsg' : open(FOLDER + "mailtext","rb"),
'mailimage' : open(FOLDER + "mailimage","rb"),
'maildocument' : open(FOLDER + "maildocument","rb")
'mailmsg' : open(FOLDER + "text","rb"),
'mailimage' : open(FOLDER + "image","rb"),
'maildocument' : open(FOLDER + "document","rb")
})
assert int(id.text) > 0 , id.text + "no es mayor a 0"
state = requests.post(url = URL + "msg", params = {
......@@ -69,13 +70,13 @@ def encryption(phone):
f.write(key.text)
f.close()
os.system("openssl rand -base64 32 > " + FOLDER + "rand.key")
os.system("openssl enc -aes-256-cbc -salt -in " + FOLDER + "plaintext" " -out " + FOLDER + "plaintext.enc -pass file:" + FOLDER + "rand.key")
os.system("openssl enc -aes-256-cbc -salt -in " + FOLDER + "plainimage" " -out " + FOLDER + "plainimage.enc -pass file:" + FOLDER + "rand.key")
os.system("openssl enc -aes-256-cbc -salt -in " + FOLDER + "text" " -out " + FOLDER + "text.enc -pass file:" + FOLDER + "rand.key")
os.system("openssl enc -aes-256-cbc -salt -in " + FOLDER + "image" " -out " + FOLDER + "image.enc -pass file:" + FOLDER + "rand.key")
os.system("openssl rsautl -encrypt -inkey " + FOLDER + "server_rsa_key.pub -pubin -in " + FOLDER + "rand.key -out " + FOLDER + "rand.key.enc")
id = requests.post(url = URL + "data", files = {
'plaintext' : open(FOLDER + "plaintext.enc","rb"),
'plainimage' : open(FOLDER + "plainimage.enc","rb"),
'plaintext' : open(FOLDER + "text.enc","rb"),
'plainimage' : open(FOLDER + "image.enc","rb"),
'key' : open(FOLDER + "rand.key.enc","rb")
})
assert int(id.text) > 0 , id.text + "no es mayor a 0"
......@@ -107,7 +108,7 @@ def errors(phone):
assert error.text == "El id - no existe"
# servicio no valido
id = requests.post(url = URL + "data", files = {
"errortext" : open(FOLDER + "errortext","rb")
"errortext" : open(FOLDER + "text","rb")
})
error = requests.post(url = URL + "msg", params = {
'id' : id.text,
......@@ -152,7 +153,7 @@ def errors(phone):
def noconf(phone):
id = requests.post(url = URL + "data", files = {
'wpmsg' : open(FOLDER + "wptext","rb")
'wpmsg' : open(FOLDER + "text","rb")
})
assert int(id.text) > 0 , id.text + "no es mayor a 0"
state = requests.post(url = URL + "msg", params = {
......@@ -169,7 +170,29 @@ def noconf(phone):
'id' : id.text
})
assert (error.text == "El id " + id.text + " no existe") , "'" + error.text + "' no es igual a 'El id " + id.text + " no existe'"
def sms(phone):
id = requests.post(url = URL + "data", files = {
'smsmsg1' : open(FOLDER + "text","rb"),
'smsmsg2' : open(FOLDER + "text","rb")
})
assert int(id.text) > 0 , id.text + "no es mayor a 0"
state = requests.post(url = URL + "msg", params = {
'id' : id.text,
'serv' : "sms",
'dest' : phone,
'type' : json.dumps({
'smsmsg1' : 'text',
'smsmsg2' : 'text'
}),
'conf' : 'true'
})
time.sleep(SENDING_TIME)
state = requests.post(url = URL + "cons", params = {
'id' : id.text
})
assert (state.text == "delivered") , "'" + state.text + "' no es igual a 'delivered'"
def main():
try:
......@@ -182,6 +205,7 @@ def main():
threads.append(threading.Thread(target = mail, args = (TESTMAIL,)))
threads.append(threading.Thread(target = errors, args = (TESTPHONE,)))
threads.append(threading.Thread(target = noconf, args = (TESTPHONE,)))
threads.append(threading.Thread(target = sms, args = (TESTREGIONPHONE,)))
for thread in threads:
thread.start()
......
Styling with Markdown is supported
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!