Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Issue 827 리액트 앱을 장고와 분리하여 실행할 수 있도록 한다 #828

Closed
wants to merge 6 commits into from
Closed
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
3 changes: 2 additions & 1 deletion apps/session/sparcsssov2.py
Original file line number Diff line number Diff line change
@@ -1,4 +1,5 @@
import hmac
import hashlib
import time
from secrets import token_hex
from urllib.parse import urlencode
Expand Down Expand Up @@ -52,7 +53,7 @@ def _sign_payload(self, payload, append_timestamp=True):
payload.append(timestamp)

msg = ''.join(list(map(str, payload))).encode()
sign = hmac.new(self.secret_key, msg).hexdigest()
sign = hmac.new(self.secret_key, msg, hashlib.md5).hexdigest()
return sign, timestamp

def _validate_sign(self, payload, timestamp, sign):
Expand Down
1 change: 1 addition & 0 deletions apps/session/views.py
Original file line number Diff line number Diff line change
Expand Up @@ -81,6 +81,7 @@ def user_login(request):
def login_callback(request):
state_before = request.session.get("sso_state", None)
state = request.GET.get("state", None)
# TODO: server host 를 유지한채로 행해지는 모든 리디렉트 응답에 대해 새로운 리액트 앱 호스트를 사용한다
if state_before is None or state_before != state:
return HttpResponseRedirect("/error/invalid-login")

Expand Down
15 changes: 14 additions & 1 deletion otlplus/settings.py
Original file line number Diff line number Diff line change
Expand Up @@ -29,6 +29,17 @@

ALLOWED_HOSTS = []

CORS_ALLOW_CREDENTIALS = True
CORS_ALLOW_ALL_ORIGINS = DEBUG
CORS_ALLOWED_ORIGINS = [
"https://otl.kaist.ac.kr",
]
CSRF_TRUSTED_ORIGINS = [
"localhost:3000" if DEBUG else "otl.kaist.ac.kr",
]

SESSION_COOKIE_SAMESITE = None

# Application definition

INSTALLED_APPS = (
Expand All @@ -44,9 +55,11 @@
"apps.review.appss.ReviewConfig",
"apps.subject.appss.SubjectConfig",
"apps.timetable.appss.TimetableConfig",
"corsheaders",
)

