Git Product home page Git Product logo

web_kookmoban_ponjohmnaimann's Introduction

English 한국어

국방모바일반납 (Pon Johm Naimann-WEB 파트)

Java CI with Gradle GitHub tag (latest by date) LICENSE

Introduction

GitHub contributors

국방모바일보안은 병사와 통제간부 모두가 만족하며 사용할 수 있는, 일방적인 금지와 통제로 이루어지지 않는 스마트폰 반납 시스템을 개발하기 위한 프로젝트입니다. IoT, APP, WEB 분야의 기술을 함께 사용합니다.

Manual

본 프로젝트는 오픈소스 프로젝트로 진행되며, 본 프로젝트에 관심이 있는 개발자와 사용자를 위하여 튜토리얼 GitBook을 제작하여 공개하고 있습니다.

Contribution

금년도 오픈소스아카데미 집체교육이 비대면으로 이루어짐에 따라, 모든 프로젝트는 서로 얼굴도 알지 못하는 상태에서 진행됩니다. 따라서 소통은 실시간 소통이 가능하고 문서화에 유리한 아래의 Notion 페이지에서 이루어집니다.

License

라이센스의 구체적인 내용 및 써드파티 SW에 대해서는 본 리포지토리의 LICENSE 파일 및 튜토리얼 GitBook의 LICENSE 페이지를 참조하십시오.

  • IoT
    • Code for Arduino: GPL v3
    • Code for RaspberryPi: BSD 3-Clause
  • APP: BSD 3-Clause
  • WEB: BSD 3-Clause

Copyright

Copyrightⓒ 2020 Pon Johm Naimann, All rights reserved.

web_kookmoban_ponjohmnaimann's People

Contributors

ckswjd99 avatar jinwhuy avatar riyenas0925 avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar

web_kookmoban_ponjohmnaimann's Issues

[ENH] 스캔한 QR코드의 Time-basedOTP값 검증 기능 구현

  • 라즈베리파이에서 QR코드를 스캔할때의 시간과 TOTP 값, seed값을 서버로 전송한다.
  • 서버에서는 seed값과 Time-based값으로 TOTP값을 생성하고 라즈베리파이에서 받은 TOTP값과 비교한다.

@ckswjd99 찬정님 QR코드에서 TOTP값과 seed값, 시간 이렇게 3개 서버로 전송할까 하는데 어떤가요?

[ENH] Time-based OTP 기능 구현

  • 앱에서 네트워크 연결 없이 인증을 진행할수 있도록 하기 위해 TOTP를 사용
  • seed는 Soldier entity에 UUID로 사용하기로 한 40자리 숫자로 이용
  • otp 유지 시간은 10초로 설정

[ENH] 병사 등록시 계급(Rank), 부대(Unit) 정보 제거

serviceNumber, signUpCode 도입으로 더이상 기존의 rank와 unit key가 필요하지 않아서 이슈 남겼습니다, 또 관리자 앱에서 병사들의 반납 현황을 파악할 때 반납여부정보가 필요해서요. json에 return 키 추가 부탁드립니다.

*rank, unit Key 제거
*병사들의 반납현황을 보여주는 return key 추가 ("true", "false", "error"가 들어갈 예정입니다.)

위에 삭선은 #59 이슈로 생성

[ENH] 병사 정보 CRUD 기능 구현

  • 한명의 병사는 여러개의 모바일 기기를 가질수 있다. (Soldier와 Device는 1:n 관계임)
  • 병사가 삭제되면 모바일 기기도 같이 삭제된다.

[ENH] Spring JPA, QueryDSL 설정

QueryDSL

  • 정적 타입으로 된 SQL과 같은 쿼리를 구성할 수 있도록 해주는 프레임워크
  • 타입안정성 (Type safety), 일관성(consistency)

[BUG] Code Deploy후 수정한 코드로 변경 되지 않는 오류

#!/usr/bin/env bash

REPOSITORY=/opt/OSAM_Hackathon
cd $REPOSITORY

APP_NAME=OSAM_Hackathon
JAR_NAME=$(ls $REPOSITORY/build/libs/ | grep '.jar' | tail -n 1)
JAR_PATH=$REPOSITORY/build/libs/$JAR_NAME

CURRENT_PID=$(pgrep -f $APP_NAME)

if [ -z $CURRENT_PID ]
then
  echo "> 종료할것 없음."
else
  echo "> kill -9 $CURRENT_PID"
  kill -15 $CURRENT_PID
  sleep 5
fi

echo "> $JAR_PATH 배포"
nohup java -jar $JAR_PATH > /dev/null 2> /dev/null < /dev/null &

APP_NAME이 잘못되어 있음

[ENH] 관리자 현황 페이지 제작

  • 관리자가 병사들이 어플을 통해 가입할수 있도록 회원가입 코드를 확인하는 페이지
  • 관리자 반납 시간과 불출 시간을 설정할수 있는 페이지

[ENH] SignUpCode를 이용하여 병사정보 불러오기

관리자 앱에서 병사들의 반납 현황을 표시할 때 등록한 병사 정보들을 불러오는 API가 필요해서 이슈 등록합니다!

  • 하나의 SignUpCode 내에 담겨있는 병사 정보 모두를 불러올 수 있는 API

