• Home
  • Features
  • Pricing
  • Docs
  • Announcements
  • Sign In

gcivil-nyu-org / fall24-monday-team2 / 469

16 Dec 2024 05:06PM UTC coverage: 73.04% (+0.1%) from 72.939%
469

push

travis-pro

ander9991
finished

13 of 13 new or added lines in 2 files covered. (100.0%)

3 existing lines in 1 file now uncovered.

3056 of 4184 relevant lines covered (73.04%)

0.73 hits per line

Source File
Press 'n' to go to next uncovered line, 'b' for previous

96.3
/FitOn/settings.py
1
import json
1✔
2
import os
1✔
3
import sys
1✔
4
from datetime import timedelta
1✔
5
from pathlib import Path
1✔
6
import boto3
1✔
7

8
# Build paths inside the project like this: BASE_DIR / 'subdir'.
9
BASE_DIR = Path(__file__).resolve().parent.parent
1✔
10

11

12
def get_secrets():
1✔
13
    client = boto3.client("secretsmanager", region_name="us-west-2")
1✔
14
    response = client.get_secret_value(SecretId="googleFit_credentials")
1✔
15
    response = json.loads(response["SecretString"])
1✔
16
    GOOGLEFIT_CLIENT_ID = response.get("GOOGLEFIT_CLIENT_ID")
1✔
17
    GOOGLEFIT_CLIENT_SECRET = response.get("GOOGLEFIT_CLIENT_SECRET")
1✔
18
    return (GOOGLEFIT_CLIENT_ID, GOOGLEFIT_CLIENT_SECRET)
1✔
19

20

21
# def get_aws_secrets():
22
#     client = boto3.client("secretsmanager", region_name="us-west-2")
23
#     response = client.get_secret_value(SecretId="aws_secrets")
24
#     response = json.loads(response["SecretString"])
25
#     AWS_ACCESS_KEY_ID = response.get("AWS_ACCESS_KEY_ID")
26
#     AWS_SECRET_ACCESS_KEY = response.get("AWS_SECRET_ACCESS_KEY")
27
#     return (AWS_ACCESS_KEY_ID, AWS_SECRET_ACCESS_KEY)
28

29

30
def get_aws_secrets():
1✔
31
    client = boto3.client("secretsmanager", region_name="us-west-2")
1✔
32
    response = client.get_secret_value(SecretId="aws_secrets")
1✔
33
    response = json.loads(response["SecretString"])
1✔
34
    AWS_ACCESS_KEY_ID = response.get("AWS_ACCESS_KEY_ID")
1✔
35
    AWS_SECRET_ACCESS_KEY = response.get("AWS_SECRET_ACCESS_KEY")
1✔
36
    return (AWS_ACCESS_KEY_ID, AWS_SECRET_ACCESS_KEY)
1✔
37

38

39
# Quick-start development settings - unsuitable for production
40
# See https://docs.djangoproject.com/en/5.1/howto/deployment/checklist/
41

42
# SECURITY WARNING: keep the secret key used in production secret!
43
SECRET_KEY = "django-insecure-iqw@@a4osoerv=_))5ipw&kthcyr@v55xwz#=sse!13()+s#l_"
1✔
44

45
# SECURITY WARNING: don't run with debug turned on in production!
46
DEBUG = False
1✔
47

48
# For static files
49
IS_PRODUCTION = not DEBUG
1✔
50

51

52
SCOPES = [
1✔
53
    "https://www.googleapis.com/auth/fitness.activity.read",
54
    "https://www.googleapis.com/auth/fitness.body.read",
55
    "https://www.googleapis.com/auth/fitness.heart_rate.read",
56
    "https://www.googleapis.com/auth/fitness.sleep.read",
57
    "https://www.googleapis.com/auth/fitness.blood_glucose.read",
58
    "https://www.googleapis.com/auth/fitness.blood_pressure.read",
59
    "https://www.googleapis.com/auth/fitness.body_temperature.read",
60
    "https://www.googleapis.com/auth/fitness.location.read",
61
    "https://www.googleapis.com/auth/fitness.nutrition.read",
62
    "https://www.googleapis.com/auth/fitness.oxygen_saturation.read",
63
    "https://www.googleapis.com/auth/fitness.reproductive_health.read",
64
]
65

66
GOOGLEFIT_PROJECT_ID = "dulcet-coast-387705"
1✔
67
GOOGLEFIT_TOKEN_URI = "https://accounts.google.com/o/oauth2/token"
1✔
68
GOOGLEFIT_CLIENT_ID = get_secrets()[0]
1✔
69
GOOGLEFIT_CLIENT_SECRET = get_secrets()[1]
1✔
70

