지금은 i-pin 시대! 라는걸 증명하듯 핸드폰 실명 인증 / 아이핀 인증 적용 작업을 하고 있는데..  나이스..어쩌구에서 api를 받아서 하고있다. 기존의 inicis와는 상대도 되지 않는 끔찍한 i-pin과 휴대폰 인증. 암호화/복호화 라이브러리가 바이너리로 되어있어서 php에서 일말의 호출도 없이 그냥 문자열이 변환된다. 오오 신기해 오오. 대체 어떻게 하는건지 모르겠다. 어떻게하는거죠... 알면 python으로 변환해서 썼을텐데. 생각하기도 싫고 알수도 없어서 그냥 cli로 하기로...



우선 처리 과정을 순서대로 써보자.


1. 실명인증 메일이 왔습니다. 증

 라이브러리는 php / asp / jsp / .net 밖에 지원을 안한다고 하네요. 이런 코딩 후진국. 왜 안 python요! 이러니까 내가 맨날 사람들이 물어보면 그냥 php나 jsp로 짜라고 하잖아. 이런 문제 생길까봐 아오. 

 어쨌든 그래서 저의 오랜 친구 php와 함께 하기로 했어요. php_cli만큼 만만한게 없잖아요. (사실은 서버는 ubuntu라 asp, .net은 이미 아웃이고 jsp는 java 셋팅할 생각을 하니 뭔가 머리가 아파서 칼포기, 그래서 남은게 php)


2. 소스를 봤습니다.

 엣헴..이게 뭔소린가..

어쨌든 클라에서 무언가 값을 생성해줘서 서버에 던져주는데 내용은 뭣도 없는게 실행할때마다 encryption 된 내용물이 바뀌어서 너무 신기. 근데 이걸 자체 생성하고 막 그러길래. echo 찍어서 php_cli 로 받아오는 처리를 함. 그리고 그거랑 똑같은 form 은 django template에 걍 넣어서 쏨. 아 잘가네여


3. 결과를 받고 싶다

 오랜만에 보는 csrf 문제.. 그냥 가벼운 마음으로 csrf_exempt를 하기로 하고 패스.

 그리고 그냥 결과를 아무 생각없이 받았더니 노란 django 에러 화면이 딱. 워메 이건 안됭...


 그래서 결과 받기 소스를 보니 이것도 복호화를 해줘야 하는 것. 


 $_POST 로 암호화 안되서 받아올 수 있는건 그냥 받아와서 view딴에서 처리, 암호화 된 데이터는 또 결과 띄워주는 샘플 소스를 뜯어서 내맘대로 변형 ^^7


 그런데 보다보니 session으로 validation check를 하는데.. 

http://stackoverflow.com/questions/4500240/php-cli-session-warnings

http://stackoverflow.com/questions/5117816/php-session-recreate-cli


위의 두 개의 문서를 참고하면 도움이 될 듯하다. 내가 어떻게 했는지는 비밀--; 부끄러워서 못말하겠다.


어쨌든 그 예외처리를 하니.. 어맛.. 이건 python에서나 보던거잖아? 

\xc0\xe5\xc5\xc2\xbf\xb5 (... 내 이름임 --; )


자 그럼 이걸 어떻게할까여. 저는 프론트엔드랑 친하지 않아서 이걸 어떻게 해야할지 모르겠어여 예전에 군대에서 할 때의 온갖 기억을 동원해서 decoding을 시도.


여기서 왜 디코딩을 하냐고 묻는 사람이 있을 수 있는데, 난 그냥 이거 json으로 넘겨줄라고 한거임. 별 악의 없음..--; 

