Skip to content

Commit 8063378

Browse files
--update backend core
1 parent 04cb117 commit 8063378

14 files changed

Lines changed: 163 additions & 167 deletions

File tree

apps/backend-core/config/settings/base.py

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -336,7 +336,7 @@
336336
# Django Admin URL.
337337
ADMIN_URL = "unpod-admin/"
338338
# https://docs.djangoproject.com/en/dev/ref/settings/#admins
339-
ADMINS = [("""Unpod Admin""", "[email protected]")]
339+
ADMINS = []
340340
# https://docs.djangoproject.com/en/dev/ref/settings/#managers
341341
MANAGERS = ADMINS
342342

@@ -551,7 +551,7 @@
551551
SITEMAP_DIR = ROOT_DIR / "sitemaps"
552552
AWS_SITEMAP_DIR = "sitemaps"
553553

554-
DAILY_REPORT_EMAILS = ["Unpod Admin <[email protected]>"]
554+
DAILY_REPORT_EMAILS = []
555555

556556
os.environ["OAUTHLIB_RELAX_TOKEN_SCOPE"] = "1"
557557

apps/backend-core/config/settings/production.py

Lines changed: 16 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -19,15 +19,14 @@
1919

2020
ENV_NAME = "Prod"
2121

22-
BASE_URL = os.environ.get("BASE_URL", "https://unpod.ai")
23-
24-
BASE_FRONTEND_URL = os.environ.get("BASE_FRONTEND_URL", "https://unpod.ai")
22+
BASE_URL = os.environ.get("BASE_URL")
23+
BASE_FRONTEND_URL = os.environ.get("BASE_FRONTEND_URL")
2524

2625

