Skip to content

Latest commit

 

History

History
250 lines (177 loc) · 4.34 KB

checkapi.md

File metadata and controls

250 lines (177 loc) · 4.34 KB

API Check Results


AuthRoutes

Pass


ProbRoutes


Getting Probs for Admins

router.get('/api/prob/admin', access, isAdmin, wrap(C.getProb));
router.get('/api/prob/admin/id/:pid', access, isAdmin, wrap(C.getProb));
router.get('/api/prob/admin/type/:type', access, isAdmin, wrap(C.getProb));

/api/prob/admin

pid, name, type 리턴함

/api/prob/admin/id/:pid

flag 포함 모든 데이터 + filedata[ fid, filename, filepath ] 리턴함

이상한 pid 접근 시

{
    "success": false,
    "message": "No data found"
}

/type/:type도 마찬가지


Getting Probs

router.get('/api/prob', access, C.getProbByActivation);
router.get('/api/prob/id/:pid', access, C.getProbByPid);
router.get('/api/prob/type/:type', access, C.getProbByType);
router.get('/api/prob/comment/:pid', access, wrap(getComment));

/api/prob, /api/prob/type/:type

flag 제외 모든 데이터 리턴함

/api/prob/id/:pid

flag 제외 모든 데이터 + solved, downloadFile Boolean으로 리턴함

/api/prob/comment/:pid

comment의 모든 데이터 제공

이상한 pid 접근 시

{   
    "success": true,
    "data": []
}

오류임 수정해야 함

{
    "success": false,
    "data": []
}

수정 완료


Getting Rankings

router.get('/api/ranking/user/top3', access, wrap(C.getRankingByElapsed));
router.get('/api/ranking/user/top10', access, wrap(C.getRankingBySolved));
router.get('/api/ranking/prob/top3', access, wrap(C.getRankingUpToThird));
router.get('/api/ranking/prob/top10', access, wrap(C.getRankingUpToTenth));

/api/ranking/user/top3

상위 3명의 시간별 데이터 제공 (score, uid, elapsed)

/api/ranking/user/top10

상위 10명의 데이터 제공 (score, uid, solvedAt, nickname)

/api/ranking/prob/top3, /api/ranking/prob/top10

count를 기준으로 하여 상위 3, 10개의 문제의 데이터를 제공

header 외에 parameter or body가 없으므로 예외 발견 불가


Getting file from pid

router.get('/api/prob/download/:pid/:fid', access, wrap(C.downloadFile));

/api/prob/download/:pid/:fid

문제의 파일을 제공

올바르지 않은 pid 제공 시

{
    "success": false,
    "message": "Cannot read property 'toJSON' of undefined",
    "err": {}
}

수정

{
    "success": false,
    "message": "Cannot read property 'match' of undefined",
    "err": {}
}

수정

파일 다운로드 성공

수정

{
    "success": false,
    "message": "Invalid fid or pid"
}

성공


Add Prob

router.post('/api/prob', access, isAdmin, upload.array('attachments'), C.addProb);

POST /api/prob

문제 생성

body에 데이터가 모자랄 때

{
    "success": false,
    "err": {
        "name": "SequelizeValidationError",
        "errors": [
            {
                "message": "chall.type cannot be null",
                "type": "notNull Violation",
                "path": "type",
                "value": null,
                "origin": "CORE",
                "instance": {
                    "score": 1000,
                    "active": false,
                    "views": 0,
                    "count": 0,
                    "pid": null,
                    "name": "rlahEl",
                    "info": "아몰랑",
                    "issuer": "지용",
                    "flag": "YISF{testtest}"
                },
                "validatorKey": "is_null",
                "validatorName": null,
                "validatorArgs": []
            }
        ]
    }
}

뭐 정상임


Submit flag

router.post('/api/prob/submit/:pid', access, C.submitFlag, C.flagHandler, wrap(createComment));

어드민 플래그 제출

{
    "success": false,
    "message": "Submitting flags to an administrator account is prohibited."
}

정상

일반 유저

{
    "success": false,
    "message": "Cannot read property 'toJSON' of null"
}

??

{
    "success": false,
    "message": "Invalid flag."
}

수정 완료


Modify Probs and Files

router.patch('/api/prob/:pid', access, isAdmin, upload.single('alter'), C.modifyProb);
router.patch('/api/prob/file/:fid', access, isAdmin, upload.single('alter'), C.modifyFile);
router.patch('/api/prob/file', access, isAdmin, upload.single('alter'), C.modifyFile);