Spaces:
Running
on
CPU Upgrade
Running
on
CPU Upgrade
sachin
commited on
Commit
·
4bf5083
1
Parent(s):
863d782
test-new endpo
Browse files- Dockerfile +0 -6
- Dockerfile.app +0 -24
- Dockerfile.base +7 -0
- src/server/utils/auth.py +27 -7
Dockerfile
CHANGED
@@ -6,12 +6,6 @@ WORKDIR /app
|
|
6 |
# Copy application code
|
7 |
COPY . .
|
8 |
|
9 |
-
# Create appuser and set permissions for /app and /data
|
10 |
-
RUN useradd -ms /bin/bash appuser \
|
11 |
-
&& mkdir -p /data \
|
12 |
-
&& chown -R appuser:appuser /app /data
|
13 |
-
|
14 |
-
USER appuser
|
15 |
|
16 |
# Expose port from settings
|
17 |
EXPOSE 7860
|
|
|
6 |
# Copy application code
|
7 |
COPY . .
|
8 |
|
|
|
|
|
|
|
|
|
|
|
|
|
9 |
|
10 |
# Expose port from settings
|
11 |
EXPOSE 7860
|
Dockerfile.app
DELETED
@@ -1,24 +0,0 @@
|
|
1 |
-
# Use official Python runtime as base image
|
2 |
-
FROM slabstech/dhwani-api-server-base
|
3 |
-
|
4 |
-
WORKDIR /app
|
5 |
-
|
6 |
-
# Copy application code
|
7 |
-
COPY . .
|
8 |
-
|
9 |
-
# Create appuser and set permissions for /app and /data
|
10 |
-
RUN useradd -ms /bin/bash appuser \
|
11 |
-
&& mkdir -p /data \
|
12 |
-
&& chown -R appuser:appuser /app /data
|
13 |
-
|
14 |
-
USER appuser
|
15 |
-
|
16 |
-
# Expose port from settings
|
17 |
-
EXPOSE 7860
|
18 |
-
|
19 |
-
# Healthcheck
|
20 |
-
HEALTHCHECK --interval=30s --timeout=3s \
|
21 |
-
CMD curl -f http://localhost:7860/v1/health || exit 1
|
22 |
-
|
23 |
-
# Command to run the application
|
24 |
-
CMD ["python", "/app/src/server/main.py", "--host", "0.0.0.0", "--port", "7860"]
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Dockerfile.base
CHANGED
@@ -16,3 +16,10 @@ RUN apt-get update && apt-get install -y \
|
|
16 |
# Install Python dependencies
|
17 |
COPY requirements.txt .
|
18 |
RUN pip install --no-cache-dir -r requirements.txt
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
16 |
# Install Python dependencies
|
17 |
COPY requirements.txt .
|
18 |
RUN pip install --no-cache-dir -r requirements.txt
|
19 |
+
|
20 |
+
# Create appuser and set permissions for /app and /data
|
21 |
+
RUN useradd -ms /bin/bash appuser \
|
22 |
+
&& mkdir -p /data \
|
23 |
+
&& chown -R appuser:appuser /app /data
|
24 |
+
|
25 |
+
USER appuser
|
src/server/utils/auth.py
CHANGED
@@ -49,7 +49,7 @@ class Settings(BaseSettings):
|
|
49 |
external_audio_proc_url: str = Field(..., env="EXTERNAL_AUDIO_PROC_URL")
|
50 |
default_admin_username: str = Field("admin", env="DEFAULT_ADMIN_USERNAME")
|
51 |
default_admin_password: str = Field("admin54321", env="DEFAULT_ADMIN_PASSWORD")
|
52 |
-
database_path: str = DATABASE_PATH
|
53 |
|
54 |
class Config:
|
55 |
env_file = ".env"
|
@@ -61,10 +61,12 @@ settings = Settings()
|
|
61 |
def seed_initial_data():
|
62 |
db = SessionLocal()
|
63 |
try:
|
64 |
-
# Seed test user (non-admin)
|
65 |
-
|
66 |
-
|
67 |
-
|
|
|
|
|
68 |
db.commit()
|
69 |
# Seed admin user using environment variables
|
70 |
admin_username = settings.default_admin_username
|
@@ -73,7 +75,7 @@ def seed_initial_data():
|
|
73 |
hashed_password = pwd_context.hash(admin_password)
|
74 |
db.add(User(username=admin_username, password=hashed_password, is_admin=True))
|
75 |
db.commit()
|
76 |
-
logger.info(f"Seeded initial data: admin user '{admin_username}'")
|
77 |
except Exception as e:
|
78 |
logger.error(f"Error seeding initial data: {str(e)}")
|
79 |
db.rollback()
|
@@ -170,7 +172,7 @@ async def login(login_request: LoginRequest) -> TokenResponse:
|
|
170 |
db.close()
|
171 |
if not user or not pwd_context.verify(login_request.password, user.password):
|
172 |
logger.warning(f"Login failed for user: {login_request.username}")
|
173 |
-
raise HTTPException(status_code=status.HTTP_401_UNAUTHORIZED, detail="Invalid
|
174 |
tokens = await create_access_token(user_id=user.username)
|
175 |
return TokenResponse(access_token=tokens["access_token"], refresh_token=tokens["refresh_token"], token_type="bearer")
|
176 |
|
@@ -192,6 +194,24 @@ async def register(register_request: RegisterRequest, current_user: str = Depend
|
|
192 |
logger.info(f"Registered and generated token for user: {register_request.username} by admin {current_user}")
|
193 |
return TokenResponse(access_token=tokens["access_token"], refresh_token=tokens["refresh_token"], token_type="bearer")
|
194 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
195 |
async def refresh_token(credentials: HTTPAuthorizationCredentials = Depends(bearer_scheme)) -> TokenResponse:
|
196 |
token = credentials.credentials
|
197 |
try:
|
|
|
49 |
external_audio_proc_url: str = Field(..., env="EXTERNAL_AUDIO_PROC_URL")
|
50 |
default_admin_username: str = Field("admin", env="DEFAULT_ADMIN_USERNAME")
|
51 |
default_admin_password: str = Field("admin54321", env="DEFAULT_ADMIN_PASSWORD")
|
52 |
+
database_path: str = DATABASE_PATH
|
53 |
|
54 |
class Config:
|
55 |
env_file = ".env"
|
|
|
61 |
def seed_initial_data():
|
62 |
db = SessionLocal()
|
63 |
try:
|
64 |
+
# Seed test user (non-admin) with a device token-like password
|
65 |
+
test_username = "testuser@example.com"
|
66 |
+
if not db.query(User).filter_by(username=test_username).first():
|
67 |
+
test_device_token = "550e8400-e29b-41d4-a716-446655440000" # Sample UUID
|
68 |
+
hashed_password = pwd_context.hash(test_device_token)
|
69 |
+
db.add(User(username=test_username, password=hashed_password, is_admin=False))
|
70 |
db.commit()
|
71 |
# Seed admin user using environment variables
|
72 |
admin_username = settings.default_admin_username
|
|
|
75 |
hashed_password = pwd_context.hash(admin_password)
|
76 |
db.add(User(username=admin_username, password=hashed_password, is_admin=True))
|
77 |
db.commit()
|
78 |
+
logger.info(f"Seeded initial data: test user '{test_username}', admin user '{admin_username}'")
|
79 |
except Exception as e:
|
80 |
logger.error(f"Error seeding initial data: {str(e)}")
|
81 |
db.rollback()
|
|
|
172 |
db.close()
|
173 |
if not user or not pwd_context.verify(login_request.password, user.password):
|
174 |
logger.warning(f"Login failed for user: {login_request.username}")
|
175 |
+
raise HTTPException(status_code=status.HTTP_401_UNAUTHORIZED, detail="Invalid email or device token")
|
176 |
tokens = await create_access_token(user_id=user.username)
|
177 |
return TokenResponse(access_token=tokens["access_token"], refresh_token=tokens["refresh_token"], token_type="bearer")
|
178 |
|
|
|
194 |
logger.info(f"Registered and generated token for user: {register_request.username} by admin {current_user}")
|
195 |
return TokenResponse(access_token=tokens["access_token"], refresh_token=tokens["refresh_token"], token_type="bearer")
|
196 |
|
197 |
+
async def app_register(register_request: RegisterRequest) -> TokenResponse:
|
198 |
+
db = SessionLocal()
|
199 |
+
existing_user = db.query(User).filter_by(username=register_request.username).first()
|
200 |
+
if existing_user:
|
201 |
+
db.close()
|
202 |
+
logger.warning(f"App registration failed: Email {register_request.username} already exists")
|
203 |
+
raise HTTPException(status_code=status.HTTP_400_BAD_REQUEST, detail="Email already registered")
|
204 |
+
|
205 |
+
hashed_password = pwd_context.hash(register_request.password)
|
206 |
+
new_user = User(username=register_request.username, password=hashed_password, is_admin=False)
|
207 |
+
db.add(new_user)
|
208 |
+
db.commit()
|
209 |
+
db.close()
|
210 |
+
|
211 |
+
tokens = await create_access_token(user_id=register_request.username)
|
212 |
+
logger.info(f"App registered new user: {register_request.username}")
|
213 |
+
return TokenResponse(access_token=tokens["access_token"], refresh_token=tokens["refresh_token"], token_type="bearer")
|
214 |
+
|
215 |
async def refresh_token(credentials: HTTPAuthorizationCredentials = Depends(bearer_scheme)) -> TokenResponse:
|
216 |
token = credentials.credentials
|
217 |
try:
|