From 19ee88825a591e4b74f3bd25360aac9e4bee520f Mon Sep 17 00:00:00 2001 From: yamat0jp Date: Wed, 16 Nov 2016 21:56:47 +0900 Subject: [PATCH] new file: __pycache__/index.cpython-35.pyc new file: index.py modified: pybbs/modules/admin.htm modified: static/db/db.json --- __pycache__/index.cpython-35.pyc | Bin 0 -> 10527 bytes index.py | 236 +++++++++++++++++++++++++++++++++++++++ pybbs/modules/admin.htm | 2 +- static/db/db.json | 2 +- 4 files changed, 238 insertions(+), 2 deletions(-) create mode 100644 __pycache__/index.cpython-35.pyc create mode 100755 index.py diff --git a/__pycache__/index.cpython-35.pyc b/__pycache__/index.cpython-35.pyc new file mode 100644 index 0000000000000000000000000000000000000000..a5a2304e3952f53d2903760fd45ba7d155f283fd GIT binary patch literal 10527 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 K=I_medHo+(bX8yg literal 0 HcmV?d00001 diff --git a/index.py b/index.py new file mode 100755 index 0000000..a47ff91 --- /dev/null +++ b/index.py @@ -0,0 +1,236 @@ + +import tornado.wsgi +import wsgiref.simple_server +import os.path +import tornado.auth +import tornado.escape +import tornado.httpserver +import tornado.ioloop +import tornado.options +import tornado.web +from tornado.options import define,options +from tinydb import TinyDB,Query,where +from tinydb.operations import delete +from datetime import datetime + +define('port',default=8000,help='run on the given port.',type=int) + +class BaseHandler(tornado.web.RequestHandler): + def get_current_user(self): + user = self.get_secure_cookie('admin_user') + return tornado.escape.utf8(user) + + def set_current_user(self,username): + self.set_secure_cookie('admin_user',username) + + def clear_current_user(self): + self.clear_cookie('admin_user') + +class IndexHandler(BaseHandler): + def get(self,dbname,page='0'): + params = self.application.db.get(where('kinds') == 'conf') + if params['mentenance'] == True: + self.render('mentenance.htm',title=params['title'],db=dbname) + if self.application.collection(dbname) == False: + if self.current_user == b'admin': + self.application.db.table(dbname) + else: + self.render('regist.htm',content='urlが見つかりません') + i = params['count'] + na = self.get_cookie('username') + pos = self.application.gpos(dbname,page) + table = self.application.db.table(dbname) + start = (pos-1)*i + if start < 0: + start = len(table)-i + if start < 0: + start = 0 + rec = table.all()[start:start+i] + if len(table) >= 10*i: + self.render('modules/full.htm',position=pos,records=rec,data=params,db=dbname) + self.render('modules/index.htm',position=pos,records=rec,data=params,username=na,db=dbname) + +class LoginHandler(BaseHandler): + def get(self): + self.render('login.htm') + + def post(self): + pw = self.application.db.get(where('kinds') == 'conf') + if self.get_argument('password') == pw['password']: + self.set_current_user('admin') + dbname = self.get_argument('record') + self.redirect('/'+dbname+'/admin/0/') + +class LogoutHandler(BaseHandler): + def get(self): + self.clear_current_user() + self.redirect('/login') + +class NaviHandler(tornado.web.RequestHandler): + def get(self): + self.render('top.htm',coll=self.name()) + + def name(self): + y = [] + for x in self.application.db.tables(): + if x != '_default': + y.append(x) + return sorted(y) + +class RegistHandler(tornado.web.RequestHandler): + def post(self,dbname): + if self.application.collection(dbname) == False: + self.render('regist.htm',content='urlが存在しません') + words = [''+line + i += len(line) + for word in out: + if word in text: + error = error + u'禁止ワード.' + break + pw = self.get_argument('password') + if na == '': + na = u'誰かさん' + if sub == '': + sub = u'タイトルなし.' + if i == 0: + error = error + u'本文がありません.' + elif i > 1000: + error = error +u'文字数が1,000をこえました.' + article = self.application.db.table(dbname) + if len(article) == 0: + no = 1 + else: + item = article.get(where('number') == len(article)) + no = item['number']+1 + if error == '': + reg = {'number':no,'name':na,'title':sub,'comment':text,'password':pw,'date':1}#datetime.today()} + article.insert(reg) + self.set_cookie('username',na) + self.redirect('/'+dbname+'#article') + else: + self.render('regist.htm',content=error) + +class AdminHandler(BaseHandler): + @tornado.web.authenticated + def get(self,dbname,page='0'): + if dbname == '': + dbname = self.get_argument('record','') + if self.application.collection(dbname) == False: + self.render('regist.htm',content='urlが見つかりません') + table = self.application.db.table(dbname) + rec = table.all() + mente = self.application.db.get(where('kinds') == 'conf') + if mente['mentenance'] == True: + check = 'checked=checked' + else: + check = '' + pos = self.application.gpos(dbname,page) + self.render('modules/admin.htm',position=pos,records=rec,mente=check,password=mente['password'],db=dbname) + +class AdminConfHandler(BaseHandler): + @tornado.web.authenticated + def post(self,dbname,func): + if func == 'set': + if self.get_argument('mente','') == 'on': + mente = True + else: + mente = False + word = self.get_argument('pass','') + if word == '': + self.render('regist.htm',content='パスワードを設定してください') + else: + self.application.db.update({'mentenance':mente,'password':word},where('kinds') == 'conf') + elif func == 'del': + table = self.application.db.table(dbname) + for x in self.get_arguments('item'): + table.remove(where('number') == int(x)) + self.redirect('/'+dbname+'/admin/0/') + +class UserHandler(tornado.web.RequestHandler): + def post(self,dbname): + num = int(self.get_argument('number')) + pas = self.get_argument('password') + table = self.application.db.table(dbname) + qwr = Query() + obj = table.get(qwr.number == num) + if obj and(obj['password'] == pas): + table.remove(qwr.number == num) + self.redirect('/'+dbname) + +class SearchHandler(tornado.web.RequestHandler): + def post(self,dbname): + self.word = self.get_argument('word1') + self.radiobox = self.get_argument('filter') + self.set_cookie('search',self.word) + table = self.application.db.table(dbname) + self.render('modules/search.htm',records=self.mylist(table.all()),word1=self.word,db=dbname) + + def get(self,dbname): + word = self.get_cookie('search') + self.render('modules/search.htm',records={},word1=word,db=dbname) + + def mylist(self,rec): + for searchrec in rec: + if self.radiobox == 'name': + if searchrec['name'].find(self.word) == True: + yield searchrec + else: + if searchrec['comment'].find(self.word) == True: + yield searchrec + +class FooterModule(tornado.web.UIModule): + def render(self,number,url,link): + return self.render_string('modules/footer.htm',index=number,url=url,link=link) + +class Application(tornado.web.Application): + def __init__(self): + self.db = TinyDB('static/db/db.json') + handlers = [(r'/',NaviHandler),(r'/login',LoginHandler),(r'/logout',LogoutHandler),(r'/([a-zA-Z0-9_]+)',IndexHandler),(r'/([a-zA-Z0-9_]+)/([0-9]+)/',IndexHandler), + (r'/([a-zA-Z0-9_]+)/admin/([0-9]+)/',AdminHandler),(r'/([a-zA-Z0-9_]+)/admin/([a-z]+)/',AdminConfHandler),(r'/([a-zA-Z0-9_]+)/userdel',UserHandler), + (r'/([a-zA-Z0-9_]+)/search',SearchHandler),(r'/([a-zA-Z0-9_]+)/regist',RegistHandler)] + settings = {'template_path':os.path.join(os.path.dirname(__file__),'pybbs'), + 'static_path':os.path.join(os.path.dirname(__file__),'static'), + 'ui_modules':{'Footer':FooterModule}, + 'cookie_secret':'bZJc2sWbQLKos6GkHn/VB9oXwQt8SOROkRvJ5/xJ89E=', + 'xsrf_cookies':True, + 'debug':True, + 'login_url':'/login' + } + tornado.web.Application.__init__(self,handlers,**settings) + + def gpos(self,dbname,page): + params = self.db.get(where('kinds') == 'conf') + pos = int(page) + if pos <= 0: + pos = 0 + elif (pos-1)*params['count'] >= len(self.db.table(dbname)): + pos = 0 + return pos + + def collection(self,name): + for x in self.db.tables(): + if x == name: + return True + else: + return False + +if __name__ == '__main__': + tornado.options.parse_command_line() + app = Application() + app.listen(options.port) + tornado.ioloop.IOLoop.instance().start() +# wsgi_app = tornado.wsgi.WSGIAdapter(Applications()) + # server = wsgiref.simple_server.make_server('',8888,wsgi_app) + # server.serve_forever() diff --git a/pybbs/modules/admin.htm b/pybbs/modules/admin.htm index a8b1ea4..2bedfbc 100755 --- a/pybbs/modules/admin.htm +++ b/pybbs/modules/admin.htm @@ -37,7 +37,7 @@ {% for record in records %} - + {{record['number']}} {{record['date']}} {{record['title']}} diff --git a/static/db/db.json b/static/db/db.json index 39269c2..cee5356 100644 --- a/static/db/db.json +++ b/static/db/db.json @@ -1 +1 @@ -{"bbs2": {}, "_default": {"5": {"title": "pybbs", "mentenance": false, "kinds": "conf", "password": "admin", "count": 30, "title2": "pybbs"}}, "bbs1": {"11": {"title": "\u30bf\u30a4\u30c8\u30eb\u306a\u3057.", "password": "", "name": "None", "date": 1, "comment": "

wee", "number": 10}, "12": {"title": "\u30bf\u30a4\u30c8\u30eb\u306a\u3057.", "password": "", "name": "None", "date": 1, "comment": "

fe", "number": 11}, "13": {"title": "\u30bf\u30a4\u30c8\u30eb\u306a\u3057.", "password": "", "name": "None", "date": 1, "comment": "

fe", "number": 12}, "14": {"title": "\u30bf\u30a4\u30c8\u30eb\u306a\u3057.", "password": "", "name": "None", "date": 1, "comment": "

off", "number": 13}, "15": {"title": "\u30bf\u30a4\u30c8\u30eb\u306a\u3057.", "password": "", "name": "None", "date": 1, "comment": "

fed", "number": 14}, "16": {"title": "\u30bf\u30a4\u30c8\u30eb\u306a\u3057.", "password": "", "name": "None", "date": 1, "comment": "

ef", "number": 15}, "17": {"title": "\u30bf\u30a4\u30c8\u30eb\u306a\u3057.", "password": "", "name": "None", "date": 1, "comment": "

efe", "number": 16}, "18": {"title": "\u30bf\u30a4\u30c8\u30eb\u306a\u3057.", "password": "", "name": "None", "date": 1, "comment": "

ef", "number": 17}, "19": {"title": "\u30bf\u30a4\u30c8\u30eb\u306a\u3057.", "password": "", "name": "None", "date": 1, "comment": "

effete", "number": 18}, "20": {"title": "\u30bf\u30a4\u30c8\u30eb\u306a\u3057.", "password": "", "name": "None", "date": 1, "comment": "

efef", "number": 19}, "21": {"title": "\u30bf\u30a4\u30c8\u30eb\u306a\u3057.", "password": "", "name": "None", "date": 1, "comment": "

off", "number": 20}, "22": {"title": "\u30bf\u30a4\u30c8\u30eb\u306a\u3057.", "password": "", "name": "None", "date": 1, "comment": "

ef", "number": 21}, "23": {"title": "\u30bf\u30a4\u30c8\u30eb\u306a\u3057.", "password": "", "name": "None", "date": 1, "comment": "

efef", "number": 22}, "24": {"title": "\u30bf\u30a4\u30c8\u30eb\u306a\u3057.", "password": "", "name": "None", "date": 1, "comment": "

effe", "number": 23}, "25": {"title": "\u30bf\u30a4\u30c8\u30eb\u306a\u3057.", "password": "", "name": "None", "date": 1, "comment": "

efe", "number": 24}, "26": {"title": "\u30bf\u30a4\u30c8\u30eb\u306a\u3057.", "password": "", "name": "None", "date": 1, "comment": "

effete", "number": 25}, "27": {"title": "\u30bf\u30a4\u30c8\u30eb\u306a\u3057.", "password": "", "name": "None", "date": 1, "comment": "

effete", "number": 26}, "28": {"title": "\u30bf\u30a4\u30c8\u30eb\u306a\u3057.", "password": "", "name": "None", "date": 1, "comment": "

efefefeef", "number": 27}, "29": {"title": "\u30bf\u30a4\u30c8\u30eb\u306a\u3057.", "password": "", "name": "None", "date": 1, "comment": "

effe", "number": 28}, "30": {"title": "\u30bf\u30a4\u30c8\u30eb\u306a\u3057.", "password": "", "name": "None", "date": 1, "comment": "

effe", "number": 29}, "31": {"title": "\u30bf\u30a4\u30c8\u30eb\u306a\u3057.", "password": "", "name": "None", "date": 1, "comment": "

ef", "number": 30}, "32": {"title": "bbs", "password": "KAINUSHI", "name": "None", "date": 1, "comment": "

fef", "number": 23}}, "bbs3": {}} \ No newline at end of file +{"bbs2": {}, "bbs3": {}, "bbs": {}, "bbs1": {}, "_default": {"5": {"title2": "pybbs", "mentenance": false, "count": 30, "title": "pybbs", "password": "admin", "kinds": "conf"}}} \ No newline at end of file -- 2.11.0