Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion opentakserver/blueprints/marti_api/mission_marti_api.py
Original file line number Diff line number Diff line change
Expand Up @@ -2041,7 +2041,7 @@ def mission_contents(mission_name: str | None = None, mission_guid: str | None =
)


@mission_marti_api.route("/Marti/api/missions/gui/<mission_guid>/contents", methods=["DELETE"])
@mission_marti_api.route("/Marti/api/missions/guid/<mission_guid>/contents", methods=["DELETE"])
@mission_marti_api.route("/Marti/api/missions/<mission_name>/contents", methods=["DELETE"])
def delete_content(mission_name: str | None = None, mission_guid: str | None = None):
if "iTAK" not in request.user_agent.string:
Expand Down
20 changes: 15 additions & 5 deletions opentakserver/blueprints/ots_api/api.py
Original file line number Diff line number Diff line change
Expand Up @@ -18,7 +18,7 @@
from flask_babel import gettext
from flask_ldap3_login import AuthenticationResponseStatus
from flask_security import auth_required, current_user, verify_password
from sqlalchemy import select
from sqlalchemy import String, Text, Unicode, UnicodeText, func, select

from opentakserver import __version__ as version
from opentakserver.certificate_authority import CertificateAuthority
Expand Down Expand Up @@ -68,10 +68,20 @@ def paginate(query: db.Query, model=None):
if model:
sort_by = request.args.get("sort_by")
sort_direction = request.args.get("sort_direction")
if sort_by and (sort_direction == "asc" or not sort_direction):
query = query.order_by(getattr(model, sort_by).asc())
elif sort_by and sort_direction == "desc":
query = query.order_by(getattr(model, sort_by).desc())
if sort_by:
column = getattr(model, sort_by)
# Sort string columns case-insensitively so "alice" sorts next
# to "Alice" instead of after every uppercase entry (Postgres
# default collation is byte-ordered: Z < a).
try:
is_string_col = isinstance(column.type, (String, Text, Unicode, UnicodeText))
except AttributeError:
is_string_col = False
sort_expr = func.lower(column) if is_string_col else column
if sort_direction == "desc":
query = query.order_by(sort_expr.desc())
else:
query = query.order_by(sort_expr.asc())
except BaseException as e:
return (
jsonify(
Expand Down
1 change: 1 addition & 0 deletions opentakserver/defaultconfig.py
Original file line number Diff line number Diff line change
Expand Up @@ -28,6 +28,7 @@ class DefaultConfig:
"CN": {"name": "简化字", "language_code": "zh_Hans"},
"SE": {"name": "Svenska", "language_code": "sv"},
"TH": {"name": "ภาษาไทย", "language_code": "th"},
"HU": {"name": "Magyar", "language_code": "hu"},
}

OTS_DATA_FOLDER = os.getenv("OTS_DATA_FOLDER", os.path.join(Path.home(), "ots"))
Expand Down
2 changes: 1 addition & 1 deletion opentakserver/eud_handler/eud_handler.py
Original file line number Diff line number Diff line change
Expand Up @@ -16,7 +16,7 @@

from opentakserver.defaultconfig import DefaultConfig
from opentakserver.EmailValidator import EmailValidator
from opentakserver.eud_handler import EudHandler
from opentakserver.eud_handler.EudHandler import EudHandler
from opentakserver.eud_handler.EudHandlerSSL import EudHandlerSSL
from opentakserver.eud_handler.EudServer import EudServer
from opentakserver.eud_handler.EudServerSSL import EudServerSSL
Expand Down
Loading
Loading