2021-08-04 15:35:10 +00:00
from files . mail import *
from files . __main__ import app , limiter
from files . helpers . alerts import *
2021-07-21 01:12:26 +00:00
2021-08-02 15:05:46 +00:00
site = environ . get ( " domain " ) . strip ( )
2021-07-25 21:59:20 +00:00
2021-07-30 15:14:41 +00:00
@app.get ( " /patrons " )
@auth_desired
def patrons ( v ) :
if v and v . is_banned and not v . unban_utc : return render_template ( " seized.html " )
users = [ x for x in g . db . query ( User ) . filter ( User . patron > 0 ) . order_by ( User . patron . desc ( ) ) . all ( ) ]
return render_template ( " patrons.html " , v = v , users = users )
2021-07-27 22:31:28 +00:00
@app.get ( " /badmins " )
2021-07-25 21:59:20 +00:00
@auth_desired
def badmins ( v ) :
2021-08-04 16:51:14 +00:00
badmins = g . db . query ( User ) . filter_by ( admin_level = 6 ) . order_by ( User . coins . desc ( ) ) . all ( )
2021-07-31 06:15:34 +00:00
return render_template ( " badmins.html " , v = v , badmins = badmins )
2021-07-25 21:59:20 +00:00
2021-07-27 22:31:28 +00:00
@app.get ( " /log " )
2021-07-25 21:59:20 +00:00
@auth_desired
def log ( v ) :
page = int ( request . args . get ( " page " , 1 ) )
if v and v . admin_level == 6 : actions = g . db . query ( ModAction ) . order_by ( ModAction . id . desc ( ) ) . offset ( 25 * ( page - 1 ) ) . limit ( 26 ) . all ( )
else : actions = g . db . query ( ModAction ) . filter ( ModAction . kind != " shadowban " , ModAction . kind != " unshadowban " ) . order_by ( ModAction . id . desc ( ) ) . offset ( 25 * ( page - 1 ) ) . limit ( 26 ) . all ( )
next_exists = len ( actions ) == 26
2021-07-26 00:45:52 +00:00
actions = actions [ : 25 ]
2021-07-25 21:59:20 +00:00
2021-07-31 05:59:25 +00:00
return render_template ( " log.html " , v = v , actions = actions , next_exists = next_exists , page = page )
2021-07-25 21:59:20 +00:00
2021-07-30 08:28:18 +00:00
@app.get ( " /log/<id> " )
2021-07-25 21:59:20 +00:00
@auth_desired
2021-07-30 08:28:18 +00:00
def log_item ( id , v ) :
2021-07-25 21:59:20 +00:00
2021-07-30 08:28:18 +00:00
try : id = int ( id )
2021-07-31 06:59:18 +00:00
except :
try : id = int ( id , 36 )
except : abort ( 404 )
2021-07-30 08:28:18 +00:00
action = g . db . query ( ModAction ) . filter_by ( id = id ) . first ( )
2021-07-25 21:59:20 +00:00
if not action :
abort ( 404 )
if request . path != action . permalink :
return redirect ( action . permalink )
2021-07-31 05:59:25 +00:00
return render_template ( " log.html " ,
2021-07-25 21:59:20 +00:00
v = v ,
actions = [ action ] ,
next_exists = False ,
page = 1 ,
action = action
)
2021-07-21 01:12:26 +00:00
@app.route ( " /sex " )
def index ( ) :
return render_template ( " index.html " , * * { " greeting " : " Hello from Flask! " } )
2021-07-27 22:31:28 +00:00
@app.get ( " /assets/favicon.ico " )
2021-07-21 01:12:26 +00:00
def favicon ( ) :
return send_file ( " ./assets/images/favicon.png " )
2021-07-31 04:32:42 +00:00
@app.get ( " /api " )
2021-07-21 01:12:26 +00:00
@auth_desired
2021-07-31 04:32:42 +00:00
def api ( v ) :
return render_template ( " api.html " , v = v )
2021-07-21 01:12:26 +00:00
2021-07-27 22:31:28 +00:00
@app.get ( " /contact " )
2021-07-21 01:12:26 +00:00
@auth_desired
def contact ( v ) :
if v and v . is_banned and not v . unban_utc : return render_template ( " seized.html " )
return render_template ( " contact.html " , v = v )
2021-07-27 22:31:28 +00:00
@app.post ( " /contact " )
2021-07-21 01:12:26 +00:00
@auth_desired
def submit_contact ( v ) :
2021-08-02 15:05:46 +00:00
message = f ' This message has been sent automatically to all admins via https:// { site } /contact, user email is " { v . email } " \n \n Message: \n \n ' + request . form . get ( " message " , " " )
2021-07-21 01:12:26 +00:00
send_admin ( v . id , message )
return render_template ( " contact.html " , v = v , msg = " Your message has been sent. " )
@app.route ( ' /archives ' )
@limiter.exempt
def archivesindex ( ) :
return redirect ( " /archives/index.html " )
@app.route ( ' /archives/<path:path> ' )
@limiter.exempt
def archives ( path ) :
resp = make_response ( send_from_directory ( ' /archives ' , path ) )
if request . path . endswith ( ' .css ' ) : resp . headers . add ( " Content-Type " , " text/css " )
return resp
@app.route ( ' /assets/<path:path> ' )
@limiter.exempt
def static_service ( path ) :
resp = make_response ( send_from_directory ( ' ./assets ' , path ) )
2021-07-30 13:44:03 +00:00
if request . path . endswith ( ' .css ' ) : resp . headers . add ( " Content-Type " , " text/css " )
2021-07-21 01:12:26 +00:00
return resp
2021-07-27 22:31:28 +00:00
@app.get ( " /robots.txt " )
2021-07-21 01:12:26 +00:00
def robots_txt ( ) :
return send_file ( " ./assets/robots.txt " )
2021-07-27 22:31:28 +00:00
@app.get ( " /settings " )
2021-07-21 01:12:26 +00:00
@auth_required
def settings ( v ) :
if v and v . is_banned and not v . unban_utc : return render_template ( " seized.html " )
return redirect ( " /settings/profile " )
2021-07-27 22:31:28 +00:00
@app.get ( " /settings/profile " )
2021-07-21 01:12:26 +00:00
@auth_required
def settings_profile ( v ) :
if v and v . is_banned and not v . unban_utc : return render_template ( " seized.html " )
return render_template ( " settings_profile.html " ,
v = v )
2021-07-27 22:31:28 +00:00
@app.get ( " /titles " )
2021-07-21 01:12:26 +00:00
@auth_desired
def titles ( v ) :
if v and v . is_banned and not v . unban_utc : return render_template ( " seized.html " )
titles = [ x for x in g . db . query ( Title ) . order_by ( text ( " id asc " ) ) . all ( ) ]
return render_template ( " /titles.html " ,
v = v ,
titles = titles )
2021-07-27 22:31:28 +00:00
@app.get ( " /badges " )
2021-07-21 01:12:26 +00:00
@auth_desired
def badges ( v ) :
if v and v . is_banned and not v . unban_utc : return render_template ( " seized.html " )
badges = [
x for x in g . db . query ( BadgeDef ) . order_by (
text ( " rank asc, id asc " ) ) . all ( ) ]
return render_template ( " badges.html " ,
v = v ,
badges = badges )
2021-07-27 22:31:28 +00:00
@app.get ( " /blocks " )
2021-07-21 01:12:26 +00:00
@auth_desired
def blocks ( v ) :
if v and v . is_banned and not v . unban_utc : return render_template ( " seized.html " )
blocks = g . db . query ( UserBlock ) . all ( )
users = [ ]
targets = [ ]
for x in blocks :
users . append ( get_account ( x . user_id ) )
targets . append ( get_account ( x . target_id ) )
return render_template ( " blocks.html " , v = v , users = users , targets = targets )
2021-07-27 22:31:28 +00:00
@app.get ( " /banned " )
2021-07-21 01:12:26 +00:00
@auth_desired
def banned ( v ) :
if v and v . is_banned and not v . unban_utc : return render_template ( " seized.html " )
2021-07-26 18:05:46 +00:00
users = [ x for x in g . db . query ( User ) . filter ( User . is_banned > 0 , User . unban_utc == 0 ) . all ( ) ]
2021-07-21 01:12:26 +00:00
return render_template ( " banned.html " , v = v , users = users )
2021-07-27 22:31:28 +00:00
@app.get ( " /formatting " )
2021-07-21 01:12:26 +00:00
@auth_desired
def formatting ( v ) :
if v and v . is_banned and not v . unban_utc : return render_template ( " seized.html " )
return render_template ( " formatting.html " , v = v )
2021-07-27 22:31:28 +00:00
@app.get ( " /.well-known/brave-rewards-verification.txt " )
2021-07-21 01:12:26 +00:00
def brave ( ) :
with open ( " .well-known/brave-rewards-verification.txt " , " r " ) as f : return Response ( f . read ( ) , mimetype = ' text/plain ' )
2021-07-27 22:31:28 +00:00
@app.get ( " /.well-known/assetlinks.json " )
2021-07-21 01:12:26 +00:00
def googleplayapp ( ) :
with open ( " .well-known/assetlinks.json " , " r " ) as f : return Response ( f . read ( ) , mimetype = ' application/json ' )
@app.route ( " /service-worker.js " )
def serviceworker ( ) :
with open ( " .well-known/service-worker.js " , " r " ) as f : return Response ( f . read ( ) , mimetype = ' application/javascript ' )
2021-07-27 22:31:28 +00:00
@app.get ( " /settings/security " )
2021-07-21 01:12:26 +00:00
@auth_required
def settings_security ( v ) :
if v and v . is_banned and not v . unban_utc : return render_template ( " seized.html " )
return render_template ( " settings_security.html " ,
v = v ,
mfa_secret = pyotp . random_base32 ( ) if not v . mfa_secret else None ,
error = request . args . get ( " error " ) or None ,
msg = request . args . get ( " msg " ) or None
)
2021-07-27 22:31:28 +00:00
@app.post ( " /dismiss_mobile_tip " )
2021-07-21 01:12:26 +00:00
def dismiss_mobile_tip ( ) :
session [ " tooltip_last_dismissed " ] = int ( time . time ( ) )
session . modified = True
return " " , 204