add password to email

This commit is contained in:
2024-04-16 18:27:34 +02:00
parent 653c5a7078
commit 2a08f8136f
7 changed files with 9 additions and 260 deletions
-1
View File
@@ -8,7 +8,6 @@ SpeechRecognition==3.8.1
pymongo==4.1.1
wget==3.2.0
pocketsphinx==0.1.15
oci~=2.54.1
XlsxWriter~=3.0.3
boto3~=1.21.13
openpyxl==3.0.9
-105
View File
@@ -1,105 +0,0 @@
import datetime
from typing import Union
import firebase_admin
from firebase_admin import credentials, firestore
from src import params, config
from src.pojo.ReserveResultPojo import ReserveResultPojo
from src.pojo.ResultEnum import ResultEnum
from src.pojo.SimInfoPojo import SimInfoPojo
from src.pojo.contact_pojo import ContactPojo
ERROR_COLLECTION_NAME = "error_items"
CONTACT_COLLECTION_NAME = "contact_list"
MAIL_COLLECTION_NAME = "mail_list"
SIM_INFOS = "sim_infos"
TIMEOUT = "timeout_items"
class DataManager:
batch_size = 20
def __init__(self):
cred = credentials.Certificate(config.FIREBASE_CONFIG_FILE)
self._app = firebase_admin.initialize_app(cred)
self._db = firestore.client()
def get_all_sim_infos(self):
params.oracle_log_sender.send_read_db_event("get_all_sim_infos")
sim_info_collection = self._db.collection(SIM_INFOS)
return sim_info_collection
def get_all_successful_items(self):
params.oracle_log_sender.send_read_db_event("get_all_successful_items")
return self.get_all_successful_items_for_day(str(datetime.date.today()), None)
def get_all_successful_items_for_day(self, day, source_from: Union[str, None]):
params.oracle_log_sender.send_read_db_event("get_all_successful_items_for_day for {}".format(day))
doc_ref = self._db.collection(day)
if source_from is not None:
doc_ref.where(u'source_from', u'==', source_from)
return doc_ref
def get_all_accepted_items_for_day(self, day):
params.oracle_log_sender.send_read_db_event("get_all_successful_items_for_day for {}".format(day))
doc_ref = self._db.collection(day)
accepted_ref = doc_ref.where(u'accepted', u'==', "ACCEPTED")
return accepted_ref
def get_successful_item_for_day_by_status(self, day, status: ResultEnum):
params.oracle_log_sender.send_read_db_event("get_successful_item_for_day_by_status for {}".format(day))
doc_ref = self._db.collection(day)
if status is not None:
doc_ref.where(u'accepted', u'==', status.value)
return doc_ref
def save_sim_info(self, sim_info: SimInfoPojo):
params.oracle_log_sender.send_read_db_event("save_sim_info")
doc_ref = self._db.collection(SIM_INFOS).document(sim_info.phone)
doc_ref.set(sim_info.to_firestore_dict())
def save(self, result: ReserveResultPojo):
id = result.url.split("/")[-1]
result.id = id
collection_name = str(datetime.date.today())
doc_ref = self._db.collection(collection_name).document(result.id)
doc_ref.set(result.to_firestore_dict())
def find_appointment_detail_via_phone(self, day, phone) -> ReserveResultPojo:
params.oracle_log_sender.send_read_db_event("find_appointment_detail_via_phone")
doc_ref = self._db.collection(day)
results = doc_ref.where(u'phone', u'==', phone).stream()
result_list = []
for result in results:
result_list.append(ReserveResultPojo.from_firestore_dict(result.to_dict()))
if len(result_list) > 0:
return result_list[0]
def save_timeout_contact(self, contact: ContactPojo):
doc_ref = self._db.collection(TIMEOUT).document(str(contact.phone))
doc_ref.set(contact.to_firestore_dict())
def _delete_collection(self, coll_ref, batch_size):
params.oracle_log_sender.send_read_db_event("_delete_collection")
docs = coll_ref.limit(batch_size).stream()
deleted = 0
for doc in docs:
print(f'Deleting doc {doc.id} => {doc.to_dict()}')
doc.reference.delete()
deleted = deleted + 1
if deleted >= batch_size:
return self._delete_collection(coll_ref, batch_size)
# 删除数据库中所有的sim卡信息
def clear_all_sim_info(self):
params.oracle_log_sender.send_read_db_event("clear_all_sim_info")
coll_ref = self._db.collection(SIM_INFOS)
self._delete_collection(coll_ref, self.batch_size)
def read_contacts_from_db(self) -> list:
params.oracle_log_sender.send_read_db_event("read_contacts_from_db")
contact_collection = self._db.collection(CONTACT_COLLECTION_NAME)
return contact_collection
+1 -5
View File
@@ -1,7 +1,3 @@
LOG_SUBJECT_EVENT = "EVENT"
TYPE_EVENT_CHECK_RESULTS = "EVENT_CHECK_RESULTS"
from src.db.DbManager import DataManager
firebase_store_manager = DataManager()
TYPE_EVENT_CHECK_RESULTS = "EVENT_CHECK_RESULTS"
-143
View File
@@ -1,143 +0,0 @@
import datetime
import logging
import sys
import oci
from oci.loggingingestion import LoggingClient
from oci.loggingingestion.models import PutLogsDetails, LogEntryBatch, LogEntry
from src import config
from src.logs.AppLogging import init_logger
from src.pojo.ReserveResultPojo import ReserveResultPojo, PublishType
from src.pojo.contact_pojo import ContactPojo
LOG_SUBJECT_EVENT = "EVENT"
LOG_SUBJECT_SMS = "SMS"
SUBJECT_SIM_INFO = "sim_card"
# Log type
TYPE_EVENT_CHECK_RESULTS = "EVENT_CHECK_RESULTS"
TYPE_EVENT_READ_DB = "EVENT_READ_DB"
TYPE_EVENT_RESET_ALL_SIM_CARDS = "EVENT_RESET_ALL_SIM_CARDS"
TYPE_EVENT_CHANGE_SLOT = "EVENT_CHANGE_SLOT"
TYPE_SMS_RECEIVED = "TYPE_SMS_RECEIVED"
LOG_ERROR = "ERROR"
LOG_TYPE_INFO = "INFO"
LOG_ERROR_TYPE_DOUBLE_DATA = "DOUBLE_REQUEST_FOR_SAME_DATA"
LOG_ERROR_TOO_MANY_REQUEST_TODAY = "TOO_MANY_REQUEST_TODAY"
LOG_ERROR_CAPTCHA_ERROR_MESSAGE = "CAPTCHA_ERROR"
LOG_SUBJECT_ERROR = "ERROR"
LOG_APPOINTMENT_ERROR = "APPOINTMENT_ERROR"
LOG_APPOINTMENT_TIMEOUT = "TIMEOUT"
LOG_APPOINTMENT_CONTACT_NOT_FOUND = "CONTACT_NOT_FOUND"
LOG_APPOINTMENT_SUCCESS = "SUCCESS"
URL_VALIDATION_SUCCESS = "URL_VALIDATION_SUCCESS"
custom_retry_strategy = oci.retry.RetryStrategyBuilder(
# Make up to 10 service calls
max_attempts_check=True,
max_attempts=10,
# Don't exceed a total of 600 seconds for all service calls
total_elapsed_time_check=True,
total_elapsed_time_seconds=600,
# Wait 45 seconds between attempts
retry_max_wait_between_calls_seconds=45,
# Use 2 seconds as the base number for doing sleep time calculations
retry_base_sleep_time_seconds=2,
# Retry on certain service errors:
#
# - 5xx code received for the request
# - Any 429 (this is signified by the empty array in the retry config)
# - 400s where the code is QuotaExceeded or LimitExceeded
service_error_check=True,
service_error_retry_on_any_5xx=True,
service_error_retry_config={
400: ['QuotaExceeded', 'LimitExceeded'],
429: []
},
# Use exponential backoff and retry with full jitter, but on throttles use
# exponential backoff and retry with equal jitter
backoff_type=oci.retry.BACKOFF_FULL_JITTER_EQUAL_ON_THROTTLE_VALUE
).get_retry_strategy()
class LogSender:
def __init__(self):
self._config = oci.config.from_file("~/.oci/logger_config_appointment")
self._identity = oci.identity.IdentityClient(self._config)
self._loggingingestion_client = LoggingClient(self._config, timeout=60.0, retry_strategy=custom_retry_strategy)
def send_double_data_error(self, contact: ContactPojo):
error_msg = contact.mail
self.send_log(msg=error_msg, type=LOG_ERROR_TYPE_DOUBLE_DATA, subject=LOG_SUBJECT_ERROR)
def send_too_many_error(self, contact: ContactPojo):
error_msg = contact.mail
self.send_log(msg=error_msg, type=LOG_ERROR_TOO_MANY_REQUEST_TODAY, subject=LOG_SUBJECT_ERROR)
def send_captcha_error(self, contact: ContactPojo):
error_msg = contact.mail
self.send_log(msg=error_msg, type=LOG_ERROR_CAPTCHA_ERROR_MESSAGE, subject=LOG_SUBJECT_ERROR)
def send_appoint_result(self, result: ReserveResultPojo):
if result.type == PublishType.SUCCESS:
# get id
self.send_log(result.id, type=LOG_APPOINTMENT_SUCCESS)
else:
msg = "{}, email: {}".format(result.message, result.email)
self.send_log(msg, type=LOG_APPOINTMENT_ERROR)
def send_url_validation_result(self):
self.send_log(msg='', type=URL_VALIDATION_SUCCESS)
def send_error(self, msg: str):
self.send_log(msg=msg, type=LOG_ERROR)
def send_read_db_event(self, msg: str):
self.send_log(msg=msg, type=TYPE_EVENT_READ_DB, subject=LOG_SUBJECT_EVENT)
def send_log(self, msg: str, source=config.LOG_SOURCE, subject="appointment", type: str = "INFO"):
log_id = "ocid1.log.oc1.eu-frankfurt-1.amaaaaaas4ft22ya3ub6glkltqqbnmkxo3ui7xwq3dxtjd2scdhme4deyu2q"
response = self._loggingingestion_client.put_logs(
log_id=log_id,
put_logs_details=PutLogsDetails(
specversion="1.0",
log_entry_batches=[
LogEntryBatch(
entries=[LogEntry(
data=msg,
id=log_id,
time=datetime.datetime.utcnow().strftime("%Y-%m-%dT%H:%M:%S.%fZ"))],
source=source,
type=type,
defaultlogentrytime=datetime.datetime.utcnow().strftime("%Y-%m-%dT%H:%M:%S.%fZ"),
subject=subject)])
)
return response
def send_sms_reception_log(self, phone, sms_text, ccid):
msg = "from:{}, sms:{}, ccid:{}".format(phone, sms_text, ccid)
self.send_log(msg=msg, subject=LOG_SUBJECT_SMS, type=TYPE_SMS_RECEIVED)
def send_timeout_log(self, contact: ContactPojo):
msg = "phone:{}, mail:{}".format(contact.phone, contact.mail)
self.send_log(msg, type=LOG_APPOINTMENT_TIMEOUT)
def send_contact_not_found(self, msg: str):
self.send_log(msg, subject=SUBJECT_SIM_INFO, type=LOG_APPOINTMENT_CONTACT_NOT_FOUND)
def send_wait_sms_log(self):
self.send_log("等待短信", subject=LOG_SUBJECT_EVENT, type=TYPE_SMS_RECEIVED)
if __name__ == '__main__':
init_logger()
logger = logging.getLogger()
logger.addHandler(logging.StreamHandler(stream=sys.stdout))
log_sender = LogSender()
response = log_sender.send_log("test")
print(response)
+7 -2
View File
@@ -4,7 +4,6 @@ from builtins import list
from concurrent.futures import ThreadPoolExecutor
from email.header import decode_header
from email.message import Message
from imapclient import IMAPClient
from src.db.mirgration.migration_tools import migre_accepted_appointment
@@ -146,12 +145,16 @@ def clean(text):
def accept_appointment_found(accepted_result_list: list):
_all_contact_list = MONGO_STORE_MANAGER.get_all_contact_to_book_list()
_all_register_account = MONGO_STORE_MANAGER.get_all_registered_users()
mailer = Mailer()
# sginal = SignalSender()
print(accepted_result_list)
for reserve in accepted_result_list:
result = get_accepted_result_from(reserve, MONGO_STORE_MANAGER, _all_contact_list)
mailer.send_email(result, to_all=True)
for user in _all_register_account:
if user.mail == result.email:
result.account_password = user.password
mailer.send_email(result, to_all=False)
MONGO_STORE_MANAGER.update_reserve_result(reserve.id, ResultEnum.ACCEPTED, reserve.message)
# sginal.send_result(result)
@@ -229,3 +232,5 @@ if __name__ == '__main__':
_mail_list_today = find_confirmation_contacts_for_today()
# print("size is {}".format(len(_mail_list_today)))
find_confirmation_contacts_mail_list(_mail_list_today)
# _items = MONGO_STORE_MANAGER.get_all_successful_items_for_day()
# accept_appointment_found([random.choice(_items)])
+1
View File
@@ -24,6 +24,7 @@ class AcceptedResultPojo:
self.created_at = created_at
self.validated_at = validated_at
self.mail_password = ""
self.account_password = ""
def get_accepted_result_from(reserve_pojo: ReserveResultPojo, mongo_db_manager: MongoDbManager,
-4
View File
@@ -1,11 +1,7 @@
import random
import string
from src.logs.LogSender import LogSender
from src.proxy.proxy_type import ProxyType
oracle_log_sender = LogSender()
# proxy
PROXY_SERVER = "http://gw.ntnt.io:5959"
PROXY_PASSWORD = "94sY7zwBG13i"