71
BASE_URL = (
1✔
72
    "http://127.0.0.1:8000"
73
    if DEBUG
74
    else "http://fiton-dev-without-template.us-west-2.elasticbeanstalk.com"
75
)
76
# BASE_URL = "fiton-dev-without-template.us-west-2.elasticbeanstalk.com"
77

78
REDIRECT_URI = os.getenv("REDIRECT_URL", BASE_URL + "/callback/")
1✔
79

80
GOOGLEFIT_CLIENT_CONFIG = {
1✔
81
    "web": {
82
        "client_id": GOOGLEFIT_CLIENT_ID,
83
        "project_id": GOOGLEFIT_PROJECT_ID,
84
        "auth_uri": "https://accounts.google.com/o/oauth2/auth",
85
        "token_uri": "https://oauth2.googleapis.com/token",
86
        "client_secret": GOOGLEFIT_CLIENT_SECRET,
87
        "redirect_uris": [REDIRECT_URI],
88
    }
89
}
90

91
ALLOWED_HOSTS = ["*"]
1✔
92

93

94
# Application definition
95

96
INSTALLED_APPS = [
1✔
97
    "daphne",
98
    "FitOn",
99
    "django.contrib.admin",
100
    "django.contrib.auth",
101
    "django.contrib.contenttypes",
102
    "django.contrib.sessions",
103
    "django.contrib.messages",
104
    "django.contrib.staticfiles",
105
    "storages",  # Add this line for S3 storage
106
    "channels",
107
]
108

109
MIDDLEWARE = [
1✔
110
    "django.middleware.security.SecurityMiddleware",
111
    "django.contrib.sessions.middleware.SessionMiddleware",
112
    "django.middleware.common.CommonMiddleware",
113
    # "django.middleware.csrf.CsrfViewMiddleware",
114
    "django.contrib.auth.middleware.AuthenticationMiddleware",
115
    "django.contrib.messages.middleware.MessageMiddleware",
116
    "django.middleware.clickjacking.XFrameOptionsMiddleware",
117
]
118

119
ROOT_URLCONF = "FitOn.urls"
1✔
120

121
TEMPLATES = [
1✔
122
    {
123
        "BACKEND": "django.template.backends.django.DjangoTemplates",
124
        "DIRS": [BASE_DIR / "FitOn" / "templates"],
125
        "APP_DIRS": True,
126
        "OPTIONS": {
127
            "context_processors": [
128
                "django.template.context_processors.debug",
129
                "django.template.context_processors.request",
130
                "django.contrib.auth.context_processors.auth",
131
                "django.contrib.messages.context_processors.messages",
132
                "FitOn.context_processors.user_context",
133
            ],
134
        },
135
    },
136
]
137

138
WSGI_APPLICATION = "FitOn.wsgi.application"
1✔
139

140
ASGI_APPLICATION = "FitOn.asgi.application"
1✔
141

142
# Websocket protocol
143
if DEBUG:
1✔
UNCOV
144
    WEBSOCKET_PROTOCOL = "ws://"
×
145
else:
146
    WEBSOCKET_PROTOCOL = ["wss://", "ws://"]
1✔
147

148
# Force HTTPS in production
149
if not DEBUG:
1✔
150
    # SECURE_SSL_REDIRECT = True
151
    SECURE_PROXY_SSL_HEADER = ("HTTP_X_FORWARDED_PROTO", "https")
1✔
152

153
CHANNEL_LAYERS = {
1✔
154
    "default": {
155
        "BACKEND": "channels.layers.InMemoryChannelLayer",
156
    },
157
}
158

159
# Session settings
160
SESSION_ENGINE = "django.contrib.sessions.backends.signed_cookies"
1✔
161
SESSION_COOKIE_HTTPONLY = True
1✔
162
SESSION_COOKIE_NAME = "fiton_session"
1✔
163

164
# Database
165
# https://docs.djangoproject.com/en/5.1/ref/settings/#databases
166

167
DATABASES = {
1✔
168
    "default": {
169
        "ENGINE": "django.db.backends.sqlite3",
170
        "NAME": BASE_DIR / "db.sqlite3",
171
    }
172
}
173

174
# SESSION_ENGINE = "django_dynamodb_sessions.backends.dynamodb"
175
# DYNAMODB_SESSIONS_TABLE_NAME = 'django-user-sessions'
176
# SESSION_SAVE_EVERY_REQUEST = True
177

