Skip to content

Commit

Permalink
add motd
Browse files Browse the repository at this point in the history
  • Loading branch information
zenmonkeykstop committed Aug 6, 2024
1 parent 6a0cf38 commit 4c76ae3
Show file tree
Hide file tree
Showing 3 changed files with 77 additions and 15 deletions.
32 changes: 32 additions & 0 deletions securedrop/journalist_app/admin.py
Original file line number Diff line number Diff line change
Expand Up @@ -118,6 +118,38 @@ def update_submission_preferences() -> Optional[werkzeug.Response]:
)
return redirect(url_for("admin.manage_config") + "#config-preventuploads")

@view.route("/update-homepage-message", methods=["POST"])
@admin_required
def update_homepage_message() -> Optional[werkzeug.Response]:
form = HomepageMessageForm()
if form.validate_on_submit():
# The UI prompt ("prevent") is the opposite of the setting ("allow"):
message_enabled = form.message_enabled.data

if form.message_title.data:
message_title = form.message_title.data
# TODO: more processing here or is form validation enough?
else:
message_title = ""

if form.message_text.data:
message_text = form.message_text.data
# TODO: more processing here or is form validation enough?
else:
message_title = ""

InstanceConfig.update_homepage_message(message_enabled, message_title, message_text)
flash(gettext("Preferences saved."), "homepage-message-success")
return redirect(url_for("admin.manage_config") + "#config-homepage-message")
else:
for field, errors in list(form.errors.items()):
for error in errors:
flash(
gettext("Preferences not updated.") + " " + error,
"homepage-message-error",
)
return redirect(url_for("admin.manage_config") + "#config-homepage-message")

@view.route("/update-org-name", methods=["POST"])
@admin_required
def update_org_name() -> Union[str, werkzeug.Response]:
Expand Down
30 changes: 30 additions & 0 deletions securedrop/journalist_templates/config.html
Original file line number Diff line number Diff line change
Expand Up @@ -53,6 +53,36 @@ <h2 id="config-logoimage">{{ gettext('Logo Image') }}</h2>
</form>
</section>

<section aria-labelledby="config-homepage-message">
<h2 id="config-homepage-message">{{ gettext('Homepage Message') }}</h2>

<form action="{{ url_for('admin.update_homepage_message') }}" method="post">
<input name="csrf_token" type="hidden" value="{{ csrf_token() }}">
<div class="config_form_element">
{{ homepage_message_form.message_enabled() }}
<label
for="message_enabled">{{ gettext('Enable Source Interface homepage message') }}</label>
</div>
<div><label
for=message_title">{{ gettext('Set the homepage message title:') }}</label>
</div>
<div>{{ homepage_message_form.message_title() }}</div>

<div><label
for=message_text">{{ gettext('Set the homepage message:') }}</label>
</div>
<div>{{ homepage_message_form.message_text() }}</div>
<div class="section-spacing">
<button type="submit" id="submit-update-homepage_message" class="icon icon-edit"
aria-label="{{ gettext('Set Homepage Message') }}">
{{ gettext('SET Homepage Message') }}
</button>
</div>
{% set prefs_filter = ["homepage-message-error","homepage-message-success"] %}
{% include 'preferences_saved_flash.html' %}
</form>
</section>

<section aria-labelledby="config-preventuploads">
<h2 id="config-preventuploads">{{ gettext('Submission Preferences') }}</h2>

Expand Down
30 changes: 15 additions & 15 deletions securedrop/models.py
Original file line number Diff line number Diff line change
Expand Up @@ -863,9 +863,9 @@ class InstanceConfig(db.Model):
# Limits length of org name used in SI and JI titles, image alt texts etc.
MAX_ORG_NAME_LEN = 64

# Limits length of site messages
MAX_SITE_MSG_TITLE_LEN = 64
MAX_SITE_MSG_LEN = 512
# Limits length of homepage messages
MAX_HOMEPAGE_MSG_TITLE_LEN = 64
MAX_HOMEPAGE_MSG_LEN = 512

__tablename__ = "instance_config"
version = Column(Integer, primary_key=True)
Expand All @@ -882,9 +882,9 @@ class InstanceConfig(db.Model):
Boolean, nullable=False, default=False, server_default="0"
)

site_msg_enabled = Column(Boolean, default=False)
site_msg_title = Column(String(255), nullable=True, default="")
site_msg_text = Column(String(MAX_SITE_MSG_LEN), nullable=True, default="")
homepage_msg_enabled = Column(Boolean, default=False)
homepage_msg_title = Column(String(255), nullable=False, default="")
homepage_msg_text = Column(String(MAX_HOMEPAGE_MSG_LEN), nullable=False, default="")

# Columns not listed here will be included by InstanceConfig.copy() when
# updating the configuration.
Expand All @@ -902,9 +902,9 @@ def __repr__(self) -> str:
self.organization_name,
self.initial_message_min_len,
self.reject_message_with_codename,
self.site_msg_enabled,
self.site_msg_title,
self.site_msg_txt,
self.homepage_msg_enabled,
self.homepage_msg_title,
self.homepage_msg_txt,
)
)

Expand Down Expand Up @@ -974,21 +974,21 @@ def set_organization_name(cls, name: str) -> None:
db.session.commit()

@classmethod
def update_site_msg_prefs(cls, msg_enabled: bool, msg_title: str, msg_text: str) -> None:
def update_homepage_message(cls, msg_enabled: bool, msg_title: str, msg_text: str) -> None:
old = cls.get_current()
old.valid_until = datetime.datetime.utcnow()
db.session.add(old)

new = old.copy()
new.site_msg_enabled = msg_enabled
if len(msg_title) > cls.MAX_SITE_MSG_TITLE_LEN:
new.homepage_msg_enabled = msg_enabled
if len(msg_title) > cls.MAX_HOMEPAGE_MSG_TITLE_LEN:
raise InvalidNameLength()
else:
new.site_msg_title = msg_title
if len(msg_text) > cls.MAX_SITE_MSG_LEN:
new.homepage_msg_title = msg_title
if len(msg_text) > cls.MAX_HOMEPAGE_MSG_LEN:
raise InvalidNameLength()
else:
new.site_msg_text = msg_text
new.homepage_msg_text = msg_text

db.session.add(new)

Expand Down

0 comments on commit 4c76ae3

Please sign in to comment.