Compare commits
14 Commits
3857edd6c5
...
5c0d2064a4
| Author | SHA1 | Date | |
|---|---|---|---|
| 5c0d2064a4 | |||
|
|
c5507dd5a3 | ||
| 098b6a8e5b | |||
|
|
6ad4d1694b | ||
|
|
849ac3bb1d | ||
|
|
5abb2a16ec | ||
|
|
a2b3e4e1aa | ||
| 34c1ad1da9 | |||
|
|
8e789644b4 | ||
| 9a7fa21df4 | |||
| e6b358e5d8 | |||
|
|
77a37da90f | ||
| 7b923c1702 | |||
|
|
9f8892a8a9 |
@ -18,4 +18,6 @@ data:
|
||||
MONGODB_PORT: {{ .Values.authentication.configs.mongodbPort | toString | b64enc }}
|
||||
METRICS_ENABLED: {{ .Values.authentication.configs.metricsEnabled | default false | toString | b64enc }}
|
||||
PROBES_ENABLED: {{ .Values.authentication.configs.probesEnabled | default false | toString | b64enc }}
|
||||
FREELEAPS_PRODUCT_ID: {{ .Values.authentication.configs.freeleapsProductId | b64enc | quote }}
|
||||
ENVIRONMENT: {{ .Values.authentication.configs.environment | b64enc | quote }}
|
||||
|
||||
@ -15,7 +15,7 @@ authentication:
|
||||
registry: docker.io
|
||||
repository: null
|
||||
name: 6901bcf4ed3725f39f11343d-authentication
|
||||
tag: snapshot-e6b358e
|
||||
tag: snapshot-a2b3e4e
|
||||
imagePullPolicy: IfNotPresent
|
||||
ports:
|
||||
- name: http
|
||||
@ -89,6 +89,8 @@ authentication:
|
||||
mongodbPort: 27017
|
||||
metricsEnabled: 'false'
|
||||
probesEnabled: 'true'
|
||||
freeleapsProductId: 6901bcf4ed3725f39f11343d
|
||||
environment: alpha
|
||||
secrets:
|
||||
secretStoreRef:
|
||||
kind: FreeleapsSecretStore
|
||||
|
||||
@ -18,7 +18,7 @@ authentication:
|
||||
registry: docker.io
|
||||
repository: null
|
||||
name: 6901bcf4ed3725f39f11343d-authentication
|
||||
tag: snapshot-8584f90
|
||||
tag: snapshot-5abb2a1
|
||||
imagePullPolicy: IfNotPresent
|
||||
ports:
|
||||
- name: http
|
||||
@ -97,6 +97,8 @@ authentication:
|
||||
mongodbPort: 27017
|
||||
metricsEnabled: 'true'
|
||||
probesEnabled: 'true'
|
||||
freeleapsProductId: 6901bcf4ed3725f39f11343d
|
||||
environment: prod
|
||||
secrets:
|
||||
secretStoreRef:
|
||||
kind: FreeleapsSecretStore
|
||||
|
||||
@ -82,6 +82,8 @@ authentication:
|
||||
metricsEnabled: "false"
|
||||
# PROBES_ENABLED
|
||||
probesEnabled: "false"
|
||||
freeleapsProductId: ""
|
||||
environment: alpha
|
||||
# AKV secrets configuration
|
||||
secrets:
|
||||
secretStoreRef:
|
||||
|
||||
@ -7,7 +7,7 @@ metadata:
|
||||
spec:
|
||||
layout: FAST_API_VUE_3
|
||||
serviceName: freeleaps-authentication
|
||||
executeMode: fully
|
||||
executeMode: on-demand
|
||||
branch: main
|
||||
components:
|
||||
- name: authentication
|
||||
|
||||
@ -25,6 +25,9 @@ ENV LOG_BASE_PATH=$CONTAINER_APP_ROOT/log/$APP_NAME
|
||||
ENV BACKEND_LOG_FILE_NAME=$APP_NAME
|
||||
ENV APPLICATION_ACTIVITY_LOG=$APP_NAME-activity
|
||||
|
||||
ENV FREELEAPS_PRODUCT_ID="6901bcf4ed3725f39f11343d"
|
||||
ENV ENVIRONMENT="alpha"
|
||||
|
||||
|
||||
WORKDIR ${CONTAINER_APP_ROOT}
|
||||
COPY requirements.txt .
|
||||
|
||||
@ -118,7 +118,7 @@ class RoleHandler:
|
||||
raise RequestValidationError("Role with the provided ID already exists.")
|
||||
new_doc.id = custom_role_id
|
||||
|
||||
await new_doc.insert()
|
||||
await new_doc.create()
|
||||
return new_doc
|
||||
|
||||
async def query_roles(self, role_key: Optional[str], role_name: Optional[str], skip: int = 0, limit: int = 10) -> \
|
||||
|
||||
@ -36,7 +36,7 @@ class UserRoleHandler:
|
||||
user_id=user_id,
|
||||
role_ids=unique_role_ids
|
||||
)
|
||||
await user_role_doc.insert()
|
||||
await user_role_doc.create()
|
||||
return user_role_doc
|
||||
|
||||
async def get_role_and_permission_by_user_id(self, user_id: str) -> tuple[list[str], list[str]]:
|
||||
|
||||
@ -3,6 +3,7 @@ BaseDoc - A custom document class that provides Beanie-like interface using dire
|
||||
"""
|
||||
import asyncio
|
||||
from datetime import datetime, timezone
|
||||
from bson import ObjectId
|
||||
from typing import Optional, List, Dict, Any, Type, Union
|
||||
from motor.motor_asyncio import AsyncIOMotorClient, AsyncIOMotorDatabase
|
||||
from pydantic import BaseModel
|
||||
@ -282,6 +283,14 @@ class BaseDoc(BaseModel, metaclass=QueryModelMeta):
|
||||
# Convert Decimal objects to float for MongoDB compatibility
|
||||
doc_dict = self._convert_decimals_to_float(doc_dict)
|
||||
|
||||
# Respect pre-populated id by mapping to MongoDB _id
|
||||
id_value = getattr(self, 'id', None)
|
||||
if id_value and not isinstance(id_value, QueryExpression):
|
||||
try:
|
||||
doc_dict['_id'] = ObjectId(id_value)
|
||||
except Exception:
|
||||
doc_dict['_id'] = id_value
|
||||
|
||||
result = await collection.insert_one(doc_dict)
|
||||
|
||||
# Set the id field from the inserted document
|
||||
@ -314,7 +323,18 @@ class BaseDoc(BaseModel, metaclass=QueryModelMeta):
|
||||
elif hasattr(self, 'auth_code'):
|
||||
query['auth_code'] = self.auth_code
|
||||
|
||||
if query:
|
||||
id_value = getattr(self, 'id', None)
|
||||
if id_value and not isinstance(id_value, QueryExpression):
|
||||
# Update by primary key when available
|
||||
try:
|
||||
object_id = ObjectId(id_value)
|
||||
except Exception:
|
||||
object_id = id_value
|
||||
|
||||
result = await collection.update_one({"_id": object_id}, {"$set": doc_dict}, upsert=True)
|
||||
if result.upserted_id:
|
||||
self.id = str(result.upserted_id)
|
||||
elif query:
|
||||
# Update existing document
|
||||
result = await collection.update_one(query, {"$set": doc_dict}, upsert=True)
|
||||
# If it was an insert, set the id field
|
||||
|
||||
@ -30,6 +30,9 @@ class AppSettings(BaseSettings):
|
||||
BACKEND_LOG_FILE_NAME: str = APP_NAME
|
||||
APPLICATION_ACTIVITY_LOG: str = APP_NAME + "-application-activity"
|
||||
|
||||
FREELEAPS_PRODUCT_ID: str = ""
|
||||
ENVIRONMENT: str = ""
|
||||
|
||||
class Config:
|
||||
env_file = ".myapp.env"
|
||||
env_file_encoding = "utf-8"
|
||||
|
||||
@ -2,12 +2,14 @@ import logging
|
||||
from prometheus_fastapi_instrumentator import Instrumentator
|
||||
from common.config.app_settings import app_settings
|
||||
|
||||
def register(app):
|
||||
instrumentator = Instrumentator().instrument(app,
|
||||
metric_namespace="freeleaps",
|
||||
metric_subsystem=app_settings.APP_NAME)
|
||||
|
||||
@app.on_event("startup")
|
||||
async def startup():
|
||||
instrumentator.expose(app, endpoint="/api/_/metrics", should_gzip=True)
|
||||
logging.info("Metrics endpoint exposed at /api/_/metrics")
|
||||
def register(app):
|
||||
instrumentator = Instrumentator().instrument(
|
||||
app,
|
||||
metric_namespace="freeleaps_{}".format(app_settings.FREELEAPS_PRODUCT_ID),
|
||||
metric_subsystem=app_settings.ENVIRONMENT)
|
||||
|
||||
@app.on_event("startup")
|
||||
async def startup():
|
||||
instrumentator.expose(app, endpoint="/api/_/metrics", should_gzip=True)
|
||||
logging.info("Metrics endpoint exposed at /api/_/metrics")
|
||||
|
||||
Loading…
Reference in New Issue
Block a user