Skip to content

Commit 644f778

Browse files
committed
Add useLegacy to HttpsSSLPinningOptions
1 parent b9b6fd2 commit 644f778

File tree

3 files changed

+83
-58
lines changed

3 files changed

+83
-58
lines changed

src/https.common.d.ts

Lines changed: 29 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,29 @@
1+
import { Headers } from 'tns-core-modules/http';
2+
export interface HttpsSSLPinningOptions {
3+
host: string;
4+
certificate: string;
5+
allowInvalidCertificates?: boolean;
6+
validatesDomainName?: boolean;
7+
commonName?: string;
8+
useLegacy?: boolean;
9+
}
10+
export interface HttpsRequestObject {
11+
[key: string]: string | number;
12+
}
13+
export interface HttpsRequestOptions {
14+
url: string;
15+
method: 'GET' | 'POST' | 'PUT' | 'DELETE' | 'PATCH' | 'HEAD';
16+
headers?: Headers;
17+
params?: HttpsRequestObject;
18+
body?: HttpsRequestObject;
19+
allowLargeResponse?: boolean;
20+
timeout?: number;
21+
}
22+
export interface HttpsResponse {
23+
headers?: Headers;
24+
statusCode?: number;
25+
content?: any;
26+
reason?: string;
27+
reject?: boolean;
28+
failure?: any;
29+
}

src/https.common.ts

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,7 @@ export interface HttpsSSLPinningOptions {
66
allowInvalidCertificates?: boolean;
77
validatesDomainName?: boolean;
88
commonName?: string;
9+
useLegacy?: boolean;
910
}
1011

