SGCSRelease / legacy-awesome-title

릴리즈의, 릴리즈에 의한, 릴리즈를 위한 별명/업적 관리 사비스
http://title.reluv.me
9 stars 2 forks source link

프로필 사진 업로드시 이미지 파일이 아니어도 업로드가 됨 #57

Closed juice500ml closed 8 years ago

juice500ml commented 8 years ago

photo.py의 file = request.files['upfile'] if not file: return render_template( "_error.html", _error__msg="이미지를 업로드하지 않았습니다.", ), 400 여기서 고치면 됩니다.

https://docs.python.org/2/library/imghdr.html 얘를 쓰면 쉽습니다!

JimJeon commented 8 years ago

이미지 파일만 업로드 가능하게 하라는것이죠?

JimJeon commented 8 years ago

저 해볼래요~

minhoryang commented 8 years ago

@juice500ml 헉! 이미지가 아니어도 업로드가 된다구요?! 그게 어떻게 되죠?!?!?!?!?!?!?

@JimJeon 넵! 이게 쉬운이슈이기를 빌빌빌며

juice500ml commented 8 years ago

@minhoryang photo.html : <INPUT TYPE=FILE NAME="upfile" accept="image/*"><BR> photo.py : file = request.files['upfile'] 여기서 accept부분은 default 선택만 하게 하고, All Files를 선택해서 업로드하면 막는 부분이 현재는 없습니당~

screenshot from 2016-03-04 17 14 27

minhoryang commented 8 years ago

오! 그렇네요!! 그럼 저장한 다음, 그 파일이 무슨 사진인지 imghdr에게 물어보고 맞으면 db에 넣어주고 서빙하면 된다는 거겠죠? (imghdr이 저장된 파일을 필요로 하네용 ;ㅅ;)

@juice500ml @jmg7173 에게의 질문

@JimJeon 에게 남기는 메세지

잘부탁드려요. imghdr덕분에 쉽게 풀리는 문제가 되겠어요!


imghdr말고 libmagic이라는 기법이 있는데 이건 다른 확장자도 구분을 해줘요. 근데 apt-get 설치가 필요할 거에요. pip말고도 꽤나 복잡했던 기억이. 그러니까 python에 내장되어있는 imghdr은 매우 현명한 방식이네요.

juice500ml commented 8 years ago

@minhoryang 질문1. client side에서는 아직 힘든 것 같아요! http://stackoverflow.com/questions/1561847/html-how-to-limit-file-upload-to-be-only-images

juice500ml commented 8 years ago

질문3. https://developer.mozilla.org/en-US/docs/Web/CSS/background-image If a specified image cannot be drawn (for example, when the file denoted by the specified URI cannot be loaded), browsers handle it as they would a none value.

None Value로 들어가게 되어 그 부분은 안전해보입니당~

JimJeon commented 8 years ago

흐엏... 엄청난 내용들이 늘어났네요 정독하고 작업하도록 하겠습니당~

juice500ml commented 8 years ago

@JimJeon 처음 언급된 방법으로 하면 모두 해결되는 것으로 보입니다! 얼른 고쳐주세용!

JimJeon commented 8 years ago

일단 만들어봤는데 너무 쉽게 끝나서 두렵습니다.... 분명 무언가 빼먹은거 같은데?????

(.c) 파일의 확장자를 이미지 파일(png)로 수정해서 업로드를 시도해보았는데 이미지 파일이 아니라고 굉장히 잘 알아차리더군요... 왜 되는지 모르는데 잘 되는 매우 위험한 코드입니다..... 8ㅅ8

minhoryang commented 8 years ago

리뷰 끝! 아주 잘 짜셨어요!!!!!!!!!!!! https://github.com/minhoryang/AwesomeTitle/commit/97ccfa16c5981badadec29fe0a1e270518459c29#commitcomment-16505520

minhoryang commented 8 years ago

imghdr이 작동하는 방식은, 파일의 첫 n바이트를 읽어서, png라면(jpg라면, ...) 마땅히 있어야할 바이트가 있는지 검사합니다. 좋죠? 모든 파일을 지원하는 libmagic이라는것도있어요!

