PageSourceSearch

https://www.westelm.co.kr/assets/js/hSsoAjax.js

js westelm.co.kr collected 2026-10-08 23:21:24 UTC 6,659 bytes, 189 lines download raw bytes

1var _domainPath = "";
2var _host = "";
3
4/**
5 * SSO 함수 호출 전 초기화 처리
6 * 
7 * @date 2018.11.15
8 * @author kim
9 * @example gfnSsoInit()
10 */
11function gfnSsoInit() {	
12	
13	var getRequestURL = location.href ;
14	_host = location.host;	
15	_domainPath = getRequestURL.substring(0, getRequestURL.indexOf(_host))+_host ;
16}
17
18
19//토큰 발급 요청 : mcustNo(통합고객번호), ssoAuthCd(권한코드)
20function gfnReqSSoToknIssuAjax(mcustNo, ssoAuthCd, callback)
21{
22	console.log("[HPOINT_SSO] issueSsoJti request", {hasMcustNo:!!mcustNo});
23	$.ajax({
24		 type:"POST", url:"/mbr/issueSsoJtiAjax", data:{"mcustNo":mcustNo},
25		dataType:"JSON", cache:false, async:false,
26		success:function(data){
27			console.log("[HPOINT_SSO] issueSsoJti response", {succYn:data && data.succYn, hasJti:!!(data && data.jti), hasEncToknVal:!!(data && data.encToknVal)});
28			if(callback && typeof callback == "function") callback(data);
29		},
30		error:function(){ if(callback && typeof callback == "function") callback({succYn:"N"}); }
31	  });
32}
33
34//로그인 대행
35function mcustActingAjax(mcustNo, callback, mcustActingYn)
36{
37	gfnSsoInit();
38	
39	data = {"succYn":"Y"};
40	var ssoMcustNo = mcustNo;
41	
42	if(callback && typeof callback == "function" && mcustActingYn == "Y"){
43		callback(data, ssoMcustNo);
44	} 
45}
46
47// 토큰 만료요청
48function gfnSsoDscdToknReqAjax(callback){
49	
50	gfnSsoInit();
51	
52	var httpUrl = "";
53	
54	// 도메인 분기처리
55	if( _host.indexOf("dev.williams-sonoma.co.kr") > -1 
56	 || _host.indexOf("dev.potterybarn.co.kr") > -1
57	 || _host.indexOf("dev.potterybarnkids.co.kr") > -1
58	 || _host.indexOf("dev.westelm.co.kr") > -1
59	){
60		httpUrl = "https://ssodev.h-point.co.kr:29865/co/setDscdToknJSONP.hd";
61	}else{
62		httpUrl = "https://sso.h-point.co.kr:29865/co/setDscdToknJSONP.hd";
63	}
64	
65	$.ajax({
66		type:"GET",
67		url:httpUrl,
68		data:{"domainPath":_domainPath,"dmnAdr":_host, "callback":callback.name},
69		crossDomain:true,
70		cache:false,
71		async:false,
72        dataType:"jsonp",
73        jsonp:callback.name,
74        xhrFields: {
75			withCredentials : true
76		}, 
77        complete : function(data) {
78        	if(callback && typeof callback == "function"){
79				callback(data);
80			}
81        }
82  }); 
83	
84}
85
86//SSO 요청후 sso 인증 성공시 고객번호 리턴
87function gfnSsoReqAjax(callback)
88{
89	gfnSsoInit();
90	var httpUrl = _host.indexOf("dev.") > -1
91		? "https://ssodev.h-point.co.kr:29865/co/setSsoReqJSONP.hd"
92		: "https://sso.h-point.co.kr:29865/co/setSsoReqJSONP.hd";
93
94	
95	$.ajax({
96		type:"GET",
97		url:httpUrl,
98		data: {"domainPath":_domainPath, "dmnAdr":_host, "callback":callback.name,
99			"token":"", "ptcoChId":window.hpointSsoPtcoChId || "", "ptcoId":window.hpointSsoPtcoId || ""},
100		crossDomain:true,
101		cache:false,
102		async:false,
103        dataType:"jsonp",
104        jsonp:callback.name,
105        xhrFields: {
106			withCredentials : true
107		}, 
108		success : function(data) {
109			console.log("[HPOINT_SSO] H.Point JTI response", {succYn:data && data.succYn, hasJti:!!(data && data.jti)});
110			if(callback && typeof callback == "function"){
111				callback(data);
112			}
113        }
114  }); 
115	 
116}
117
118// JTI 검증 후 자사 회원 세션 생성
119// 자사 로그인 완료 후 H.Point 토큰 쿠키 발급 URL을 받아온다.
120function fnIssueHpointSsoCookie(jti, redirectUrl) {
121	if (!jti) return false;
122	// 발급 API 응답의 encToknVal은 서버 세션에 보관되어 있다.
123	// 브라우저 AJAX로 URL을 받아 다시 이동하지 않고 서버 POST redirect로 H.Point 쿠키를 발급한다.
124	var $form = $('<form method="post" action="/mbr/issueHpointSsoCookie"></form>');
125	$form.append($('<input type="hidden" name="jti">').val(jti));
126	$form.append($('<input type="hidden" name="redirectUrl">').val(redirectUrl || "/index"));
127	console.log("[HPOINT_SSO] submitting token-cookie issue redirect", {hasJti:!!jti, targetUrl:redirectUrl || "/index"});
128	$form.appendTo('body').submit();
129	return true;
130}
131
132// 일반 H.Point 로그인 성공 시에는 JTI 발급 endpoint가 직접 H.Point 쿠키 발급 URL로 redirect한다.
133function fnIssueSsoJtiRedirect(mcustNo, returnUrl) {
134	var $form = $('<form method="post" action="/mbr/issueSsoJti"></form>');
135	$form.append($('<input type="hidden" name="mcustNo">').val(mcustNo));
136	$form.append($('<input type="hidden" name="returnUrl">').val(returnUrl || location.pathname + location.search));
137	console.log("[HPOINT_SSO] submitting JTI issuance redirect", {hasMcustNo:!!mcustNo});
138	$form.appendTo('body').submit();
139}
140
141function fnLoginByJti(jti, returnUrl, loginHpYn) {
142	if (!jti && !loginHpYn) return false;
143	var loginResult = false;
144	var requestData = {"loginHpYn":loginHpYn || "Y"};
145	if (jti) requestData.jti = jti;
146	console.log("[HPOINT_SSO] selectUserLoginInfo request", {hasJti:!!jti});
147	$.ajax({
148		type:"POST", url:"/mbr/selectUserLoginInfo",
149		data:requestData,
150		dataType:"JSON", cache:false, async:false,
151		success:function(data){
152			console.log("[HPOINT_SSO] selectUserLoginInfo response", {code:data && data.response && data.response.code});
153			var response = data && data.response;
154			if (response && (response.code === "0000" || response.code === "00")) {
155				loginResult = true;
156				var targetUrl = returnUrl || "/index";
157				// 외부에서 전달된 JTI는 여기서 이미 검증·소비되었다.
158				// 같은 JTI로 다시 H.Point 쿠키 발급을 요청하지 않고 로그인 완료 URL로 이동한다.
159				console.log("[HPOINT_SSO] verified JTI login completed", {hasJti:!!jti, targetUrl:targetUrl});
160				if (returnUrl) location.href = returnUrl;
161				else location.reload();
162			} else {
163				alert("통합멤버쉽 로그인에 실패하였습니다.");
164			}
165		},
166		error:function(){ alert("통합멤버쉽 로그인에 실패하였습니다."); }
167	});
168	return loginResult;
169}
170
171// JTI를 쿠키로 전달받는 H.Point redirect 흐름 지원
172function fnLoginByJtiCookie(jti, returnUrl, loginHpYn) {
173	if (!jti) return false;
174	console.log("[HPOINT_SSO] setSsoJti request", {hasJti:true});
175	var loginResult = false;
176	$.ajax({
177		type:"POST", url:"/mbr/setSsoJti", data:{"jti":jti},
178		dataType:"JSON", cache:false, async:false,
179		success:function(data){
180			console.log("[HPOINT_SSO] setSsoJti response", {succYn:data && data.succYn});
181			if (data && data.succYn === "Y") {
182				// 쿠키 저장과 동시에 요청 파라미터에도 전달해 첫 요청부터 JTI가 누락되지 않도록 한다.
183				loginResult = fnLoginByJti(jti, returnUrl, loginHpYn);
184			}
185		},
186		error:function(){ loginResult = false; }
187	});
188	return loginResult;
189}

Line numbers count LF bytes from the start of the resource, as the search results do. Vendor segments are library code the classifier recognised; they are stored but not indexed. Bytes are shown as Latin1 characters, one per byte.