[ENH] 현재 시간이 사용가능한 시간인지 확인해주는 기능 구현

  • 관리자가 요일별로 핸드폰을 불출하고 반납하는 시간을 지정해둔다.
  • 불출, 반납 시간은 관리자가 수정할 수 있다. (훈련 등의 이유로 변경이 필요할 때를 위함)
  • 라즈베리파이 반납기에서 요청을 보내면 지금이 스마트폰 사용 가능 시간인지에 대해 True/False값으로 응답한다.

[ENH] 병사 등록시 반환값으로 deviceId, adminId도 포함하여 응답

  • 기존의 seed값만 반환하는 방식에서 deviceId, adminId도 포함하여 반환

서버 <-> App

  • 서버에서 App으로는 deviceId, adminId, seed값을 넘겨주고 앱에서 저장한다.

  • 앱에서는 deviceId, adminId, seed값으로 만든 totp 값으로 QRCode를 생성한다

앱 <-> IoT

  • IoT에서는 QRCode에서 deviceId, adminId, totp 값을 읽는다

[ENH] 병사 등록시 관리자가 제공하는 코드를 입력하여 소속을 인증하는 기능 구현

  • 일반인의 어플 가입을 제한
  • 관리자가 제공하는 코드로 등록시 해당 관리자 소속 부대로 자동으로 병사 등록
  • 병사가 소속을 임의로 등록시 잘못된 부대로 설정할수 있기때문에 관리자의 소속을 지정해두고 병사들이 관리자 코드를 입력하여 해당 관리자의 소속으로 지정되도록 구현
  • 관리자 코드는 관리자가 생성될때 지정하며 사용자가 입력하기 쉽도록 고유한 숫자 8자리로 생성

[ENH] 앱에서 병사정보를 받아 DB에 저장 기능 구현

  • Rest API로 구성
  • POST방식으로 앱에서 보내줌
  • 반환값으로 UUID값을 반환
  • 앱에서 보내주는 정보는 아래와 같이 구성
//requset
{
    "name" : "홍길동",
    "rank" : "병장",
    "unit" : "국방부 국직부대 정보체계개발단",
    "serialNumber" : "S/NSDF65SF45S4F52FD3AS3DF",
    "type" : "tablet",
    "manufacturer" : "삼성",
    "phoneNumber" : "010-1234-5678"
}

[BUG] 병사등록시 데이터베이스에 두개가 저장되는 오류

Log

Hibernate: select admin0_.id as id1_0_, admin0_.name as name2_0_, admin0_.password as password3_0_, admin0_.serviceNumber as servicen4_0_, admin0_.signUpCode as signupco5_0_ from Admin admin0_ where admin0_.signUpCode=?
Hibernate: select soldier0_.id as id1_2_, soldier0_.admin_id as admin_id6_2_, soldier0_.name as name2_2_, soldier0_.rank as rank3_2_, soldier0_.serviceNumber as servicen4_2_, soldier0_.unit as unit5_2_ from Soldier soldier0_ where soldier0_.serviceNumber=?
Hibernate: select device0_.id as id1_1_, device0_.manufacturer as manufact2_1_, device0_.phoneNumber as phonenum3_1_, device0_.serialNumber as serialnu4_1_, device0_.soldier_id as soldier_7_1_, device0_.type as type5_1_, device0_.uuid as uuid6_1_ from Device device0_ where device0_.serialNumber=?
Hibernate: insert into Soldier (id, admin_id, name, rank, serviceNumber, unit) values (null, ?, ?, ?, ?, ?)
Hibernate: insert into Soldier (id, admin_id, name, rank, serviceNumber, unit) values (null, ?, ?, ?, ?, ?)
Hibernate: insert into Device (id, manufacturer, phoneNumber, serialNumber, soldier_id, type, uuid) values (null, ?, ?, ?, ?, ?, ?)

위에 로그에서 보이듯이 Insert가 두번 이루어지고 있음

[ENH, CLN] 병사 정보 Key Value 수정

  • 병사 정보 Key에 화면 크기정보 추가(7인치 이상인 경우 태블릿으로 인지하고 같은 군번이라도 서버에 병사 정보 등록이 가능하도록 함)

  • Key Value중 'type' 정보를 삭제(위 화면 크기정보로 대체)

[ENH] 에러처리를 위한 Global Exception 기능 구현

  • 현재 Exception시 단순히 throws 하기 때문에 상대측에서 에러에 대한 대응을 하지 못함
  • json으로 에러메시지를 응답해 상대측에서 에러에 대한 대응을 할수 있게 한다,(toast 메시지 등등....)

[ENH] 반납기로부터 반납 기록을 받아 기록하는 기능 구현

라즈베리파이로 구성된 반납기로부터 아래와 같은 정보를 POST요청을 통해 받는다.

{
      deviceId : 기기 ID,
      returnTime : 기기가 반납된 시간,
      weight : 반납 시점에 측정된 기기의 무게,
      photo : 반납 시점의 핸드폰 사진 (Base64로 Encoding됨)
}

서버에서는 이를 바탕으로 반납 기록을 추가하고, 특이사항 여부를 점검한다.

응답으로는 반납 기록 추가가 성공했는지 여부를 전송한다.

[ENH] Spring Boot Init

Spring Boot Init, log4j2 설정, JUnit5 설정

  • 빌드 결과물을 jar 파일로 저장
  • batch, validation, web, log4j2, devtools 의존성 라이브러리 추가
  • 데이터베이스는 h2로 설정

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.