72 lines
2.5 KiB
Python
72 lines
2.5 KiB
Python
#!/usr/bin/python3
|
|
# CoolSMS (https://coolsms.co.kr/)
|
|
|
|
import requests, time, datetime, uuid, hmac, hashlib, os, sys
|
|
|
|
coolsms = **
|
|
|
|
try:
|
|
API_KEY = coolsms[0:2]
|
|
SENDER = coolsms[2]
|
|
except:
|
|
try:
|
|
import secrets
|
|
API_KEY = secrets.coolsms[0:2]
|
|
SENDER = secrets.coolsms[2]
|
|
except (ImportError, AttributeError):
|
|
API_KEY = (os.environ.get('COOLSMS_API_KEY'), os.environ.get('COOLSMS_ACCESS_KEY'))
|
|
SENDER = os.environ.get('COOLSMS_SENDER')
|
|
if (API_KEY == (None, None) or (SENDER == None)):
|
|
print("Error: No API Key provided.\nSet env COOLSMS_API_KEY, COOLSMS_ACCESS_KEY, COOLSMS_SENDER.")
|
|
sys.exit()
|
|
|
|
assert API_KEY
|
|
|
|
def get_signature(key=str(), msg=str()):
|
|
return hmac.new(key.encode(), msg.encode(), hashlib.sha256).hexdigest()
|
|
|
|
def get_headers(api_key='', api_secret_key=''):
|
|
utc_offset_sec = time.altzone if time.localtime().tm_isdst else time.timezone
|
|
utc_offset = datetime.timedelta(seconds=-utc_offset_sec)
|
|
iso_datetime = datetime.datetime.now().replace(tzinfo=datetime.timezone(offset=utc_offset)).isoformat()
|
|
date = iso_datetime
|
|
salt = str(uuid.uuid1().hex)
|
|
data = date + salt
|
|
return {
|
|
'Authorization': 'HMAC-SHA256 ApiKey=' + api_key + ', Date=' + date + ', salt=' + salt + ', signature=' +
|
|
get_signature(api_secret_key, data),
|
|
'Content-Type': 'application/json; charset=utf-8'
|
|
}
|
|
|
|
def send_raw(data):
|
|
api_key, api_secret = API_KEY
|
|
data['agent'] = {'sdkVersion': 'python/4.2.0', 'osPlatform': 'Windows-10-10.0.22621-SP0 | 3.11.0'}
|
|
return requests.post('https://api.coolsms.co.kr/messages/v4/send', headers=get_headers(api_key, api_secret), json=data)
|
|
|
|
def send_lms(msg: str, title = "", receiver: str = SENDER):
|
|
assert str(receiver) == receiver
|
|
msg_data = {
|
|
"message": {
|
|
'to': receiver,
|
|
'from': SENDER,
|
|
'text': msg
|
|
}
|
|
}
|
|
if title:
|
|
msg_data["message"]["subject"] = title
|
|
|
|
return send_raw(msg_data)
|
|
|
|
if __name__=="__main__":
|
|
if len(sys.argv) != 3 and len(sys.argv) != 4:
|
|
print(f"Usage: {str(sys.argv[0]).split('/')[-1]} [receiver] [message] (title)")
|
|
sys.exit()
|
|
if len(sys.argv) == 3:
|
|
title = ""
|
|
else:
|
|
title = sys.argv[3]
|
|
|
|
if send_lms(sys.argv[2], title, sys.argv[1]).status_code == 200:
|
|
print(f"Sent \"{sys.argv[2]}\" to {sys.argv[1]}.")
|
|
|