MIDDLEWARE = [
"corsheaders.middleware.CorsMiddleware",
"django.middleware.security.SecurityMiddleware",
"django.contrib.sessions.middleware.SessionMiddleware",
"django.middleware.locale.LocaleMiddleware",
Expand Down Expand Up @@ -148,6 +161,6 @@ def ugettext(s):
VERSION = "3.2.3.0"

try:
from settings_local import * # noqa: F401, F403
from .settings_local import * # noqa: F401, F403
except ImportError:
pass
120 changes: 120 additions & 0 deletions react/PRIVACY.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,120 @@
# 개인정보취급방침

KAIST 학부 총학생회 산하 자치단체 SPARCS 소속 OTL 개발팀(이하 "개발팀")는 개인정보 보호법 제30조에 따라 과목사전 및 모의시간표 서비스 OTL (이하 "서비스")을 이용하는 사용자(이하 "사용자")의 개인정보를 보호하고 이와 관련한 고충을 신속하고 원활하게 처리할 수 있도록 하기 위하여 다음과 같이 개인정보 처리방침을 수립 및 공개합니다.

## 1. 개인정보의 처리 목적

"개발팀"은 다음의 목적을 위하여 개인정보를 처리합니다. 처리하고 있는 개인정보는 다음의 목적 이외의 용도로는 이용되지 않으며, 이용 목적이 변경되는 경우에는 개인정보 보호법 제18조에 따라 별도의 동의를 받는 등 필요한 조치를 이행해야 합니다.

- **회원 가입 및 관리.** **[SPARCS SSO의 개인정보취급방침](https://sparcssso.kaist.ac.kr/privacy/)** 을 따릅니다.
- **서비스 제공.** "개발팀"은 서비스를 제공하는 데 필요한 개인 데이터를
수집하며, 여기에는 서비스를 향상하기 위해, 감사나 데이터 분석 등의 내부 목적을 위해 또는 문제 해결을 위해 수집되는 개인 데이터가 포함될 수 있습니다. 과목 사전 및 후기, 모의 시간표 기능이 포함됩니다.
- **사용자와의 통신.** 통신 내용에 응답하거나, "사용자"의 "서비스" 이용 또는 계정에 대해 "사용자"에게 연락하거나, 문제 해결을 위한 정보 제공을 요청하거나 제품에 대한 피드백을 요청하기 위한 것입니다.
- **법률 준수.** 법률 등에 의해 수사기관의 적법한 요청에 대응하기 위함입니다.

## 2. 개인정보의 처리 및 보유 기간

- "개발팀"은 법령에 따른 개인정보 보유/이용기간 또는 "사용자"로부터 개인정보를 수집 시에 동의 받은 개인정보 보유/이용기간 내에서 개인정보를 처리/보유합니다.
- 각각의 개인정보 처리 및 보유 기간은 다음과 같습니다.
- 회원 가입 및 관리. **[SPARCS SSO의 개인정보취급방침](https://sparcssso.kaist.ac.kr/privacy/)** 을 따릅니다.
- 그 외
- "서비스" 탈퇴 시까지
- 관계 법령 위반에 따른 수사조사 등이 진행 중인 경우에는 해당 수사조사 종료 시까지

## 3. 개인정보의 제3자 제공

"개발팀"은 정보주체의 개인정보를 『1. 개인정보의 처리 목적』 에서 명시한 범위 내에서만 처리하며, 정보주체의 동의, 법률의 특별한 규정 등 개인정보 보호법 제17조 및 제18조에 해당하는 경우에만 개인정보를 제3자에게 제공합니다. "개발팀"은 다음과 같이 개인정보를 제3자에게 제공하되, 제한된 정보 만을 제공하여 실제로 제3자가 개인에 관해 식별이 불가능하도록 하였습니다.

- Google LLC (인터넷 서비스 제공 업체)
- 개인정보를 제공받는 자: Google LLC
- 제공받는 자의 개인정보 이용목적: "개발팀"이 "서비스"의 기능 향상을 위해서 Google로부터 필요로 하는 비즈니스 데이터 분석 기능 (Google Analytics) 제공, "개발팀"이 "서비스"의 문제 해결을 위해서 Googl로부터 필요로 하는 오류 보고 솔루션(Firebase Crashlytics)의 데이터 제공
- 제공하는 개인정보 항목: 후기에 대한 비식별화된 "좋아요" 및 "신고" 활동 기록, 비식별화된 "사용자"가 "서비스"에 대해 평가를 내렸는지 여부, 비식별화된 모의 시간표 및 위시리스트 수정 기록, 비식별화된 후기 작성 기록, 오류 발생 시 해당 로그를 전송하는 "사용자"의 비식별화된 고유번호, 기기 정보 및 앱 정보

## 4. 정보주체와 법정대리인의 권리, 의무 및 행사방법

- 정보주체는 "개발팀"에 대해 언제든지 개인정보 열람/정정/삭제/처리정지 요구 등의 권리를 행사할 수 있습니다.
- 위 사항에 따른 권리 행사는 "개발팀"에 대해 전자우편 (주소: [email protected]) 을 통해 하실 수 있으며, "개발팀"은 해당 요청을 전달 받았을 경우 가능한 범위 내에서 지체 없이 조치해야 합니다.
- 권리 행사는 정보주체의 법정대리인이나 위임을 받은 자 등 대리인을 통하여 하실 수 있습니다. 이 경우 "개인정보 처리 방법에 대한 고시(제2020-7호)" 별지 제11호 서식에 따른 위임장을 제출하셔야 합니다.
- 개인정보 열람 및 처리정지 요구는 개인정보보호법 제35조 제4항, 제37조 제2항에 의하여 정보주체의 권리가 제한될 수 있습니다.
- 개인정보의 정정 및 삭제 요구는 다른 법령에서 그 개인정보가 수집 대상으로 명시되어 있는 경우에는 그 삭제를 요구할 수 없습니다.
- "개발팀"은 정보주체 권리에 따른 열람의 요구, 정정/삭제의 요구, 처리정지의 요구 시 열람 등 요구를 한 자가 본인이거나 정당한 대리인인지 확인해야 합니다.
- 그 외 SPARCS SSO 서비스에 의해 관리되는 개인 정보의 권리 행사에 관해서는 **[SPARCS SSO의 개인정보취급방침](https://sparcssso.kaist.ac.kr/privacy/)** 을 따릅니다.

## 5. 처리하는 개인정보 항목

"개발팀"은 다음의 개인정보 항목을 처리하고 있습니다.

- 회원 가입 및 관리
- 필수항목: 학번
- 선택항목: 이메일, SNS 계정 식별자
- 그 외 **[SPARCS SSO의 개인정보취급방침](https://sparcssso.kaist.ac.kr/privacy/)** 에 정의되어 있는 항목
- 과목 사전 및 후기 기능 제공
- 필수항목: 소속학과, 전공, 수강한 강의
- 선택항목: 관심학과, 작성한 후기 목록, 좋아요한 후기 목록, 신고한 후기 목록, 열람한 강좌 목록
- 모의 시간표 기능 제공
- 필수항목: 수강한 강의
- 선택항목: 모의 시간표에 추가한 과목 목록, 위시리스트에 추가한 과목 목록
- 번역 기능 제공
- 선택항목: 사용 언어
- 서비스 개선
- 선택항목: "서비스" 자체에 "사용자"가 내린 별점 평가, 각 기능의 사용 시점과 관련 매개변수
- 선택항목: "서비스" 이용 중 오류가 발생한 "사용자"의 식별자, 기기 및 앱 정보
- 인터넷 서비스 이용과정에서 아래 개인정보 항목이 자동으로 생성되어 수집될 수 있습니다.
- IP주소, 쿠키, MAC주소, 서비스 이용기록, 방문기록

## 6. 개인정보 파기 절차 및 방법

- "개발팀"은 개인정보 보유기간의 경과, 처리목적 달성 등 개인정보가 불필요하게 되었을 때에는 지체없이 해당 개인정보를 파기합니다.
- "사용자"로부터 동의받은 개인정보 보유기간이 경과하거나 처리목적이 달성되었음에도 불구하고 다른 법령에 따라 개인정보를 계속 보존하여야 하는 경우에는, 해당 개인정보를 계속 보존할 수 있습니다.
- 개인정보 파기의 절차 및 방법은 다음과 같습니다.
- 파기절차
"개발팀"은 파기 사유가 발생한 개인정보를 선정하고, "사용자"의 개인정보 보호책임자의 승인을 받아 개인정보를 파기합니다.
- 파기방법
"개발팀"은 전자적 파일 형태로 기록/저장된 개인정보는 기록을 재생할 수 없도록 파기합니다.

## 7. 개인정보의 안전성 확보 조치

"개발팀"은 개인정보의 안전성 확보를 위해 다음과 같은 조치를 취하고 있습니다.

- 관리적 조치: 제한된 관리자에게만 접근 권한 허용
- 기술적 조치: 클라우드 서비스에서 제공하는 방화벽 등의 보안 기능 사용, 비밀번호 해쉬화 저장, 비정상적 접속 감지 및 기록, 인증 과정에서의 암호화, 그 외 **[SPARCS SSO의 개인정보취급방침](https://sparcssso.kaist.ac.kr/privacy/)** 에 언급된 사항

## 8. 개인정보 자동 수집 장치의 설치/운영 및 거부

- "개발팀"은 "사용자"에게 로그인 세션 유지 기능을 제공하기 위해 이용정보를 저장하고 수시로 불러오는 '쿠키(Cookie)'를 사용합니다.
- 거부 방법: 웹 브라우저 설정에서 쿠키 사용을 비활성화하여 거부할 수 있습니다.
- 쿠키 저장을 거부할 경우 기능 상에 문제가 발생할 수 있습니다.
- "개발팀"은 데이터 분석을 통한 서비스 개선을 위해 Google Analytics 를 사용하여 사용 기록을 수집합니다.
- 거부 방법(웹): [Google Analytics 차단 브라우저 확장 기능](https://support.google.com/analytics/answer/181881?hl=ko) 을 설치하여 웹사이트 활동 제공을 차단할 수 있습니다.
- 거부 방법(앱): 현재 Firebase Flutter SDK의 기능 미구현으로 인해 Google Analytics 비활성화가 불가능합니다. 거부하시려면 모바일 웹 버전을 사용하여 주십시오.
- "개발팀"은 "서비스"의 모바일 애플리케이션에 한하여 오류 분석을 위해 Firebase Crashlytics를 사용하여 자동으로 수집합니다.
- 거부 방법: 앱 설정에서 "오류 로그 전송"을 꺼주십시오. 오류 로그에 "사용자"의 식별자가 포함되는 것을 거부하려면 "익명으로 전송"을 켜주십시오.

## 9. 개인정보 보호책임자

- "개발팀"은 개인정보 처리에 관한 업무를 총괄해서 책임지고, 개인정보 처리와 관련한 "사용자"의 불만처리 및 피해구제 등을 위하여 아래와 같이 개인정보 보호책임자를 지정하고 있습니다.
- 성명: 한승현
- 직책: OTL 프로젝트 매니저
- 연락처: [email protected] (개발팀으로 연결됩니다)
- "사용자"는 "서비스"를 이용하면서 발생한 모든 개인정보 보호 관련 문의, 불만처리, 피해구제 등에 관한 사항 개인정보 보호책임자 및 개발팀에 문의할 수 있습니다. "개발팀"은 "사용자"의 문의에 대해 가능한 범위 내에서 지체없이 답변 및 처리해야 합니다.

## 10. 추가적인 이용/제공 판단 기준

"개발팀"은 『개인정보 보호법』 제15조제3항 및 제17조제4항에 따라 『개인정보 보호법 시행령』 제14조의2에 따른 사항을 고려하여 "사용자"의 동의 없이 개인정보를 추가적으로 이용/제공할 수 있습니다.

이에 따라 "개발팀"은 "사용자"의 동의 없이 추가적인 이용/제공을 하기 위해 다음과 같은 사항을 고려해야 합니다.

- 개인정보를 추가적으로 이용/제공하려는 목적이 당초 수집 목적과 관련성이 있는지 여부
- 개인정보를 수집한 정황 또는 처리 관행에 비추어 볼 때 추가적인 이용/제공에 대한 예측 가능성이 있는지 여부
- 개인정보의 추가적인 이용/제공이 "사용자"의 이익을 부당하게 침해하였는지 여부
- 가명처리 또는 암호화 등 안전성 확보에 필요한 조치를 하였는지 여부

추가적인 이용/제공 시 고려사항에 대한 판단기준은 "개발팀" 스스로 자율적으로 판단하여 작성/공개해야 합니다.

## 11. 개인정보 열람청구

"사용자"는 『개인정보 보호법』 제35조에 따른 개인정보의 열람 청구는 『9. 개인정보 보호책임자』 에 명시된 연락처를 통해 가능합니다.

## 12. 개인정보 처리방침 변경

이 개인정보 처리방침은 2021년 10월 xx일에 마지막으로 수정되었으며, 2021년 10월 xx일부터 적용됩니다.
Loading