add public use mode
parent
946eb07949
commit
775169b2ab
|
@ -23,6 +23,7 @@ class Hole(Base):
|
|||
marseyurl = Column(VARCHAR(HOLE_MARSEY_URL_LENGTH))
|
||||
css = deferred(Column(VARCHAR(CSS_LENGTH_LIMIT)))
|
||||
stealth = Column(Boolean, default=False)
|
||||
public_use = Column(Boolean, default=False)
|
||||
created_utc = Column(Integer)
|
||||
if SITE_NAME == 'WPD':
|
||||
snappy_quotes = None
|
||||
|
|
|
@ -94,6 +94,16 @@ HOLEACTION_TYPES = {
|
|||
"icon": 'fa-thumbtack fa-rotate--45',
|
||||
"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': {
|
||||
"str": 'enabled stealth mode',
|
||||
"icon": 'fa-user-ninja',
|
||||
|
|
|
@ -16,13 +16,15 @@ from files.__main__ import app, cache, limiter
|
|||
@auth_required
|
||||
def exile_post(v, pid):
|
||||
p = get_post(pid)
|
||||
hole = p.hole
|
||||
hole = p.hole_obj
|
||||
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'}:
|
||||
abort(403, f"/h/{hole} has the exiling feature disabled due to being unblockable.")
|
||||
hole = hole.name
|
||||
|
||||
if not v.mods_hole(hole): abort(403)
|
||||
|
||||
u = p.author
|
||||
|
||||
|
@ -53,13 +55,15 @@ def exile_post(v, pid):
|
|||
@auth_required
|
||||
def exile_comment(v, cid):
|
||||
c = get_comment(cid)
|
||||
hole = c.post.hole
|
||||
hole = c.post.hole_obj
|
||||
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'}:
|
||||
abort(403, f"/h/{hole} has the exiling feature disabled due to being unblockable.")
|
||||
hole = hole.name
|
||||
|
||||
if not v.mods_hole(hole): abort(403)
|
||||
|
||||
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)
|
||||
@auth_required
|
||||
def block_sub(v, hole):
|
||||
if hole in {'atheism', 'dioceseofrdrama', 'truth'}:
|
||||
abort(403, f"/h/{hole} is unblockable!")
|
||||
hole = get_hole(hole)
|
||||
|
||||
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()
|
||||
if not existing:
|
||||
block = HoleBlock(user_id=v.id, hole=hole)
|
||||
|
@ -846,6 +853,41 @@ def hole_stealth(v, hole):
|
|||
g.db.add(ma)
|
||||
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>")
|
||||
@feature_required('PINS')
|
||||
|
|
|
@ -15,6 +15,19 @@
|
|||
</span>
|
||||
</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>
|
||||
<div class="settings-section rounded">
|
||||
<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