oncall-engine/engine/apps/mattermost/utils.py
Matias Bordese dcae98b02a
feat: add support for mattermost chatops (#5321)
Related to https://github.com/grafana/oncall/issues/96

---------

Co-authored-by: Ravishankar <ravishankar.gnanaprakasam@gmail.com>
2025-04-21 14:23:37 -03:00

38 lines
1.2 KiB
Python

import datetime
import logging
import typing
import jwt
from django.conf import settings
from django.utils import timezone
from apps.mattermost.exceptions import MattermostEventTokenInvalid
if typing.TYPE_CHECKING:
from apps.user_management.models import Organization
logger = logging.getLogger(__name__)
logger.setLevel(logging.DEBUG)
class MattermostEventAuthenticator:
@staticmethod
def create_token(organization: typing.Optional["Organization"]):
secret = settings.MATTERMOST_SIGNING_SECRET
expiration = timezone.now() + datetime.timedelta(days=30)
payload = {
"organization_id": organization.public_primary_key,
"exp": expiration,
}
token = jwt.encode(payload, secret, algorithm="HS256")
return token
@staticmethod
def verify(token: str):
secret = settings.MATTERMOST_SIGNING_SECRET
try:
payload = jwt.decode(token, secret, algorithms="HS256")
return payload
except jwt.InvalidTokenError as e:
logger.error(f"Error while verifying mattermost token {e}")
raise MattermostEventTokenInvalid(msg="Invalid token from mattermost server")