diff --git a/class/fonts/2.ttf b/class/fonts/2.ttf new file mode 100755 index 000000000..3a452b68f Binary files /dev/null and b/class/fonts/2.ttf differ diff --git a/class/vilidate.py b/class/vilidate.py new file mode 100755 index 000000000..f4127bda6 --- /dev/null +++ b/class/vilidate.py @@ -0,0 +1,130 @@ +#!/usr/bin/env python +# coding: utf-8 +# +------------------------------------------------------------------- +# | 宝塔Linux面板 +# +------------------------------------------------------------------- +# | Copyright (c) 2015-2099 宝塔(http://bt.cn) All rights reserved. +# +------------------------------------------------------------------- +# | Author: 黄文良 <287962566@qq.com> +# +------------------------------------------------------------------- + +import random, math +from PIL import Image, ImageDraw, ImageFont, ImageFilter + +class vieCode: + __fontSize = 20 #字体大小 + __width = 120 #画布宽度 + __heigth = 45 #画布高度 + __length = 4 #验证码长度 + __draw = None #画布 + __img = None #图片资源 + __code = None #验证码字符 + __str = None #自定义验证码字符集 + __inCurve = True #是否画干扰线 + __inNoise = True #是否画干扰点 + __type = 2 #验证码类型 1、纯字母 2、数字字母混合 + __fontPatn = 'class/fonts/2.ttf' #字体 + + def GetCodeImage(self,size = 80,length = 4): + '''获取验证码图片 + @param int size 验证码大小 + @param int length 验证码长度 + ''' + #准备基础数据 + self.__length = length + self.__fontSize = size + self.__width = self.__fontSize * self.__length + self.__heigth = int(self.__fontSize * 1.5) + + #生成验证码图片 + self.__createCode() + self.__createImage() + self.__createNoise() + self.__printString() + self.__cerateFilter() + + return self.__img,self.__code + + def __cerateFilter(self): + '''模糊处理''' + self.__img = self.__img.filter(ImageFilter.BLUR) + filter = ImageFilter.ModeFilter(8) + self.__img = self.__img.filter(filter) + + def __createCode(self): + '''创建验证码字符''' + #是否自定义字符集合 + if not self.__str: + #源文本 + number = "3456789" + srcLetter = "qwertyuipasdfghjkzxcvbnmQWERTYUIOPASDFGHJKLZXCVBNM" + srcUpper = srcLetter.upper() + if self.__type == 1: + self.__str = number + else: + self.__str = srcLetter + srcUpper + number + + #构造验证码 + self.__code = random.sample(self.__str,self.__length) + + def __createImage(self): + '''创建画布''' + bgColor = (random.randint(200,255),random.randint(200,255),random.randint(200,255)) + self.__img = Image.new('RGB', (self.__width,self.__heigth), bgColor) + self.__draw = ImageDraw.Draw(self.__img) + + def __createNoise(self): + '''画干扰点''' + if not self.__inNoise: + return + font = ImageFont.truetype(self.__fontPatn, int(self.__fontSize / 1.5)) + for i in xrange(5): + #杂点颜色 + noiseColor = (random.randint(150,200), random.randint(150,200), random.randint(150,200)) + putStr = random.sample(self.__str,2) + for j in range(2): + #绘杂点 + size = (random.randint(-10,self.__width), random.randint(-10,self.__heigth)) + self.__draw.text(size,putStr[j], font=font,fill=noiseColor) + pass + + def __createCurve(self): + '''画干扰线''' + if not self.__inCurve: + return + x = y = 0; + + #计算曲线系数 + a = random.uniform(1, self.__heigth / 2) + b = random.uniform(-self.__width / 4, self.__heigth / 4) + f = random.uniform(-self.__heigth / 4, self.__heigth / 4) + t = random.uniform(self.__heigth, self.__width * 2) + xend = random.randint(self.__width / 2, self.__width * 2) + w = (2 * math.pi) / t + + #画曲线 + color = (random.randint(30, 150), random.randint(30, 150), random.randint(30, 150)) + for x in xrange(xend): + if w!=0: + for k in xrange(int(self.__heigth / 10)): + y = a * math.sin(w * x + f)+ b + self.__heigth / 2 + i = int(self.__fontSize / 5) + while i > 0: + px = x + i + py = y + i + k + self.__draw.point((px , py), color) + i -= i + + def __printString(self): + '''打印验证码字符串''' + font = ImageFont.truetype(self.__fontPatn, self.__fontSize) + x = 0; + #打印字符到画板 + for i in xrange(self.__length): + #设置字体随机颜色 + color = (random.randint(30, 150), random.randint(30, 150), random.randint(30, 150)) + #计算座标 + x = random.uniform(self.__fontSize*i*0.95,self.__fontSize*i*1.1); + y = self.__fontSize * random.uniform(0.3,0.5); + #打印字符 + self.__draw.text((x, y),self.__code[i], font=font, fill=color) diff --git a/route/dashboard.py b/route/dashboard.py index 461aff941..975ea51f5 100644 --- a/route/dashboard.py +++ b/route/dashboard.py @@ -3,8 +3,15 @@ from flask import Flask from flask import Blueprint, render_template from flask import jsonify +from flask import request + import psutil import time +import os +import sys + + +sys.path.append(os.getcwd() + "/class/") dashboard = Blueprint('dashboard', __name__, template_folder='templates') @@ -15,6 +22,24 @@ def index(): return render_template('default/index.html') +@dashboard.route("/code") +def code(): + pass + # import vilidate + # vie = vilidate.vieCode() + # codeImage = vie.GetCodeImage(80, 4) + # try: + # from cStringIO import StringIO + # except: + # from StringIO import StringIO + + # out = StringIO() + # print out + # codeImage[0].save(out, "png") + + # return out.getvalue() + + @dashboard.route("/login") def login(): return render_template('default/login.html') diff --git a/route/files.py b/route/files.py index 79d263494..d0392f55c 100644 --- a/route/files.py +++ b/route/files.py @@ -24,7 +24,7 @@ def GetDiskInfo(): @files.route('/get_exec_log', methods=['POST']) -def GetExecLog(): +def get_exec_log(): file = os.getcwd() + "/tmp/panelExec.log" v = public.getLastLine(file, 100) return v diff --git a/templates/default/login.html b/templates/default/login.html index 4e18fab1c..6e48c241e 100755 --- a/templates/default/login.html +++ b/templates/default/login.html @@ -7,9 +7,9 @@ -$session.webname - - +mdserver-web + + @@ -139,55 +139,29 @@
- -
-
+ +
+
-
- +
+
- +
- + $tData['lan']['N13']
- - +
- - - - - - + + + + + +