JimJeon commented 8 years ago

오 굉장한 라이브러리였군요. 단순히 확장자를 검사하는게 아니라 확장자마다 가지는 특성을 검사하는거였네요.

minhoryang commented 8 years ago

코드 진짜 단순해요 https://hg.python.org/cpython/file/3.5/Lib/imghdr.py

JimJeon commented 8 years ago

방금 시도해봤는데 gif를 지원하니까 움짤도 프로필로 등록가능해요! gif까지는 확장자 지원하게 해도 괜찮을거 같아요!

juice500ml commented 8 years ago

움짤 좋닼ㅋㅋㅋㅋㅋㅋ

minhoryang commented 8 years ago

ㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋ움짤 돈받죠?ㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋ

JimJeon commented 8 years ago

if imghdr.what(file) == 'gif': Money.collect( GIF_PRICE )

minhoryang commented 8 years ago

gif지원한다고 광고하죠? gif까지 4개만 해서 넣어주세요 지금 바로 머지하죠!

JimJeon commented 8 years ago

오오 넵!

JimJeon commented 8 years ago

어라... 왜 issue 57 branch는 아무것도 안되어있고 issue 44 branch에 issue 57 수정사항이 올라가 있을까요? ㅠㅅㅠ

minhoryang commented 8 years ago

git checkout 을 통해 issue 57 branch로 이동하신다음 두 커밋을 issue 57로 옮겨볼게요

git checkout 이슈57브랜치이름
git cherry-pick 97ccfa16c5981badadec29fe0a1e270518459c29
git cherry-pick bed13315d9f4ac47b15d39f2b2e95c28e3c8b87e
git push origin 이슈57브랜치이름

(저 커밋들의 ID는 git log명령에서 확인할 수 있어요)

Issue 44쪽 정리는 그쪽 리뷰가 끝나고 다시 도와드릴게요!

JimJeon commented 8 years ago

On branch issue_44_withdrawal You are currently cherry-picking commit bed1331.

nothing to commit, working directory clean The previous cherry-pick is now empty, possibly due to conflict resolution. If you wish to commit it anyway, use:

git commit --allow-empty

Otherwise, please use 'git reset'

라는 메세지를 받았습니다

minhoryang commented 8 years ago

git log좀요. ;ㅅ;

minhoryang commented 8 years ago

앗 제가 숫자를 잘못썻어용. 다시 위에 명령을 순서대로 해보시겠어용? (아마 그리고 방금 명령을 통해서 44쪽은 꼬여있을거에요 ;ㅅ;ㅠ)

JimJeon commented 8 years ago

네! git log는 필요 없으신거죠?? 추출중이었는데 ㅎㅎ;;;

minhoryang commented 8 years ago

네 해보죠!

JimJeon commented 8 years ago

(3.5.1-awesometitle) irregular@raspberrypi:~/AwesomeTitle $ git cherry-pick 97ccfa16c5981badadec29fe0a1e270518459c29 error: cherry-pick is not possible because you have unmerged files. hint: Fix them up in the work tree, and then use 'git add/rm ' hint: as appropriate to mark resolution and make a commit, or use hint: 'git commit -a'. fatal: cherry-pick failed (3.5.1-awesometitle) irregular@raspberrypi:~/AwesomeTitle $ git cherry-pick bed13315d9f4ac47b15d39f2b2e95c28e3c8b87e error: cherry-pick is not possible because you have unmerged files. hint: Fix them up in the work tree, and then use 'git add/rm ' hint: as appropriate to mark resolution and make a commit, or use hint: 'git commit -a'. fatal: cherry-pick failed

흐어... 아직 push 는 안했는데 fail이 가득떠서.. 8ㅅ8

minhoryang commented 8 years ago

히히 git status좀요! 그리고 git log(첫 20줄정도?) 좀요!

JimJeon commented 8 years ago

git status에는 photo가 바뀌었다고 나오고 screenshot from 2016-03-05 03-20-08