2726
CACHES = {
2827
"default": {
2928
"BACKEND": "django_redis.cache.RedisCache",
30-
"LOCATION": env("REDIS_URL", default="redis://157.245.151.185:6379/1"),
29+
"LOCATION": env("REDIS_URL"),
3130
"OPTIONS": {
3231
"CLIENT_CLASS": "django_redis.client.DefaultClient",
3332
"IGNORE_EXCEPTIONS": True,
@@ -37,13 +36,13 @@
3736

3837
DATABASES = {
3938
"default": {
40-
"ENGINE": env("DB_ENGINE", default="django.db.backends.postgresql"),
41-
"NAME": env("POSTGRES_DB", default="unpod_prod"),
39+
"ENGINE": env("DB_ENGINE"),
40+
"NAME": env("POSTGRES_DB"),
4241
"USER": env("POSTGRES_USER"),
4342
"PASSWORD": env("POSTGRES_PASSWORD"),
4443
"HOST": env("POSTGRES_HOST"),
4544
"PORT": env("POSTGRES_PORT", default="5432"),
46-
"CONN_MAX_AGE": env.int("CONN_MAX_AGE", default=60),
45+
"CONN_MAX_AGE": env.int("POSTGRES_CONN_MAX_AGE", default=60),
4746
"CONN_HEALTH_CHECKS": True, # Django 5.1+ - detects stale connections to prevent 504s
4847
"ATOMIC_REQUESTS": True,
4948
}
@@ -123,7 +122,7 @@
123122

124123
ssl._create_default_https_context = ssl._create_unverified_context
125124

126-
DEFAULT_FROM_EMAIL = env("DJANGO_DEFAULT_FROM_EMAIL", default="Unpod <[email protected]")
125+
DEFAULT_FROM_EMAIL = env("DJANGO_DEFAULT_FROM_EMAIL")
127126

128127
INSTALLED_APPS += ["anymail"] # noqa F405
129128

@@ -141,16 +140,16 @@
141140
}
142141
}
143142

144-
EMAIL_FROM_ADDRESS = "Unpod <[email protected]>"
143+
EMAIL_FROM_ADDRESS = env("EMAIL_FROM_ADDRESS")
145144

146145
AWS_ACCESS_KEY_ID = env("AWS_ACCESS_KEY_ID")
147146
AWS_SECRET_ACCESS_KEY = env("AWS_SECRET_ACCESS_KEY")
148147

149-
AWS_STORAGE_BUCKET_NAME = env("AWS_STORAGE_BUCKET_NAME", default="unpodbackend")
150-
AWS_S3_REGION_NAME = env("AWS_S3_REGION_NAME", default="ap-south-1")
148+
AWS_STORAGE_BUCKET_NAME = env("AWS_STORAGE_BUCKET_NAME")
149+
AWS_S3_REGION_NAME = env("AWS_S3_REGION_NAME")
151150

152151

153-
INTERNAL_IPS = ["127.0.0.1", "157.245.151.185"]
152+
INTERNAL_IPS = ["127.0.0.1"]
154153

155154
JWT_AUTH.update(
156155
{
@@ -161,9 +160,9 @@
161160
MUX_TOKEN_ID = env("MUX_TOKEN_ID")
162161
MUX_TOKEN_SECRET = env("MUX_TOKEN_SECRET")
163162

164-
SSL_CERT_PATH = "/var/www/unpod-prod/ssl/unpod-tv-chain.pem"
163+
SSL_CERT_PATH = env("SSL_CERT_PATH")
165164

166-
IMAGE_KIT_ENDPOINT = "https://ik.imagekit.io/bethere/unpod"
165+
IMAGE_KIT_ENDPOINT = env("IMAGE_KIT_ENDPOINT")
167166

168167
AGORA_APP_ID = env("AGORA_APP_ID")
169168
AGORA_AUTH_CERTIFICATE = env("AGORA_AUTH_CERTIFICATE")
@@ -176,9 +175,7 @@
176175
AGORA_AWS_VENDOR = 1
177176
AGORA_AWS_REGION = 14
178177
AGORA_AWS_BUCKET = AWS_STORAGE_BUCKET_NAME
179-
AGORA_AWS_RECORDING_FOLDER = env(
180-
"AGORA_AWS_RECORDING_FOLDER", default="recordings"
181-
) # "recording"
178+
AGORA_AWS_RECORDING_FOLDER = env("AGORA_AWS_RECORDING_FOLDER")
182179

183180

184181
AGORA_AUTH = {"username": AGORA_AUTH_ID, "password": AGORA_AUTH_SECRET}
@@ -188,14 +185,11 @@
188185
RAZORPAY_KEY = env("RAZORPAY_KEY")
189186
RAZORPAY_SECERT = env("RAZORPAY_SECRET")
190187

191-
DAILY_REPORT_EMAILS = [
192-
"Anuj Singh <[email protected]>",
193-
"Parvinder Singh <[email protected]>",
194-
]
188+
DAILY_REPORT_EMAILS = []
195189

196190
# MONGO_DB = "messaging_service"
197191
# MONGO_DSN = "mongodb+srv://unpodProd:[email protected]/?retryWrites=true&w=majority&tlsAllowInvalidCertificates=true"
198-
MONGO_DB = env("MONGO_DB", default="messaging_service_prod")
192+
MONGO_DB = env("MONGO_DB")
199193
MONGO_DSN = env("MONGO_DSN")
200194

201195

apps/backend-core/config/settings/qa.py

Lines changed: 13 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -23,17 +23,17 @@
2323

2424
ENV_NAME = "QA"
2525

26-
BASE_URL = os.environ.get("BASE_URL", "https://qa.unpod.tv")
26+
BASE_URL = os.environ.get("BASE_URL")
2727

28-
BASE_FRONTEND_URL = os.environ.get("BASE_FRONTEND_URL", "https://qa2.unpod.tv")
28+
BASE_FRONTEND_URL = os.environ.get("BASE_FRONTEND_URL")
2929

3030
# CACHES
3131
# ------------------------------------------------------------------------------
3232
# https://docs.djangoproject.com/en/dev/ref/settings/#caches
3333
CACHES = {
3434
"default": {
3535
"BACKEND": "django_redis.cache.RedisCache",
36-
"LOCATION": env("REDIS_URL", default="redis://157.245.151.185:6379/1"),
36+
"LOCATION": env("REDIS_URL"),
3737
"OPTIONS": {
3838
"CLIENT_CLASS": "django_redis.client.DefaultClient",
3939
"IGNORE_EXCEPTIONS": True,
@@ -44,7 +44,7 @@
4444
DATABASES = {
4545
"default": {
4646
"ENGINE": "django.db.backends.postgresql",
47-
"NAME": env("POSTGRES_DB", default="unpod_qa"),
47+
"NAME": env("POSTGRES_DB"),
4848
"USER": env("POSTGRES_USER"),
4949
"PASSWORD": env("POSTGRES_PASSWORD"),
5050
"HOST": env("POSTGRES_HOST"),
@@ -63,7 +63,7 @@
6363
# ------------------------------------------------------------------------------
6464
# https://docs.djangoproject.com/en/dev/ref/settings/#email-backend
6565
# EMAIL
66-
DEFAULT_FROM_EMAIL = env("DJANGO_DEFAULT_FROM_EMAIL", default="Unpod <[email protected]")
66+
DEFAULT_FROM_EMAIL = env("DJANGO_DEFAULT_FROM_EMAIL")
6767

6868
INSTALLED_APPS += ["anymail"] # noqa F405
6969

@@ -81,13 +81,13 @@
8181
}
8282
}
8383

84-
EMAIL_FROM_ADDRESS = "Unpod <[email protected]>"
84+
EMAIL_FROM_ADDRESS = env("EMAIL_FROM_ADDRESS")
8585

8686
AWS_ACCESS_KEY_ID = env("AWS_ACCESS_KEY_ID")
8787
AWS_SECRET_ACCESS_KEY = env("AWS_SECRET_ACCESS_KEY")
8888

89-
AWS_STORAGE_BUCKET_NAME = env("AWS_STORAGE_BUCKET_NAME", default="unpodbackend")
90-
AWS_S3_REGION_NAME = env("AWS_S3_REGION_NAME", default="ap-south-1")
89+
AWS_STORAGE_BUCKET_NAME = env("AWS_STORAGE_BUCKET_NAME")
90+
AWS_S3_REGION_NAME = env("AWS_S3_REGION_NAME")
9191

9292
# django-debug-toolbar
9393
# ------------------------------------------------------------------------------
@@ -121,9 +121,9 @@
121121
MUX_TOKEN_ID = env("MUX_TOKEN_ID")
122122
MUX_TOKEN_SECRET = env("MUX_TOKEN_SECRET")
123123

124-
SSL_CERT_PATH = "/var/www/unpod-qa1/ssl/unpod-tv-chain.pem"
124+
SSL_CERT_PATH = env("SSL_CERT_PATH")
125125

126-
IMAGE_KIT_ENDPOINT = "https://ik.imagekit.io/bethere/unpod"
126+
IMAGE_KIT_ENDPOINT = env("IMAGE_KIT_ENDPOINT")
127127

128128
AGORA_APP_ID = env("AGORA_APP_ID")
129129
AGORA_AUTH_CERTIFICATE = env("AGORA_AUTH_CERTIFICATE")
@@ -136,9 +136,7 @@
136136
AGORA_AWS_VENDOR = 1
137137
AGORA_AWS_REGION = 14
138138
AGORA_AWS_BUCKET = AWS_STORAGE_BUCKET_NAME
139-
AGORA_AWS_RECORDING_FOLDER = env(
140-
"AGORA_AWS_RECORDING_FOLDER", default="recordings"
141-
) # "recording"
139+
AGORA_AWS_RECORDING_FOLDER = env("AGORA_AWS_RECORDING_FOLDER")
142140

143141

144142
HMS_S3_BUCKET = AWS_STORAGE_BUCKET_NAME
@@ -152,12 +150,9 @@
152150
RAZORPAY_KEY = env("RAZORPAY_KEY")
153151
RAZORPAY_SECERT = env("RAZORPAY_SECRET")
154152

155-
DAILY_REPORT_EMAILS = [
156-
"Anuj Singh <[email protected]>",
157-
"Parvinder Singh <[email protected]>",
158-
]
153+
DAILY_REPORT_EMAILS = []
159154

160-
MONGO_DB = env("MONGO_DB", default="messaging_service")
155+
MONGO_DB = env("MONGO_DB")
161156
MONGO_DSN = env("MONGO_DSN")
162157

163158
DEEPGRAM_API_KEY = env("DEEPGRAM_API_KEY")

apps/backend-core/unpod/common/helpers/checksum_helper.py

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -83,11 +83,11 @@ def generate_checksum(method: str, url: str, data: Any, timestamp: str, secret:
8383
# Debug logging
8484
import logging
8585
logger = logging.getLogger(__name__)
86-
logger.warning(f"CHECKSUM_CALC method={normalized_method} url={url} data_len={len(serialized_data) if serialized_data else 0}")
86+
# logger.warning(f"CHECKSUM_CALC method={normalized_method} url={url} data_len={len(serialized_data) if serialized_data else 0}")
8787
# Log first 200 bytes as hex for exact comparison
8888
if serialized_data:
8989
hex_preview = serialized_data[:200].encode('utf-8').hex()
90-
logger.warning(f"CHECKSUM_DATA_HEX (first 200 chars): {hex_preview}")
90+
# logger.warning(f"CHECKSUM_DATA_HEX (first 200 chars): {hex_preview}")
9191

9292
# Generate HMAC-SHA256 with secret as key
9393
hmac_obj = hmac.new(

apps/backend-core/unpod/common/management/commands/setup_schedules.py

Lines changed: 2 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -42,14 +42,10 @@ def handle(self, *args, **options):
4242

4343
if created:
4444
created_count += 1
45-
self.stdout.write(
46-
self.style.SUCCESS(f"✓ Created schedule: {name}")
47-
)
45+
self.stdout.write(self.style.SUCCESS(f"✓ Created schedule: {name}"))
4846
else:
4947
updated_count += 1
50-
self.stdout.write(
51-
self.style.SUCCESS(f"✓ Updated schedule: {name}")
52-
)
48+
self.stdout.write(self.style.SUCCESS(f"✓ Updated schedule: {name}"))
5349

5450
self.stdout.write(
5551
self.style.SUCCESS(

apps/backend-core/unpod/common/services/livekit.py

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,10 @@
1+
import time
2+
3+
import jwt
4+
import requests
5+
from django.conf import settings
6+
7+
18
def get_livekit_trunks():
29
url = f"https://{settings.LIVEKIT_BASE}/twirp/livekit.SIP/ListSIPInboundTrunk"
310

apps/backend-core/unpod/common/tests/test_checksum_helper.py

Lines changed: 2 additions & 27 deletions
Original file line numberDiff line numberDiff line change
@@ -3,29 +3,16 @@
33
Tests HMAC-SHA256 checksum generation, validation, and timestamp validation
44
"""
55
from datetime import datetime, timedelta
6-
from unpod.common.helpers.checksum_helper import (
6+
from ..helpers.checksum_helper import (
77
generate_checksum,
88
validate_checksum,
99
get_current_timestamp,
1010
is_timestamp_valid,
1111
should_skip_checksum,
12-
get_relative_url,
12+
extract_request_data,
1313
)
1414

1515

16-
class TestGetRelativeUrl:
17-
"""Test URL prefix stripping"""
18-
19-
def test_strip_v1_prefix(self):
20-
assert get_relative_url("/api/v1/auth/login/") == "auth/login/"
21-
22-
def test_strip_v1_prefix_no_trailing_slash(self):
23-
assert get_relative_url("/api/v1/agents") == "agents"
24-
25-
def test_no_prefix(self):
26-
assert get_relative_url("/other/path/") == "other/path/"
27-
28-
2916
class TestChecksumGeneration:
3017
"""Test checksum generation with different data types"""
3118

@@ -211,23 +198,11 @@ def test_should_skip_admin_paths(self):
211198
assert should_skip_checksum("/admin/users/", "POST") is True
212199
assert should_skip_checksum("/admin/", "GET") is True
213200

214-
def test_should_skip_unpod_admin_paths(self):
215-
"""Test that unpod-admin paths are skipped"""
216-
assert should_skip_checksum("/unpod-admin/", "GET") is True
217-
218201
def test_should_skip_static_paths(self):
219202
"""Test that static/media paths are skipped"""
220203
assert should_skip_checksum("/static/css/style.css", "GET") is True
221204
assert should_skip_checksum("/media/images/photo.jpg", "GET") is True
222205

223-
def test_should_skip_health_check(self):
224-
"""Test that health check paths are skipped"""
225-
assert should_skip_checksum("/health/", "GET") is True
226-
227-
def test_should_skip_multipart_form_data(self):
228-
"""Test that multipart/form-data POST requests are skipped"""
229-
assert should_skip_checksum("/api/v1/upload/", "POST", "multipart/form-data; boundary=---") is True
230-
231206
def test_should_not_skip_api_paths(self):
232207
"""Test that regular API paths are not skipped"""
233208
assert should_skip_checksum("/api/v1/threads/", "POST") is False

apps/backend-core/unpod/core_components/admin.py

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -4,8 +4,9 @@
44
from django.db import transaction
55
from django.utils.safestring import mark_safe
66
from import_export.admin import ImportExportActionModelAdmin
7-
from unpod.common.mixin import UnpodCustomModelAdmin
8-
from unpod.core_components.models import (
7+
from ..common.mixin import UnpodCustomModelAdmin
8+
from ..common.services.livekit import get_livekit_trunks
9+
from .models import (
910
EventsTriggerManager,
1011
ModelType,
1112
MediaResource,
@@ -30,7 +31,6 @@
3031
TelephonyNumber,
3132
)
3233
from .resources import VoiceProfilesResource
33-
from ..common.services.livekit import get_livekit_trunks
3434
from ..common.utils import api_request
3535
from .forms import (
3636
ImportPilotForm,
@@ -67,7 +67,7 @@ def type_with_model_type(self, obj):
6767

6868

6969
@admin.register(TelephonyNumber)
70-
class TelephonyNumberAdmin(UnpodCustomModelAdmin):
70+
class TelephonyNumberAdmin(ImportExportActionModelAdmin, UnpodCustomModelAdmin):
7171
list_display = (
7272
"id",
7373
"number",

0 commit comments

Comments
 (0)