1112
export interface HttpsRequestObject {
@@ -36,4 +37,5 @@ export interface HttpsResponse {
3637
content?: any;
3738
reason?: string;
3839
reject?: boolean;
40+
failure?: any;
3941
}

src/https.ios.ts

Lines changed: 52 additions & 58 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,8 @@ interface Ipolicies {
77
secure?: AFSecurityPolicy;
88
}
99

10+
let useLegacy: boolean = false;
11+
1012
let policies: Ipolicies = {
1113
def: AFSecurityPolicy.defaultPolicy(),
1214
secured: false,
@@ -23,6 +25,7 @@ export function enableSSLPinning(options: Https.HttpsSSLPinningOptions) {
2325
let data = NSData.dataWithContentsOfFile(options.certificate);
2426
policies.secure.pinnedCertificates = NSSet.setWithObject(data);
2527
}
28+
useLegacy = (isDefined(options.useLegacy)) ? options.useLegacy : false;
2629
policies.secured = true;
2730
console.log('nativescript-https > Enabled SSL pinning');
2831
}
@@ -35,72 +38,41 @@ export function disableSSLPinning() {
3538
console.info('nativescript-https > Disabled SSL pinning by default');
3639

3740
function AFSuccess(resolve, task: NSURLSessionDataTask, data: NSDictionary<string, any> & NSData & NSArray<any>) {
38-
let content: any;
39-
if (data && data.class) {
40-
if (data.enumerateKeysAndObjectsUsingBlock || (<any>data) instanceof NSArray) {
41-
let serial = NSJSONSerialization.dataWithJSONObjectOptionsError(data, NSJSONWritingOptions.PrettyPrinted);
42-
content = NSString.alloc().initWithDataEncoding(serial, NSUTF8StringEncoding).toString();
43-
} else if ((<any>data) instanceof NSData) {
44-
content = NSString.alloc().initWithDataEncoding(data, NSASCIIStringEncoding).toString();
45-
} else {
46-
content = data;
47-
}
48-
49-
try {
50-
content = JSON.parse(content);
51-
} catch (ignore) {
52-
}
53-
54-
} else {
55-
content = data;
56-
}
57-
41+
let content = getData(data);
5842
resolve({task, content});
5943
}
6044

6145
function AFFailure(resolve, reject, task: NSURLSessionDataTask, error: NSError) {
6246
let data: NSDictionary<string, any> & NSData & NSArray<any> = error.userInfo.valueForKey(AFNetworkingOperationFailingURLResponseDataErrorKey);
63-
let content: any;
64-
if (data && data.class) {
65-
if (data.enumerateKeysAndObjectsUsingBlock || (<any>data) instanceof NSArray) {
66-
let serial = NSJSONSerialization.dataWithJSONObjectOptionsError(data, NSJSONWritingOptions.PrettyPrinted);
67-
content = NSString.alloc().initWithDataEncoding(serial, NSUTF8StringEncoding).toString();
68-
} else if ((<any>data) instanceof NSData) {
69-
content = NSString.alloc().initWithDataEncoding(data, NSASCIIStringEncoding).toString();
70-
} else {
71-
content = data;
47+
let parsedData = getData(data);
48+
if (useLegacy) {
49+
let failure: any = {
50+
body: parsedData,
51+
description: error.description,
52+
reason: error.localizedDescription,
53+
url: error.userInfo.objectForKey('NSErrorFailingURLKey').description
54+
};
55+
if (policies.secured === true) {
56+
failure.description = 'nativescript-https > Invalid SSL certificate! ' + error.description;
57+
}
58+
let reason = error.localizedDescription;
59+
let content = parsedData;
60+
resolve({task: task, content: content, reason: reason, failure: failure});
61+
} else {
62+
let content: any = {
63+
body: parsedData,
64+
description: error.description,
65+
reason: error.localizedDescription,
66+
url: error.userInfo.objectForKey('NSErrorFailingURLKey').description
67+
};
68+
69+
if (policies.secured === true) {
70+
content.description = 'nativescript-https > Invalid SSL certificate! ' + content.description;
7271
}
7372

74-
try {
75-
content = JSON.parse(content);
76-
} catch (e) {
77-
}
78-
} else {
79-
content = data;
80-
}
81-
/*let body = NSString.alloc().initWithDataEncoding(data, NSUTF8StringEncoding).toString();
82-
try {
83-
body = JSON.parse(body);
84-
} catch (e) {
85-
}
86-
let content: any = {
87-
body,
88-
description: error.description,
89-
reason: error.localizedDescription,
90-
url: error.userInfo.objectForKey('NSErrorFailingURLKey').description
91-
};
92-
*/
93-
let failure: any = {
94-
body: content,
95-
description: error.description,
96-
reason: error.localizedDescription,
97-
url: error.userInfo.objectForKey('NSErrorFailingURLKey').description
98-
};
99-
if (policies.secured === true) {
100-
failure.description = 'nativescript-https > Invalid SSL certificate! ' + error.description;
73+
let reason = error.localizedDescription;
74+
resolve({task, content, reason});
10175
}
102-
let reason = error.localizedDescription;
103-
resolve({task, content, reason, failure: failure});
10476
}
10577

10678
export function request(opts: Https.HttpsRequestOptions): Promise<Https.HttpsResponse> {
@@ -180,3 +152,25 @@ export function request(opts: Https.HttpsRequestOptions): Promise<Https.HttpsRes
180152
return Promise.resolve(sendi);
181153
});
182154
}
155+
156+
function getData(data) {
157+
let content: any;
158+
if (data && data.class) {
159+
if (data.enumerateKeysAndObjectsUsingBlock || (<any>data) instanceof NSArray) {
160+
let serial = NSJSONSerialization.dataWithJSONObjectOptionsError(data, NSJSONWritingOptions.PrettyPrinted);
161+
content = NSString.alloc().initWithDataEncoding(serial, NSUTF8StringEncoding).toString();
162+
} else if ((<any>data) instanceof NSData) {
163+
content = NSString.alloc().initWithDataEncoding(data, NSASCIIStringEncoding).toString();
164+
} else {
165+
content = data;
166+
}
167+
168+
try {
169+
content = JSON.parse(content);
170+
} catch (e) {
171+
}
172+
} else {
173+
content = data;
174+
}
175+
return content;
176+
}

0 commit comments

Comments
 (0)