178
# Password validation
179
# https://docs.djangoproject.com/en/5.1/ref/settings/#auth-password-validators
180

181
AUTH_PASSWORD_VALIDATORS = [
1✔
182
    {
183
        "NAME": "django.contrib.auth.password_validation.UserAttributeSimilarityValidator",
184
    },
185
    {
186
        "NAME": "django.contrib.auth.password_validation.MinimumLengthValidator",
187
    },
188
    {
189
        "NAME": "django.contrib.auth.password_validation.CommonPasswordValidator",
190
    },
191
    {
192
        "NAME": "django.contrib.auth.password_validation.NumericPasswordValidator",
193
    },
194
]
195

196

197
# Internationalization
198
# https://docs.djangoproject.com/en/5.1/topics/i18n/
199

200
LANGUAGE_CODE = "en-us"
1✔
201

202
TIME_ZONE = "EST"
1✔
203

204
USE_I18N = True
1✔
205

206
USE_TZ = True
1✔
207

208

209
# AWS S3 settings
210
AWS_ACCESS_KEY_ID = get_aws_secrets()[0]
1✔
211
AWS_SECRET_ACCESS_KEY = get_aws_secrets()[1]
1✔
212
AWS_STORAGE_BUCKET_NAME = "fiton-static-files"
1✔
213
AWS_S3_REGION_NAME = "us-west-2"
1✔
214

215
AWS_S3_CUSTOM_DOMAIN = f"{AWS_STORAGE_BUCKET_NAME}.s3.amazonaws.com"
1✔
216
AWS_DEFAULT_ACL = None
1✔
217
AWS_S3_OBJECT_PARAMETERS = {
1✔
218
    "CacheControl": "max-age=86400",
219
}
220

221
AWS_LOCATION = "static"
1✔
222

223
# Static files (CSS, JavaScript, Images)
224

225
if IS_PRODUCTION:
1✔
226
    # STATIC_ROOT = os.path.join(BASE_DIR, "static")
227
    STATIC_URL = f"https://{AWS_S3_CUSTOM_DOMAIN}/{AWS_LOCATION}/"
1✔
228
    STATICFILES_STORAGE = "storages.backends.s3boto3.S3Boto3Storage"
1✔
229
else:
UNCOV
230
    STATIC_URL = "/static/"
×
UNCOV
231
    STATICFILES_DIRS = [BASE_DIR / "FitOn/static"]
×
232

233
# Media files
234
MEDIA_URL = f"https://{AWS_S3_CUSTOM_DOMAIN}/media/"
1✔
235
DEFAULT_FILE_STORAGE = "storages.backends.s3boto3.S3Boto3Storage"
1✔
236

237
# Default primary key field type
238
# https://docs.djangoproject.com/en/5.1/ref/settings/#default-auto-field
239

240
DEFAULT_AUTO_FIELD = "django.db.models.BigAutoField"
1✔
241

242
PASSWORD_RESET_TIMEOUT = timedelta(minutes=5).total_seconds()
1✔
243

244
os.environ["OAUTHLIB_INSECURE_TRANSPORT"] = "1"
1✔
245
# For google redirection
246
# SECURE_SSL_REDIRECT = True
247
# SECURE_PROXY_SSL_HEADER = ('HTTP_X_FORWARDED_PROTO', 'https')
248

249
TESTING = "test" in sys.argv
1✔
250

251
if TESTING:
1✔
252
    # Use in-memory email backend for tests
253
    EMAIL_BACKEND = "django.core.mail.backends.locmem.EmailBackend"
1✔
254
else:
255
    # Use actual email backend for local development and production
256
    EMAIL_BACKEND = "django.core.mail.backends.smtp.EmailBackend"
1✔
257
    EMAIL_HOST = "smtp.gmail.com"
1✔
258
    EMAIL_PORT = 587
1✔
259
    EMAIL_USE_TLS = True
1✔
260
    EMAIL_HOST_USER = "fiton.notifications@gmail.com"
1✔
261
    EMAIL_HOST_PASSWORD = "usfb imrp rhyq npif"
1✔
STATUS · Troubleshooting · Open an Issue · Sales · Support · CAREERS · ENTERPRISE · START FREE · SCHEDULE DEMO
ANNOUNCEMENTS · TWITTER · TOS & SLA · Supported CI Services · What's a CI service? · Automated Testing

© 2025 Coveralls, Inc