You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
488 lines
12 KiB
488 lines
12 KiB
import os
|
|
import re
|
|
from time import strftime, gmtime
|
|
from hashlib import sha256
|
|
from peewee import *
|
|
|
|
from app import app, cache, db
|
|
|
|
board_db = MySQLDatabase(app.config['FORUM_NAME'], **{'passwd': app.config['FORUM_PASSWORD'],
|
|
'host': app.config['FORUM_HOST'], 'user': app.config['FORUM_USERNAME']})
|
|
|
|
def registerUserForumId(user, username, password):
|
|
try:
|
|
u = Users.filter(name=username).get()
|
|
hashpass = sha256(password+app.config['FORUM_SALT']+u.pss).hexdigest()
|
|
if hashpass == u.password:
|
|
user.forum_id = u.id
|
|
db.session.commit()
|
|
return {"forum_name":u.name, "forum_id":u.id}
|
|
except DoesNotExist:
|
|
pass
|
|
return False
|
|
|
|
@cache.memoize(60*5)
|
|
def latest_news(num=3):
|
|
latest_news = []
|
|
try:
|
|
board_db.connect()
|
|
news_forum = Forums.get(fn.Lower(Forums.title) % '%news%')
|
|
for thread in Threads.select().where(
|
|
Threads.forum == news_forum.id).order_by(Threads.date.desc()).limit(num):
|
|
# Last revision of the first post
|
|
post = Posts.select().where(Posts.thread == thread.id).get()
|
|
raw_text = PostsText.select().where(PostsText.pid == post.id).order_by(PostsText.revision.desc()).limit(1).get()
|
|
|
|
#remove BBCode
|
|
text = re.sub(r"\[(\/)?(\w+)\]", '', raw_text.text)
|
|
|
|
timestamp = thread.date
|
|
date = strftime('%B %d, %Y %H:%M:%S UTC', gmtime(timestamp))
|
|
if not timestamp:
|
|
post = Posts.select().where(Posts.thread == thread.id).get()
|
|
timestamp = post and post.date
|
|
url = 'http://board.dotanoobs.com/?page=thread&id=%d' % thread.id
|
|
latest_news.append({'title':thread.title, 'text':text, 'date':date, 'timestamp':timestamp, 'url':url})
|
|
except Exception as e:
|
|
latest_news.append({'title':'Error with forum db', 'text':e, 'url':''})
|
|
finally:
|
|
board_db.close()
|
|
return latest_news
|
|
|
|
class UnknownFieldType(object):
|
|
pass
|
|
|
|
class BaseModel(Model):
|
|
class Meta:
|
|
database = board_db
|
|
|
|
class Badges(BaseModel):
|
|
color = IntegerField()
|
|
name = CharField()
|
|
owner = IntegerField()
|
|
|
|
class Meta:
|
|
db_table = 'badges'
|
|
|
|
class Blockedlayouts(BaseModel):
|
|
blockee = IntegerField()
|
|
user = IntegerField()
|
|
|
|
class Meta:
|
|
db_table = 'blockedlayouts'
|
|
|
|
class Categories(BaseModel):
|
|
corder = IntegerField()
|
|
name = CharField()
|
|
|
|
class Meta:
|
|
db_table = 'categories'
|
|
|
|
class Enabledplugins(BaseModel):
|
|
plugin = CharField()
|
|
|
|
class Meta:
|
|
db_table = 'enabledplugins'
|
|
|
|
class Forummods(BaseModel):
|
|
forum = IntegerField()
|
|
user = IntegerField()
|
|
|
|
class Meta:
|
|
db_table = 'forummods'
|
|
|
|
class Forums(BaseModel):
|
|
catid = IntegerField()
|
|
description = TextField(null=True)
|
|
forder = IntegerField()
|
|
hidden = IntegerField()
|
|
lastpostdate = IntegerField()
|
|
lastpostid = IntegerField()
|
|
lastpostuser = IntegerField()
|
|
minpower = IntegerField()
|
|
minpowerreply = IntegerField()
|
|
minpowerthread = IntegerField()
|
|
numposts = IntegerField()
|
|
numthreads = IntegerField()
|
|
title = CharField()
|
|
|
|
class Meta:
|
|
db_table = 'forums'
|
|
|
|
class Guests(BaseModel):
|
|
bot = IntegerField()
|
|
date = IntegerField()
|
|
ip = CharField()
|
|
lastforum = IntegerField()
|
|
lasturl = CharField()
|
|
useragent = CharField()
|
|
|
|
class Meta:
|
|
db_table = 'guests'
|
|
|
|
class Ignoredforums(BaseModel):
|
|
fid = IntegerField()
|
|
uid = IntegerField()
|
|
|
|
class Meta:
|
|
db_table = 'ignoredforums'
|
|
|
|
class Ip2C(BaseModel):
|
|
cc = CharField(null=True)
|
|
ip_from = BigIntegerField()
|
|
ip_to = BigIntegerField()
|
|
|
|
class Meta:
|
|
db_table = 'ip2c'
|
|
|
|
class Ipbans(BaseModel):
|
|
date = IntegerField()
|
|
ip = CharField()
|
|
reason = CharField()
|
|
|
|
class Meta:
|
|
db_table = 'ipbans'
|
|
|
|
class Log(BaseModel):
|
|
date = IntegerField()
|
|
forum = IntegerField()
|
|
forum2 = IntegerField()
|
|
ip = CharField()
|
|
pm = IntegerField()
|
|
post = IntegerField()
|
|
text = CharField()
|
|
thread = IntegerField()
|
|
type = CharField()
|
|
user = IntegerField()
|
|
user2 = IntegerField()
|
|
|
|
class Meta:
|
|
db_table = 'log'
|
|
|
|
class Misc(BaseModel):
|
|
hotcount = IntegerField()
|
|
maxpostsday = IntegerField()
|
|
maxpostsdaydate = IntegerField()
|
|
maxpostshour = IntegerField()
|
|
maxpostshourdate = IntegerField()
|
|
maxusers = IntegerField()
|
|
maxusersdate = IntegerField()
|
|
maxuserstext = TextField(null=True)
|
|
milestone = TextField(null=True)
|
|
version = IntegerField()
|
|
views = IntegerField()
|
|
|
|
class Meta:
|
|
db_table = 'misc'
|
|
|
|
class Moodavatars(BaseModel):
|
|
mid = IntegerField()
|
|
name = CharField()
|
|
uid = IntegerField()
|
|
|
|
class Meta:
|
|
db_table = 'moodavatars'
|
|
|
|
class Notifications(BaseModel):
|
|
description = TextField(null=True)
|
|
link = IntegerField()
|
|
linklocation = CharField()
|
|
time = IntegerField()
|
|
title = CharField()
|
|
type = CharField()
|
|
uid = IntegerField()
|
|
|
|
class Meta:
|
|
db_table = 'notifications'
|
|
|
|
class Pmsgs(BaseModel):
|
|
date = IntegerField()
|
|
deleted = IntegerField()
|
|
drafting = IntegerField()
|
|
ip = CharField()
|
|
msgread = IntegerField()
|
|
userfrom = IntegerField()
|
|
userto = IntegerField()
|
|
|
|
class Meta:
|
|
db_table = 'pmsgs'
|
|
|
|
class PmsgsText(BaseModel):
|
|
pid = IntegerField()
|
|
text = TextField(null=True)
|
|
title = CharField()
|
|
|
|
class Meta:
|
|
db_table = 'pmsgs_text'
|
|
|
|
class Poll(BaseModel):
|
|
briefing = TextField(null=True)
|
|
closed = IntegerField()
|
|
doublevote = IntegerField()
|
|
question = CharField()
|
|
|
|
class Meta:
|
|
db_table = 'poll'
|
|
|
|
class PollChoices(BaseModel):
|
|
choice = CharField()
|
|
color = CharField()
|
|
poll = IntegerField()
|
|
|
|
class Meta:
|
|
db_table = 'poll_choices'
|
|
|
|
class Pollvotes(BaseModel):
|
|
choiceid = IntegerField()
|
|
poll = IntegerField()
|
|
user = IntegerField()
|
|
|
|
class Meta:
|
|
db_table = 'pollvotes'
|
|
|
|
class Postplusones(BaseModel):
|
|
post = IntegerField()
|
|
user = IntegerField()
|
|
|
|
class Meta:
|
|
db_table = 'postplusones'
|
|
|
|
class Posts(BaseModel):
|
|
currentrevision = IntegerField()
|
|
date = IntegerField()
|
|
deleted = IntegerField()
|
|
deletedby = IntegerField()
|
|
ip = CharField()
|
|
mood = IntegerField()
|
|
num = IntegerField()
|
|
options = IntegerField()
|
|
postplusones = IntegerField()
|
|
reason = CharField()
|
|
thread = IntegerField()
|
|
user = IntegerField()
|
|
|
|
class Meta:
|
|
db_table = 'posts'
|
|
|
|
class PostsText(BaseModel):
|
|
date = IntegerField()
|
|
pid = IntegerField(primary_key=True)
|
|
revision = IntegerField()
|
|
text = TextField(null=True)
|
|
user = IntegerField()
|
|
|
|
class Meta:
|
|
db_table = 'posts_text'
|
|
|
|
class Proxybans(BaseModel):
|
|
ip = CharField()
|
|
|
|
class Meta:
|
|
db_table = 'proxybans'
|
|
|
|
class Queryerrors(BaseModel):
|
|
cookie = TextField(null=True)
|
|
error = TextField(null=True)
|
|
get = TextField(null=True)
|
|
ip = CharField()
|
|
post = TextField(null=True)
|
|
query = TextField(null=True)
|
|
time = IntegerField()
|
|
user = IntegerField()
|
|
|
|
class Meta:
|
|
db_table = 'queryerrors'
|
|
|
|
class Reports(BaseModel):
|
|
hidden = IntegerField()
|
|
ip = CharField()
|
|
request = TextField(null=True)
|
|
severity = IntegerField()
|
|
text = CharField()
|
|
time = IntegerField()
|
|
user = IntegerField()
|
|
|
|
class Meta:
|
|
db_table = 'reports'
|
|
|
|
class Sessions(BaseModel):
|
|
autoexpire = IntegerField()
|
|
expiration = IntegerField()
|
|
id = CharField()
|
|
iplock = IntegerField()
|
|
iplockaddr = CharField()
|
|
lastip = CharField()
|
|
lasttime = IntegerField()
|
|
lasturl = CharField()
|
|
user = IntegerField()
|
|
|
|
class Meta:
|
|
db_table = 'sessions'
|
|
|
|
class Settings(BaseModel):
|
|
name = CharField()
|
|
plugin = CharField()
|
|
value = TextField(null=True)
|
|
|
|
class Meta:
|
|
db_table = 'settings'
|
|
|
|
class Smilies(BaseModel):
|
|
code = CharField()
|
|
image = CharField()
|
|
|
|
class Meta:
|
|
db_table = 'smilies'
|
|
|
|
class Threads(BaseModel):
|
|
closed = IntegerField()
|
|
date = IntegerField()
|
|
firstpostid = IntegerField()
|
|
forum = IntegerField()
|
|
icon = CharField()
|
|
lastpostdate = IntegerField()
|
|
lastposter = IntegerField()
|
|
lastpostid = IntegerField()
|
|
poll = IntegerField()
|
|
replies = IntegerField()
|
|
sticky = IntegerField()
|
|
title = CharField()
|
|
user = IntegerField()
|
|
views = IntegerField()
|
|
|
|
class Meta:
|
|
db_table = 'threads'
|
|
|
|
class Threadsread(BaseModel):
|
|
date = IntegerField()
|
|
thread = IntegerField()
|
|
|
|
class Meta:
|
|
db_table = 'threadsread'
|
|
|
|
class Uploader(BaseModel):
|
|
category = IntegerField()
|
|
date = IntegerField()
|
|
description = CharField()
|
|
downloads = IntegerField()
|
|
filename = CharField()
|
|
private = IntegerField()
|
|
user = IntegerField()
|
|
|
|
class Meta:
|
|
db_table = 'uploader'
|
|
|
|
class UploaderCategories(BaseModel):
|
|
description = TextField(null=True)
|
|
name = CharField()
|
|
ord = IntegerField()
|
|
|
|
class Meta:
|
|
db_table = 'uploader_categories'
|
|
|
|
class Usercomments(BaseModel):
|
|
cid = IntegerField()
|
|
date = IntegerField()
|
|
text = TextField(null=True)
|
|
uid = IntegerField()
|
|
|
|
class Meta:
|
|
db_table = 'usercomments'
|
|
|
|
class Usergroups(BaseModel):
|
|
inherits = IntegerField()
|
|
permissions = TextField(null=True)
|
|
title = CharField()
|
|
|
|
class Meta:
|
|
db_table = 'usergroups'
|
|
|
|
class Userpermissions(BaseModel):
|
|
permissions = TextField(null=True)
|
|
uid = IntegerField()
|
|
|
|
class Meta:
|
|
db_table = 'userpermissions'
|
|
|
|
class Users(BaseModel):
|
|
bio = TextField(null=True)
|
|
birthday = IntegerField()
|
|
blocklayouts = IntegerField()
|
|
color = CharField()
|
|
dateformat = CharField()
|
|
displayname = CharField()
|
|
email = CharField()
|
|
fontsize = IntegerField()
|
|
forbiddens = CharField()
|
|
globalblock = IntegerField()
|
|
hascolor = IntegerField()
|
|
homepagename = CharField()
|
|
homepageurl = CharField()
|
|
karma = IntegerField()
|
|
lastactivity = IntegerField()
|
|
lastforum = IntegerField()
|
|
lastip = CharField()
|
|
lastknownbrowser = TextField(null=True)
|
|
lastposttime = IntegerField()
|
|
lasturl = CharField()
|
|
location = CharField()
|
|
loggedin = IntegerField()
|
|
lostkey = CharField()
|
|
lostkeytimer = IntegerField()
|
|
minipic = CharField()
|
|
name = CharField()
|
|
newcomments = IntegerField()
|
|
password = CharField()
|
|
picture = CharField()
|
|
pluginsettings = TextField(null=True)
|
|
postheader = TextField(null=True)
|
|
postplusones = IntegerField()
|
|
postplusonesgiven = IntegerField()
|
|
posts = IntegerField()
|
|
postsperpage = IntegerField()
|
|
powerlevel = IntegerField()
|
|
pss = CharField()
|
|
rankset = CharField()
|
|
realname = CharField()
|
|
regdate = IntegerField()
|
|
sex = IntegerField()
|
|
showemail = IntegerField()
|
|
signature = TextField(null=True)
|
|
signsep = IntegerField()
|
|
tempbanpl = IntegerField()
|
|
tempbantime = BigIntegerField()
|
|
theme = CharField()
|
|
threadsperpage = IntegerField()
|
|
timeformat = CharField()
|
|
timezone = FloatField()
|
|
title = CharField()
|
|
usebanners = IntegerField()
|
|
|
|
class Meta:
|
|
db_table = 'users'
|
|
|
|
class Uservotes(BaseModel):
|
|
uid = IntegerField()
|
|
up = IntegerField()
|
|
voter = IntegerField()
|
|
|
|
class Meta:
|
|
db_table = 'uservotes'
|
|
|
|
class WikiPages(BaseModel):
|
|
flags = IntegerField()
|
|
id = CharField()
|
|
revision = IntegerField()
|
|
|
|
class Meta:
|
|
db_table = 'wiki_pages'
|
|
|
|
class WikiPagesText(BaseModel):
|
|
date = IntegerField()
|
|
id = CharField()
|
|
revision = IntegerField()
|
|
text = TextField(null=True)
|
|
user = IntegerField()
|
|
|
|
class Meta:
|
|
db_table = 'wiki_pages_text'
|