add public use mode
parent
946eb07949
commit
775169b2ab
|
@ -23,6 +23,7 @@ class Hole(Base):
|
||||||
marseyurl = Column(VARCHAR(HOLE_MARSEY_URL_LENGTH))
|
marseyurl = Column(VARCHAR(HOLE_MARSEY_URL_LENGTH))
|
||||||
css = deferred(Column(VARCHAR(CSS_LENGTH_LIMIT)))
|
css = deferred(Column(VARCHAR(CSS_LENGTH_LIMIT)))
|
||||||
stealth = Column(Boolean, default=False)
|
stealth = Column(Boolean, default=False)
|
||||||
|
public_use = Column(Boolean, default=False)
|
||||||
created_utc = Column(Integer)
|
created_utc = Column(Integer)
|
||||||
if SITE_NAME == 'WPD':
|
if SITE_NAME == 'WPD':
|
||||||
snappy_quotes = None
|
snappy_quotes = None
|
||||||
|
|
|
@ -94,6 +94,16 @@ HOLEACTION_TYPES = {
|
||||||
"icon": 'fa-thumbtack fa-rotate--45',
|
"icon": 'fa-thumbtack fa-rotate--45',
|
||||||
"color": 'bg-muted'
|
"color": 'bg-muted'
|
||||||
},
|
},
|
||||||
|
'enable_public_use': {
|
||||||
|
"str": 'enabled public use mode',
|
||||||
|
"icon": 'fa-users',
|
||||||
|
"color": 'bg-primary'
|
||||||
|
},
|
||||||
|
'disable_public_use': {
|
||||||
|
"str": 'disabled public use mode',
|
||||||
|
"icon": 'fa-users',
|
||||||
|
"color": 'bg-muted'
|
||||||
|
},
|
||||||
'enable_stealth': {
|
'enable_stealth': {
|
||||||
"str": 'enabled stealth mode',
|
"str": 'enabled stealth mode',
|
||||||
"icon": 'fa-user-ninja',
|
"icon": 'fa-user-ninja',
|
||||||
|
|
|
@ -16,13 +16,15 @@ from files.__main__ import app, cache, limiter
|
||||||
@auth_required
|
@auth_required
|
||||||
def exile_post(v, pid):
|
def exile_post(v, pid):
|
||||||
p = get_post(pid)
|
p = get_post(pid)
|
||||||
hole = p.hole
|
hole = p.hole_obj
|
||||||
if not hole: abort(400)
|
if not hole: abort(400)
|
||||||
|
|
||||||
if not v.mods_hole(hole): abort(403)
|
if hole.public_use:
|
||||||
|
abort(403, "You can't exile users while Public Use mode is enabled!")
|
||||||
|
|
||||||
if hole in {'atheism', 'dioceseofrdrama', 'truth'}:
|
hole = hole.name
|
||||||
abort(403, f"/h/{hole} has the exiling feature disabled due to being unblockable.")
|
|
||||||
|
if not v.mods_hole(hole): abort(403)
|
||||||
|
|
||||||
u = p.author
|
u = p.author
|
||||||
|
|
||||||
|
@ -53,13 +55,15 @@ def exile_post(v, pid):
|
||||||
@auth_required
|
@auth_required
|
||||||
def exile_comment(v, cid):
|
def exile_comment(v, cid):
|
||||||
c = get_comment(cid)
|
c = get_comment(cid)
|
||||||
hole = c.post.hole
|
hole = c.post.hole_obj
|
||||||
if not hole: abort(400)
|
if not hole: abort(400)
|
||||||
|
|
||||||
if not v.mods_hole(hole): abort(403)
|
if hole.public_use:
|
||||||
|
abort(403, "You can't exile users while Public Use mode is enabled!")
|
||||||
|
|
||||||
if hole in {'atheism', 'dioceseofrdrama', 'truth'}:
|
hole = hole.name
|
||||||
abort(403, f"/h/{hole} has the exiling feature disabled due to being unblockable.")
|
|
||||||
|
if not v.mods_hole(hole): abort(403)
|
||||||
|
|
||||||
u = c.author
|
u = c.author
|
||||||
|
|
||||||
|
@ -116,10 +120,13 @@ def unexile(v, hole, uid):
|
||||||
@limiter.limit(DEFAULT_RATELIMIT, deduct_when=lambda response: response.status_code < 400, key_func=get_ID)
|
@limiter.limit(DEFAULT_RATELIMIT, deduct_when=lambda response: response.status_code < 400, key_func=get_ID)
|
||||||
@auth_required
|
@auth_required
|
||||||
def block_sub(v, hole):
|
def block_sub(v, hole):
|
||||||
if hole in {'atheism', 'dioceseofrdrama', 'truth'}:
|
hole = get_hole(hole)
|
||||||
abort(403, f"/h/{hole} is unblockable!")
|
|
||||||
|
if hole.public_use:
|
||||||
|
abort(403, f"/h/{hole} has Public Use mode enabled and is unblockable!")
|
||||||
|
|
||||||
|
hole = hole.name
|
||||||
|
|
||||||
hole = get_hole(hole).name
|
|
||||||
existing = g.db.query(HoleBlock).filter_by(user_id=v.id, hole=hole).one_or_none()
|
existing = g.db.query(HoleBlock).filter_by(user_id=v.id, hole=hole).one_or_none()
|
||||||
if not existing:
|
if not existing:
|
||||||
block = HoleBlock(user_id=v.id, hole=hole)
|
block = HoleBlock(user_id=v.id, hole=hole)
|
||||||
|
@ -846,6 +853,41 @@ def hole_stealth(v, hole):
|
||||||
g.db.add(ma)
|
g.db.add(ma)
|
||||||
return {"message": f"Stealth mode has been disabled for /h/{hole} successfully!"}
|
return {"message": f"Stealth mode has been disabled for /h/{hole} successfully!"}
|
||||||
|
|
||||||
|
@app.post('/h/<hole>/public_use')
|
||||||
|
@limiter.limit('1/second', scope=rpath)
|
||||||
|
@limiter.limit('1/second', scope=rpath, key_func=get_ID)
|
||||||
|
@limiter.limit(DEFAULT_RATELIMIT, deduct_when=lambda response: response.status_code < 400)
|
||||||
|
@limiter.limit(DEFAULT_RATELIMIT, deduct_when=lambda response: response.status_code < 400, key_func=get_ID)
|
||||||
|
@auth_required
|
||||||
|
def hole_public_use(v, hole):
|
||||||
|
hole = get_hole(hole)
|
||||||
|
|
||||||
|
if not v.mods_hole(hole.name): abort(403)
|
||||||
|
|
||||||
|
hole.public_use = not hole.public_use
|
||||||
|
g.db.add(hole)
|
||||||
|
|
||||||
|
exiles = g.db.query(Exile).filter_by(hole=hole.name)
|
||||||
|
for exile in exiles:
|
||||||
|
send_repeatable_notification(exile.user_id, f"Your exile from /h/{exile.hole} has been revoked due to its jannies enabling Public Use mode!")
|
||||||
|
g.db.delete(exile)
|
||||||
|
|
||||||
|
if hole.public_use:
|
||||||
|
ma = HoleAction(
|
||||||
|
hole=hole.name,
|
||||||
|
kind='enable_public_use',
|
||||||
|
user_id=v.id
|
||||||
|
)
|
||||||
|
g.db.add(ma)
|
||||||
|
return {"message": f"Public Use mode has been enabled for /h/{hole} successfully!"}
|
||||||
|
else:
|
||||||
|
ma = HoleAction(
|
||||||
|
hole=hole.name,
|
||||||
|
kind='disable_public_use',
|
||||||
|
user_id=v.id
|
||||||
|
)
|
||||||
|
g.db.add(ma)
|
||||||
|
return {"message": f"Public Use mode has been disabled for /h/{hole} successfully!"}
|
||||||
|
|
||||||
@app.post("/pin_comment_mod/<int:cid>")
|
@app.post("/pin_comment_mod/<int:cid>")
|
||||||
@feature_required('PINS')
|
@feature_required('PINS')
|
||||||
|
|
|
@ -15,6 +15,19 @@
|
||||||
</span>
|
</span>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
|
<div class="title mt-5">
|
||||||
|
<label class="text-lg" for="public_use">Public Use Mode</label>
|
||||||
|
</div>
|
||||||
|
<div class="d-inline-block w-lg-100 pt-1 pt-lg-3">
|
||||||
|
<div class="custom-control custom-switch">
|
||||||
|
<input autocomplete="off" type="checkbox" class="custom-control-input" id="public_use" name="public_use" {% if hole.public_use %}checked{% endif %} data-nonce="{{g.nonce}}" data-onchange="postToastSwitch(this,'/h/{{hole}}/public_use')">
|
||||||
|
<label class="custom-control-label" for="public_use"></label>
|
||||||
|
</div>
|
||||||
|
<span class="text-small text-muted">
|
||||||
|
Make this hole unblockable and can't be exiled from.
|
||||||
|
</span>
|
||||||
|
</div>
|
||||||
|
|
||||||
<h5 class="mt-5 pt-5">Marsey</h5>
|
<h5 class="mt-5 pt-5">Marsey</h5>
|
||||||
<div class="settings-section rounded">
|
<div class="settings-section rounded">
|
||||||
<img loading="lazy" alt="sub marsey picture" src="{{hole.marsey_url}}" style="max-width:100px">
|
<img loading="lazy" alt="sub marsey picture" src="{{hole.marsey_url}}" style="max-width:100px">
|
||||||
|
|
|
@ -0,0 +1,2 @@
|
||||||
|
alter table holes add column public_use bool default false not null;
|
||||||
|
alter table holes alter column public_use drop default;
|
Loading…
Reference in New Issue