그런데 이게 안됨. iconv도 안되고, urldecode도 안됨. 예전 우리 와우 길드 주제가를  들으면서 멘붕을 했음. (옛날 우리 와우 길드 주제가: http://www.youtube.com/watch?v=8QZo5Ji43u8 )아 진짜 난 어쩌라고... 란 생각을 하면서 했음.


그러면서 구글에 열심히 검색을 하다 깨달음. 난 맨날 검색어를 영어로 치기 때문에 한국어 인코딩 문제 따위를 찾을 수 없었던 것이었다! 인도새끼들은 이런거 안하나? 쪽바리들은? 으아! (이걸 깨닫는데 30분 걸림--;;) 어쨌든 그래서 네이버에 열심히 검색. 알 수 없는 자바스크립트 유니코드 변환기만 한가득. 거기다 넣어봄. 안되잖아? 으아.


어쨌든 이런저런 과정을 거쳐서 생각하다가 rawurleoncde 함수가 생각남. 


$name = rawurlencode(iconv("CP949","UTF-8",$name));


그래서 이런 더러운 과정을 거쳐서 한글로 변환해줌. 왜 대체 php에서 걍 unicode를 인식을 못하는걸까 고민했는데, 아마 암호화해서 넘겨줘서 인자로 받은거에 대해 decoding을 거치지 않고 들어와서 그런듯 함.


그래서 잘 쑤셔넣었더니..


%EC%9E%A5%ED%83%9C%EC%98%81


이런 좋은 값이 나옴 ^^7 행복하당.


오늘 이거 하느라 KG모빌리언스에서 받은 문자만 30개가 넘는다. 이새끼들은 왜 자꾸 번호를 바꾸는거야 지우기 힘들게 -_- 




Posted by TY
,

개발환경

HW: Apple Macbook Pro 13" early 2011 (i7@2.7 / 4g / intel graphic)

OS: Mac OSX 10.8.2 (mountain lion)

IDE: Eclipse Juno

JDK: 1.6

 


이미지 몇 백장을 리사이즈하고 앞으로 이 일이 반복될 것 같은 끔찍한 느낌이 들어서 걍 만듬..


ImageIcon 으로 리사이징된 이미지를 리턴해줌... 소스코드는 메인이랑 함수 딸랑 하나 있는 클래스랑..  끝임.


원래 할라고 했던 것들은..


1. 처음에 구동하면 최대 width * height 적어줌 (width나 height중 원본 사이즈와 비교해서 원본대비 더 큰 것에 맞춰서 비율을 맞춰서 줄여줌..)

2. 다이얼로그 박스가 떠서 디렉토리를 선택

3. 프로그레스 바와 로그 텍스트가 나와서 얼마나 됐고 무슨 이미지들을 바꿨는지 찍어줌 


근데 귀찮아서

width*height는 그냥 함수 인자로 넣고 / 경로도 걍 소스에 string에 대입하고 / 어떤 파일 리사이징 됫는지 콘솔창에 찍힘 


근데 다시 고칠라나? 귀찮을듯.. 나중에 심심하면 할듯 --;


자바로 짠 이유는 노트북에 obj-c랑 java랑 python이 깔려있는데 마침 eclipse를 켜놨었음..


ImageResize.java


import java.awt.Graphics2D;

import java.awt.geom.AffineTransform;

import java.awt.image.BufferedImage;

import java.io.File;


import javax.imageio.ImageIO;

import javax.swing.ImageIcon;



public class ImageResize {

public static ImageIcon resizeImage(String fileName, int maxWidth, int maxHeight){

String data = fileName;

BufferedImage src, dest;

ImageIcon icon;

try{

src = ImageIO.read(new File(data));

int width = src.getWidth();

int height = src.getHeight();

if(width > maxWidth){

float widthRatio = maxWidth/(float)width;

width = (int)(width*widthRatio);

height = (int)(height*widthRatio);

}

if(height > maxHeight){

float heightRatio = maxHeight/(float)height;

width = (int)(width*heightRatio);

height = (int)(height*heightRatio);

}

dest = new BufferedImage(width, height, BufferedImage.TYPE_INT_RGB);

Graphics2D g = dest.createGraphics();

AffineTransform at = AffineTransform.getScaleInstance((double) width / src.getWidth(), (double)height / src.getHeight());

g.drawRenderedImage(src, at);

icon = new ImageIcon(dest);

return icon;

}catch(Exception e){

System.out.println("This image can not be resized. Please check the path and type of file.");

        return null;

}

}

}




Main.java


import java.awt.Graphics2D;

import java.awt.Image;

import java.awt.image.BufferedImage;

import java.io.File;

import java.io.IOException;


import javax.imageio.ImageIO;

import javax.swing.ImageIcon;



public class Main {


/**

* @param args

* @throws IOException 

*/

public static void main(String[] args) throws IOException {

String path = "/Users/TY/Dropbox/사진/";

File dirFile = new File(path);

File [] fileList = dirFile.listFiles();

for(File t:fileList){

String tmpPath = t.getParent();

String tmpFileName = t.getName();

int extPosition = tmpFileName.indexOf("jpg");

if(extPosition != -1){

String fullPath = tmpPath+"/"+tmpFileName;

ImageIcon ic = ImageResize.resizeImage(fullPath, 1024, 1024);

Image i = ic.getImage();

BufferedImage bi = new BufferedImage(i.getWidth(null), i.getHeight(null), BufferedImage.TYPE_INT_RGB);

Graphics2D g2 = bi.createGraphics();

g2.drawImage(i, 0, 0, null);

g2.dispose();

String newFileName = tmpFileName.replaceFirst(".jpg", "_resize.jpg");

String newPath = tmpPath+"/"+newFileName;

ImageIO.write(bi, "jpg", new File(newPath));

System.out.println(newPath);

}

}

System.out.println("FIN");

}

}





Posted by TY
,