from flask import Flask, escape, request, jsonify, g, url_for, current_app import time import hmac import hashlib import base64 import urllib.parse import requests import os, json from database import db_session from models import Terminal SECRET = os.getenv('SECRET', 'SEC3219d0b06510f560349170c4d571b8fd10a5dfa616d4f9ef5494f63add766d65') # SECf8938911f24df40a0b86b711179fa7fc8ba88eb5d82e4e9f07bc03b5f29e8f6a TOKEN = os.getenv("TOKEN", '3bb560ac5a3ee5943aeeb21c452162a3f23c44d675b42935c56f6685aceb4153') #'3d72d0b376f8061b9cae44c1d1048221bc19e245a631ef31fa195f89fca9215d') API_ADDR= os.getenv('API', 'https://oapi.dingtalk.com/robot/send') API_TPL = API_ADDR+"?access_token={}×tamp={}&sign={}" app = Flask(__name__, static_url_path='', static_folder=None) class DingBot: secret = None token = None def __init__(self, token, secret): self.secret = secret self.token = token def sign(self): timestamp = round(time.time() * 1000) secret_enc = bytes(self.secret, encoding='utf-8') string_to_sign = '{}\n{}'.format(timestamp, self.secret) string_to_sign_enc = bytes(string_to_sign, encoding='utf-8') hmac_code = hmac.new(secret_enc, string_to_sign_enc, digestmod=hashlib.sha256).digest() return timestamp, urllib.parse.quote_plus(base64.b64encode(hmac_code)) def send_msg(self, title, text): ts, sign = self.sign() url = API_TPL.format(self.token, ts, sign) body = {'msgtype': 'markdown', 'markdown':{ 'title': title, 'text': text }} r = requests.post(url, json = body) print(r.status_code, r.text) def destroy(self): pass @app.teardown_appcontext def shutdown_session(exception=None): db_session.remove() DINGBOT = DingBot(TOKEN, SECRET) @app.route('/') def index(): name = request.args.get("name", "World") # DINGBOT.send_msg('test', 'this is a test') term = Terminal.query.filter(Terminal.sn == 'SNaaaaaa').first() ret = 'ok' if term: ret = term.sn print(term) return ret @app.route('/addterminal', methods=['POST']) def add_terminal(): pass if __name__ == '__main__': app.run(host='0.0.0.0', port='5000')