- νλ‘μ νΈ μκ°
- μ£Όμ κΈ°λ₯
- κ°λ° λ Έμ
- νμ ꡬμ±
- κ°λ° κΈ°κ°
- κΈ°μ μ€ν
- μν€ν μ²
- ERD
- μν λΆλ΄
- κΈ°λ₯ μμ°
- ꡬλ λ°©λ²
- PASDS-WORLDλ κ³΅ν΅ λΉλ°λ²νΈμ κ°μ νλ³ λ―Όκ°λ°μ΄ν°λ₯Ό 곡μ ν΄μ£Όλ μλΉμ€μ λλ€.
- TOTP κΈ°λ° 2μ°¨ μΈμ¦μ ν΅ν΄ μμ ν λ‘κ·ΈμΈμ μ 곡ν©λλ€.
- RBACλ₯Ό ν΅ν λ―Όκ° λ°μ΄ν°λ₯Ό 곡μ ν©λλ€.
- KMS μλ²λ₯Ό ν΅ν΄ λ°κΈλ°μ ν€λ‘ λ―Όκ° λ°μ΄ν°λ₯Ό μμ νκ² μνΈν ν©λλ€.
κΉμ§μ© | μ μ°μ | μ κ΄μ° | μ΄μ€λ² | μλκΈ° | μ΄νμ |
---|---|---|---|---|---|
@jinyong3512 | @Wooseobee | @godsun7892 | @bum19 | @DKIMDK | @haisley77 |
2024.04.08 - 2024.05.20 (6μ£Ό)
-
κΉμ§μ©
- Front
- νμ λλ©μΈ
- λΌμ°ν°κ°λ, μΈν°μ ν°, μΏ ν€
- Back
- μ΄λ©μΌ λλ©μΈ
- Async, μ΄λ©μΌ κ³μ νμ
- SpringSecurity
- μΈμ¦, μΈκ°
- pepper + BCrypt
- JwtCustomFilter
- 보μκ΄λ ¨ ν€λ μ€μ
- μ·¨μ½μ μ§λ¨
- OWASP (Zed Attack Proxy)
- Cookie
- μ΄λ©μΌ λλ©μΈ
- Android
- μ 체μ μΈ UI/UX
- QR μ½λ μΈμ
- TOTPκΈ°λ° μΈμ¦μ½λ λ°κΈ
- λ΄λΆν μ€νΈ λ°°ν¬
- Front
-
μ μ°μ
- Front
- λ©μΈ: ν, λ―Όκ°λ°μ΄ν°
- μλ¦Ό
- Back
- μλ¦Ό: SSEλ₯Ό νμ©ν΄ μ‘°μ§ μ΄λ, ν μ΄λ μλ¦Ό ꡬν
- κΆν: CRUD
- μ΄λ: CRUD
- μ‘°μ§: CRUD
- ν: CRUD
- μν : CRUD
- λ―Όκ°λ°μ΄ν°: CRUD + Elasticsearchλ₯Ό νμ©ν κ²μ
- Monitoring
- ELK + Filebeat λ‘κΉ νμ΄νλΌμΈ ꡬμΆ
- Kms
- λ‘κΉ μμ€ν ꡬμΆ
- Front
-
μ κ΄μ°
- Infra
- VPC λ΄μ private, private subnet μΈνλΌ νκ²½ ꡬμΆ
- Route, NACL, 보μ κ·Έλ£Ήμ νμ©ν λ€νΈμν¬ νκ²½ ꡬμΆ
- Jenkinsλ₯Ό μ¬μ©ν 무μ€λ¨, μλν λ°°ν¬ κ΅¬ν
- Back
- μ¬μ©μ λμ보λλ₯Ό μν μλ³ μ¬μ©λ log μ μ₯ λ° μ‘°ν κΈ°λ₯ ꡬν
- Monitoring
- Actuator, Prometheus, Grafanaλ₯Ό μ¬μ©ν Spring Boot λͺ¨λν°λ§ νκ²½ ꡬμΆ
- Infra
-
μ΄μ€λ²
- FRONT
- μ‘°μ§λ³ νλͺ©λ‘ μ‘°ν κΈ°λ₯ ꡬν
- μ‘°μ§λ³ μ‘°μ§ κ΅¬μ±μ μ‘°ν κΈ°λ₯ ꡬν
- μ‘°μ§ κ΅¬μ±μ μ΄λ κΈ°λ₯ ꡬν
- KMS
- Jwt Secret Key λ°κΈ λ° νμ λ‘μ§ κ΅¬ν
- Data Key λ°κΈ λ° νμ λ‘μ§ κ΅¬ν
- Master Key λ°κΈ λ° νμ λ‘μ§ κ΅¬ν
- FRONT
-
μλκΈ°
- front
- Vue.js μ€μ λ° Tailwind CSS ν΅ν©, ν°νΈ μ€μ
- κ³΅ν΅ μ»΄ν¬λνΈ λ° νμ΄μ§ λ³ μ»΄ν¬λνΈ μμ±
- λ μ΄μμ ꡬμ±
- λ°μν λμμΈ λ° λ€ν¬λͺ¨λ ꡬν
- νμ΄μ§ λΌμ°ν
- front
-
μ΄νμ
- Back
- λ‘κ·ΈμΈ λΈλ£¨νΈν¬μ€ 곡격 λ°©μ΄ λ‘μ§ (IP μ°¨λ¨, κ³μ LOCK)
- 2FA μ¬μ©μλ³ κ³ μ ν¨μ€ν€ λ°κΈ λ‘μ§
- TOTP μκ³ λ¦¬μ¦ (HMAC, HOTP νμ©) νμ© 2FA λ‘μ§
- μ΄λ©μΌ μΈμ¦ μλ² λ‘μ§
- Front
- μ‘°μ§λ³ λμ보λ μ°¨νΈ κ΅¬μ± λ° νμ΄μ§ κΈ°λ₯ ꡬν
- νμ κΈ°λ₯ (μ΄λ©μΌ μΈμ¦, κ²μ¦ κΈ°λ₯, λΉλ°λ²νΈ μ¬μ€μ , μ± μ¬μ°λ)
- Back
- 2FA(2λ¨κ³ μΈμ¦)
- 리μμ€ λ° λ°μ΄ν°μ μ‘μΈμ€ν λ λ κ°μ§ ννμ μΈμ¦μ΄ μꡬλλ ID λ° μ‘μΈμ€ κ΄λ¦¬ 보μ λ°©λ²μΌλ‘, λ€μν ꡬν λ°©λ²μ΄ μμΌλ©° TOTPλ₯Ό νμ©ν 2FAλ₯Ό ꡬννμ΅λλ€.
- OTP vs TOTP
- OTP : μΌλ°μ μΌλ‘ κ° μΈμ¦ μλλ§λ€ κ³ μ ν λΉλ°λ²νΈλ₯Ό μμ±(ex. μ΄λ©μΌ μΈμ¦μ½λ, SMS μΈμ¦μ½λ)
- TOTP : μ¬μ©μμ μλΉμ€ μ 곡μκ° κ³΅μ ν λΉλ° ν€μ νμ¬ μκ°μ κ²°ν©νμ¬ μ£ΌκΈ°μ μΌλ‘ λ³κ²½λλ OTP
- TOTP μΈμ¦ κ³Όμ
- μ¬μ©μ λλ°μ΄μ€ μ±μμ νμ¬ μκ°κ³Ό λΉλ° ν€λ₯Ό κ²°ν©ν΄ κ³ μ λΉλ°λ²νΈ(TOTP)λ₯Ό μμ±
- μμ±ν TOTPλ‘ μ¬μ©μ μΈμ¦ μμ²
- μΈμ¦ μμ²μ λ°μ μλ²λ μ¬μ©μ λλ°μ΄μ€μ μ¬μ μ 곡μ ν κ³ μ λΉλ° ν€μ νμ¬ μκ°μ κ²°ν©ν΄ TOTP μμ±
- μΈμ¦ μμ² λ°μ μλ²κ° μμ±ν TOTPμ μ¬μ©μλ‘λΆν° λ°μ TOTP μΌμΉ μ¬λΆ νμΈ
- μΌμΉ : μΈμ¦ μ±κ³΅
- λΆμΌμΉ : μΈμ¦ μ€ν¨
git clone https://lab.ssafy.com/s10-final/S10P31S101.git
- change path to /front & npm install
npm i
- front start
npm run dev
- change path to /back/src/main & make
resources
directory
mkdir resources
- change path to /back/src/main/resources & make
application.yml
file
server:
port: {spring boot application port number}
spring:
application:
name: back
datasource:
driver-class-name: com.mysql.cj.jdbc.Driver
url: {back database url}
username: {back database username}
password: {back database userpassword}
elasticsearch:
uris: {elasticsearch url}
username: {elasticsearch username}
password: {elasticserach password}
jpa:
hibernate:
ddl-auto: update
mail:
host: smtp.{email domain}
port: 587
accounts:
- username: {sender email address}
password: {sender email password}
properties:
mail:
smtp:
auth: true
starttls:
enable: true
required: true
connectiontimeout: 5000
timeout: 5000
writetimeout: 5000
auth-code-expiration-millis: 180000 # 3λΆ
data:
redis:
host: {redis address} # λ΄λΆ ν΅μ λ§
port: 6379
password: {redis password}
lettuce:
pool:
max-active: 10
max-idle: 5
min-idle: 1
security:
pepper: {jwt secret pepper}
jwt:
access-token-expiration-ms: 900000 # 15λΆ
refresh-token-expiration-ms: 86400000 # 1μΌ
temporary-token-expiration-ms: 900000 # 15λΆ
email-token-expiration-ms: 900000 # 15λΆ
cookie:
path: "/app/api"
secure: true
httpOnly: true
sameSite: "Strict"
kms-server:
url: {kms url} # you should deploy this server in private-subnet
management:
health:
mail:
enabled: false # MailHealthIndicator λΉνμ±ν
endpoints:
web:
cors:
allowed-origins: {prometheus url}
exposure:
include: "*"
metrics:
export:
prometheus:
enabled: true
endpoint:
health:
show-details: ALWAYS
- change path to /back & build
./gradlew build
- back start
java -jar back-0.0.1-SNAPSHOT.jar
- change path to /kms/src/main & make
resources
directory
mkdir resources
- change path to /kms/src/main/resources & make
application.yml
file
server:
port: {kms spring application port number}
spring:
application:
name: kms
datasource:
driver-class-name: com.mysql.cj.jdbc.Driver
url: {kms database url}
username: {kms database username}
password: {kms database password}
jpa:
hibernate:
ddl-auto: update
logging:
config: classpath:logback-spring.xml
main-server:
url: {back server address}/app/api/key-rotate/handle-masterkey-change
- change path to /kms & build
./gradlew build
- kms start
java -jar kms-0.0.1-SNAPSHOT.jar
Front
βββ node_modules
βββ README.md
βββ certificate.pem
βββ index.html
βββ jsconfig.json
βββ package-lock.json
βββ package.json
βββ postcss.config.js
βββ privatekey.pem
βββ project_structure.txt
βββ public
β βββ favicon.ico
βββ src
β βββ App.vue
β βββ api
β β βββ data.js
β β βββ invitation.js
β β βββ notification.js
β β βββ organization.js
β β βββ role.js
β β βββ team.js
β βββ assets
β β βββ fonts
β β β βββ SamsungOneKorean-700C.ttf
β β βββ fonts.css
β β βββ images
β β β βββ QR_example.png
β β β βββ background1-example.jpg
β β β βββ pasdsworld_v1_qr.png
β β β βββ pasdsworld_v2_qr.png
β β β βββ pasdsworld_v3_qr.png
β β β βββ secret_key_qr_example.png
β β βββ logo.png
β β βββ main.css
β βββ components
β β βββ common
β β β βββ BaseAlert.vue
β β β βββ BaseButton.vue
β β β βββ BaseFailAlert.vue
β β β βββ BaseModal.vue
β β β βββ BasePagination.vue
β β β βββ BaseSearchBar.vue
β β β βββ BaseSpinner.vue
β β β βββ BaseTimer.vue
β β β βββ HeaderNavigation.vue
β β β βββ MainAuthorizationModal.vue
β β β βββ MainMemberRoleModal.vue
β β β βββ MainPrivateDataCreate.vue
β β β βββ MainPrivateDataDetail.vue
β β β βββ MainSidebar.vue
β β β βββ MainTable.vue
β β β βββ MainTeamButtonGroup.vue
β β β βββ MemberChangePasswordModal.vue
β β β βββ OrganizationAuthorizationModal.vue
β β β βββ OrganizationChangeHeaderModal.vue
β β β βββ OrganizationChangeNameModal.vue
β β β βββ OrganizationCounts.vue
β β β βββ OrganizationCreationModal.vue
β β β βββ OrganizationInvitationModal.vue
β β β βββ OrganizationKeyRotations.vue
β β β βββ OrganizationSidebar.vue
β β β βββ OrganizationViewCounts.vue
β β β βββ TeamChangeLeaderModal.vue
β β β βββ TeamChangeNameModal.vue
β β β βββ TeamCreationModal.vue
β β β βββ TeamInvitationModal.vue
β β β βββ TeamRoleCreationModal.vue
β β βββ dashboard
β β β βββ CircleChart.vue
β β β βββ CircleChart2.vue
β β βββ main
β β β βββ MainMainpage.vue
β β β βββ MainTeamManagement.vue
β β βββ member
β β β βββ MemberForgotPassword.vue
β β β βββ MemberForgotTotpKey.vue
β β β βββ MemberLogin.vue
β β β βββ MemberLogin2.vue
β β β βββ MemberMyPage.vue
β β β βββ MemberSignup.vue
β β β βββ MemberSignup2.vue
β β β βββ MemberSignup3.vue
β β β βββ MemberSignup4.vue
β β βββ organization
β β βββ OrganizationDashboard.vue
β β βββ OrganizationMember.vue
β β βββ OrganizationMemberRoleModal.vue
β β βββ OrganizationSetting.vue
β β βββ OrganizationTeam.vue
β βββ main.js
β βββ router
β β βββ index.js
β βββ stores
β β βββ common.js
β β βββ user.js
β βββ utils
β β βββ cookie.js
β β βββ http-commons.js
β βββ views
β βββ HomeView.vue
β βββ HomeViewOnePageScrollTest.vue
β βββ MainView.vue
β βββ MemberView.vue
β βββ OrganizationView.vue
βββ tailwind.config.js
βββ vite.config.js
Back
βββ Dockerfile
βββ back_s
9E88
tructure.txt
βββ build.gradle
βββ gradle
β βββ wrapper
β βββ gradle-wrapper.jar
β βββ gradle-wrapper.properties
βββ gradlew
βββ gradlew.bat
βββ settings.gradle
βββ src
βββ main
β βββ java
β βββ world
β βββ pasds
β βββ back
β βββ BackApplication.java
β βββ authority
β β βββ controller
β β β βββ AuthorityController.java
β β βββ entity
β β β βββ Authority.java
β β β βββ AuthorityDto.java
β β β βββ AuthorityName.java
β β β βββ response
β β β βββ GetAuthoritiesResponseDto.java
β β βββ repository
β β β βββ AuthorityRepository.java
β β βββ service
β β βββ AuthorityService.java
β βββ common
β β βββ BaseEntity.java
β β βββ ControllerAdvice.java
β β βββ DataKeyRotationTask.java
β β βββ config
β β β βββ AppConfig.java
β β β βββ ElasticsearchConfig.java
β β β βββ ElasticsearchRepositoryConfig.java
β β β βββ EmailConfig.java
β β β βββ JpaRepositoryConfig.java
β β β βββ RedisConfig.java
β β β βββ SecurityConfig.java
β β βββ controller
β β β βββ EmailController.java
β β β βββ KeyRotateController.java
β β β βββ RedisController.java
β β βββ dto
β β β βββ EmailCodeGeneralVerificationRequestDto.java
β β β βββ EmailSendGeneralRequestDto.java
β β β βββ ErrorResponse.java
β β β βββ KmsDecryptionKeysResponseDto.java
β β β βββ KmsEncryptionKeysResponseDto.java
β β β βββ KmsKeyDto.java
β β β βββ KmsReGenerationKeysResponseDto.java
β β βββ exception
β β β βββ BusinessException.java
β β β βββ ExceptionCode.java
β β βββ filter
β β β βββ CustomAuthenticationFilter.java
β β βββ service
β β β βββ EmailAsyncService.java
β β β βββ EmailService.java
β β β βββ KeyService.java
β β β βββ RedisJwtSecretKeyListener.java
β β β βββ RedisService.java
β β βββ util
β β βββ AesUtil.java
β β βββ CookieProvider.java
β β βββ JwtTokenProvider.java
β β βββ LoginUserAuditorAware.java
β βββ dashboard
β β βββ controller
β β β βββ DashboardController.java
β β βββ entity
β β β βββ OrganizationDashboard.java
β β β βββ TeamDashboard.java
β β β βββ dto
β β β βββ response
β β β βββ MainDashboardResponseDto.java
β β β βββ TeamDashboardResponseDto.java
β β βββ repository
β β β βββ OrganizationDashboardRepository.java
β β β βββ TeamDashboardRepository.java
β β βββ service
β β βββ OrganizationDashboardService.java
β β βββ TeamDashboardService.java
β βββ invitaion
β β βββ controller
β β β βββ InvitationController.java
β β βββ entity
β β β βββ Invitation.java
β β β βββ dto
β β β βββ request
β β β β βββ AcceptOrganizationInviteRequestDto.java
β β β β βββ AcceptTeamInviteRequestDto.java
β β β βββ response
β β β βββ AcceptResponseDto.java
β β β βββ GetInvitationsResponseDto.java
β β β βββ RejectOrganizationInviteRequestDto.java
β β β βββ RejectResponseDto.java
β β β βββ RejectTeamInviteRequestDto.java
β β βββ repository
β β β βββ InvitationRepository.java
β β βββ service
β β βββ InvitationService.java
β βββ member
β β βββ controller
β β β βββ MemberController.java
β β βββ dto
β β β βββ request
β β β β βββ ChangeNicknameRequestDto.java
β β β β βββ ChangePasswordRequestDto.java
β β β β βββ ResetPasswordRequestDto.java
β β β β βββ SecondLoginRequestDto.java
β β β β βββ SignupRequestDto.java
β β β βββ response
β β β βββ FirstLoginResponseDto.java
β β βββ entity
β β β βββ CustomUserDetails.java
β β β βββ Member.java
β β β βββ MemberOrganization.java
β β β βββ MemberRole.java
β β β βββ MemberTeam.java
β β βββ repository
β β β βββ MemberOrganizationRepository.java
β β β βββ MemberRepository.java
β β β βββ MemberRoleRepository.java
β β β βββ MemberTeamRepository.java
β β βββ service
β β βββ CustomUserDetailsService.java
β β βββ MemberService.java
β βββ notification
β β βββ controller
β β β βββ NotificationController.java
β β βββ entity
β β β βββ Notification.java
β β β βββ NotificationStatus.java
β β β βββ NotificationType.java
β β β βββ dto
β β β βββ response
β β β βββ NotificationResponseDto.java
β β βββ repository
β β β βββ NotificationRepository.java
β β βββ service
β β βββ NotificationEventPublisher.java
β β βββ NotificationService.java
β βββ organization
β β βββ controller
β β β βββ OrganizationController.java
β β βββ entity
β β β βββ Organization.java
β β β βββ OrganizationRole.java
β β β βββ dto
β β β βββ request
β β β β βββ AssignNewHeaderRequestDto.java
β β β β βββ CreateOrganizationRequestDto.java
β β β β βββ DeleteOrganizationRequestDto.java
β β β β βββ InviteMemberToOrganizationRequestDto.java
β β β β βββ LeaveOrganizationRequestDto.java
β β β β βββ RemoveMemberFromOrganizationRequestDto.java
β β β β βββ RenameOrganizationRequestDto.java
β β β β βββ UpdateRoleRequestDto.java
β β β βββ response
β β β βββ GetOrganizationMemberDto.java
β β β βββ GetOrganizationMemberResponseDto.java
β β β βββ GetOrganizationsResponseDto.java
β β βββ repository
β β β βββ OrganizationRepository.java
β β βββ service
β β βββ OrganizationService.java
β βββ privateData
β β βββ controller
β β β βββ PrivateDataController.java
β β βββ entity
β β β βββ DataType.java
β β β βββ PrivateData.java
β β β βββ PrivateDataDocument.java
β β β βββ PrivateDataRole.java
β β β βββ dto
β β β βββ PrivateDataRoleDto.java
β β β βββ request
β β β β βββ CreatePrivateDataRequestDto.java
β β β β βββ DeletePrivateDataRequestDto.java
β β β β βββ GetPrivateDataRequestDto.java
β β β β βββ UpdatePrivateDataRequestDto.java
β β β β βββ UpdatePrivateDataRoleRequestDto.java
β β β βββ response
β β β βββ GetPrivateDataListResponseDto.java
β β β βββ GetPrivateDataResponseDto.java
β β β βββ PrivateDataResponse.java
β β βββ repository
β β β βββ elasticsearch
β β β β βββ PrivateDataSearchRepository.java
β β β βββ jpa
β β β βββ PrivateDataCustomRepository.java
β β β βββ PrivateDataCustomRepositoryImpl.java
β β β βββ PrivateDataRepository.java
β β β βββ PrivateDataRoleRepository.java
β β βββ service
β β βββ PrivateDataSearchService.java
β β βββ PrivateDataService.java
β βββ role
β β βββ controller
β β β βββ RoleController.java
β β βββ entity
β β β βββ Role.java
β β β βββ RoleAuthority.java
β β β βββ dto
β β β βββ request
β β β β βββ CreateRoleRequestDto.java
β β β β βββ DeleteRoleRequestDto.java
β β β β βββ UpdateRoleRequestDto.java
β β β βββ response
β β β βββ GetRoleDetailResponseDto.java
β β β βββ GetRoleResponseDto.java
β β βββ repository
β β β βββ RoleAuthorityCustomRepository.java
β β β βββ RoleAuthorityCustomRepositoryImpl.java
β β β βββ RoleAuthorityRepository.java
β β β βββ RoleRepository.java
β β βββ service
β β βββ RoleService.java
β βββ team
β β βββ controller
β β β βββ TeamController.java
β β βββ entity
β β β βββ Team.java
β β β βββ dto
β β β βββ request
β β β β βββ AssignNewTeamHeaderRequestDto.java
β β β β βββ AssignRoleRequestDto.java
β β β β βββ CreateTeamRequestDto.java
β β β β βββ DeleteTeamRequestDto.java
β β β β βββ InviteMemberToTeamRequestDto.java
β β β β βββ LeaveTeamRequestDto.java
β β β β βββ RemoveMemberFromTeamRequestDto.java
β β β β βββ RenameTeamRequestDto.java
β β β β βββ RotateTeamDataKeyRequestDto.java
β β β βββ response
β β β βββ GetAdminTeamsResponseDto.java
β β β βββ GetTeamLeaderResponseDto.java
β β β βββ GetTeamMemberDto.java
β β β βββ GetTeamMemberResponseDto.java
β β β βββ GetTeamsResponseDto.java
β β βββ repository
β β β βββ TeamRepository.java
β β βββ service
β β βββ TeamService.java
β βββ totp
β βββ controller
β β βββ TotpController.java
β βββ dto
β β βββ EmailCodeKeyVerificationRequestDto.java
β β βββ TotpCodeVerificationRequestDto.java
β βββ repository
β β βββ TotpRepository.java
β βββ service
β βββ TotpService.java
βββ test
βββ java
βββ world
βββ pasds
βββ back
βββ BackApplicationTests.java
KMS
βββ build.gradle
βββ gradle
β βββ wrapper
β βββ gradle-wrapper.jar
β βββ gradle-wrapper.properties
βββ gradlew
βββ gradlew.bat
βββ kms_structure.txt
βββ settings.gradle
βββ src
βββ main
β βββ java
β β βββ world
β β βββ pasds
β β βββ kms
β β βββ KmsApplication.java
β β βββ common
β β β βββ BaseEntity.java
β β β βββ ControllerAdvice.java
β β β βββ dto
β β β β βββ ErrorResponse.java
β β β βββ exception
β β β β βββ BusinessException.java
β β β β βββ ExceptionCode.java
β β β βββ logging
β β β βββ GlobalExceptionHandler.java
β β β βββ LogInfo.java
β β β βββ LoggingAspect.java
β β βββ config
β β β βββ RestTemplateConfig.java
β β βββ datakey
β β β βββ controller
β β β β βββ DataKeyController.java
β β β βββ dto
β β β β βββ DecryptionKeysResponseDto.java
β β β β βββ EncryptedDataKeyDto.java
β β β β βββ EncryptionKeysResponseDto.java
β β β β βββ RegenerateKeysResponseDto.java
β β β βββ model
β β β β βββ MasterKeyData.java
β β β βββ service
β β β βββ DataKeyService.java
β β βββ jwtsecretkey
β β β βββ controller
β β β β βββ JwtSecretKeyController.java
β β β βββ service
β β β βββ JwtSecretKeyService.java
β β βββ masterkey
β β β βββ entity
β β β β βββ MasterKey.java
β β β βββ repository
β β β β βββ MasterKeyRepository.java
β β β βββ service
β β β βββ MasterKeyService.java
β β βββ util
β β βββ AesUtil.java
β β βββ HmacUtil.java
β βββ resources
β βββ logback-spring.xml
βββ test
βββ java
βββ world
βββ pasds
βββ kms
βββ KmsApplicationTests.java
βββ MasterKeyServiceTest.java
Android
βββ and_structure.txt
βββ app
β βββ build.gradle.kts
β βββ proguard-rules.pro
β βββ src
β βββ main
β βββ AndroidManifest.xml
β βββ java
β β βββ com
β β βββ world
β β βββ pasds
β β βββ GenerateTotpActivity.kt
β β βββ MainActivity.kt
β β βββ ui
β β βββ theme
β β βββ Color.kt
β β βββ Theme.kt
β β βββ Type.kt
β βββ res
β βββ drawable
β β βββ ic_launcher.xml
β β βββ ic_launcher_background.xml
β β βββ ic_launcher_foreground.xml
β β βββ qr_code_scan.png
β β βββ two_factor_authentication.png
β βββ mipmap-hdpi
β β βββ ic_launcher.png
β β βββ ic_launcher_background.png
β β βββ ic_launcher_foreground.png
β β βββ ic_launcher_monochrome.png
β β βββ ic_launcher_round.png
β βββ mipmap-mdpi
β β βββ ic_launcher.png
β β βββ ic_launcher_background.png
β β βββ ic_launcher_foreground.png
β β βββ ic_launcher_monochrome.png
β β βββ ic_launcher_round.png
β βββ mipmap-xhdpi
β β βββ ic_launcher.png
β β βββ ic_launcher_background.png
β β βββ ic_launcher_foreground.png
β β βββ ic_launcher_monochrome.png
β β βββ ic_launcher_round.png
β βββ mipmap-xxhdpi
β β βββ ic_launcher.png
β β βββ ic_launcher_background.png
β β βββ ic_launcher_foreground.png
β β βββ ic_launcher_monochrome.png
β β βββ ic_launcher_round.png
β βββ mipmap-xxxhdpi
β β βββ ic_launcher.png
β β βββ ic_launcher_background.png
β β βββ ic_launcher_foreground.png
β β βββ ic_launcher_monochrome.png
β β βββ ic_launcher_round.png
β βββ values
β β βββ colors.xml
β β βββ strings.xml
β β βββ themes.xml
β βββ xml
β βββ backup_rules.xml
β βββ data_extraction_rules.xml
βββ build.gradle.kts
βββ gradle
β βββ libs.versions.toml
β βββ wrapper
β βββ gradle-wrapper.jar
β βββ gradle-wrapper.properties
βββ gradle.properties
βββ gradlew
βββ gradlew.bat
βββ settings.gradle.kts