이 부분이 생겼어요

git log:

commit a5536d3a62ca9dd22c3be51d757adb910bf6e093 Author: JimJeon irregular@sogang.ac.kr Date: Sat Mar 5 03:08:47 2016 +0900

issue #44 updated

commit bed13315d9f4ac47b15d39f2b2e95c28e3c8b87e Author: JimJeon irregular@sogang.ac.kr Date: Sat Mar 5 02:57:47 2016 +0900

issue #57 support gif, png, jpg, and jpeg

commit 64171454703426319a8f535f3f808d14d332bc60 Author: JimJeon irregular@sogang.ac.kr Date: Sat Mar 5 02:00:38 2016 +0900

issue #44 fixes and comments

commit a2e1e49d3e104df9fb7de62a4a8e010218e5fdb1 Merge: 97ccfa1 3fa2909 Author: JimJeon irregular@sogang.ac.kr Date: Sat Mar 5 01:54:38 2016 +0900

issue #44 fixes and comments

commit 97ccfa16c5981badadec29fe0a1e270518459c29 Author: JimJeon irregular@sogang.ac.kr Date: Sat Mar 5 01:36:33 2016 +0900

issue #57 이미지 파일이 아니면 에러!

commit ca6915e7f1084d11158e6c626667c0ace52442c8 Merge: 49a9ad2 e989a28 Author: JimJeon irregular@sogang.ac.kr Date: Sat Mar 5 01:30:46 2016 +0900

Merge branch 'master' of http://github.com/minhoryang/AwesomeTitle into issue_44_withdrawal
minhoryang commented 8 years ago

현재 어떤 브랜치인지 알려주시겠어용? git branch

JimJeon commented 8 years ago

현재 issue_44_withdrawal 브랜치에 있습니다!

minhoryang commented 8 years ago

그럼 이슈 57 브랜치의 이름은 뭐로정했어요? git branch보여주시면 현재 있는 모든 브랜치들과 지금 자신이 있는 브랜치가 보여요 git status의 첫줄도 지금 자신이 있는 브랜치를 볼 수 있어요. 브랜치를 넘어가는건 git checkout 브랜치이름 이에요. 브랜치를 생성할 땐 git branch 새브랜치이름이구요 (생성하는 시점의 브랜치를 기점으로 가지가 쳐지는거에요)

JimJeon commented 8 years ago

issue 57은 issue_57onlyphoto라고 정했는데 지금까지 57에서 작업한게 아니라 44에서 작업하거를 깨닫고 아까 git branch -d issue... 으로 삭제했어요

minhoryang commented 8 years ago

새로 만들죠

# 새 브랜치를 만들기 전에 최신 버전을 기준으로 만들기 위해 master로 이동
git checkout master
# 최신버전 받기
git pull
# 최신버전을 기준으로 새 브랜치 생성
git branch issue_57_onlyphoto
# 새 브랜치로 이동
git checkout issue_57_onlyphoto
# 지난번 작업본 가지고오기
git cherry-pick 97ccfa16c5981badadec29fe0a1e270518459c29
git cherry-pick bed13315d9f4ac47b15d39f2b2e95c28e3c8b87e
# 서버에 전송!
git push origin issue_57_onlyphoto
minhoryang commented 8 years ago

아마 첫줄에서 에러가 날 수도 있을텐데... 그러면 git checkout -f master 를 시도해보세욧

JimJeon commented 8 years ago

네! 완료했습니다!

minhoryang commented 8 years ago

예아!

JimJeon commented 8 years ago

오오 이쪽으로 왔다!

JimJeon commented 8 years ago

cherry가 다른 곳에 있는 commit을 현재 브랜치로 옮겨오는 명령인가요?

minhoryang commented 8 years ago

cherry-pick은 다른 브랜치에 있는 좋은 커밋을 하나씩 땡겨오는겁니다 :) https://ko.wikipedia.org/wiki/체리피커 https://namu.wiki/w/체리피킹

minhoryang commented 8 years ago

68 에 가서 마저 master브랜치에 머지할까요?