213 lines
		
	
	
		
			6.8 KiB
		
	
	
	
		
			Haxe
		
	
	
	
	
	
		
		
			
		
	
	
			213 lines
		
	
	
		
			6.8 KiB
		
	
	
	
		
			Haxe
		
	
	
	
	
	
|  | /* | ||
|  |  * Copyright (C)2014-2020 Haxe Foundation | ||
|  |  * | ||
|  |  * Permission is hereby granted, free of charge, to any person obtaining a | ||
|  |  * copy of this software and associated documentation files (the "Software"), | ||
|  |  * to deal in the Software without restriction, including without limitation | ||
|  |  * the rights to use, copy, modify, merge, publish, distribute, sublicense, | ||
|  |  * and/or sell copies of the Software, and to permit persons to whom the | ||
|  |  * Software is furnished to do so, subject to the following conditions: | ||
|  |  * | ||
|  |  * The above copyright notice and this permission notice shall be included in | ||
|  |  * all copies or substantial portions of the Software. | ||
|  |  * | ||
|  |  * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR | ||
|  |  * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, | ||
|  |  * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE | ||
|  |  * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER | ||
|  |  * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING | ||
|  |  * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER | ||
|  |  * DEALINGS IN THE SOFTWARE. | ||
|  |  */ | ||
|  | 
 | ||
|  | package js.node; | ||
|  | 
 | ||
|  | import haxe.extern.EitherType; | ||
|  | import js.node.Buffer; | ||
|  | import js.node.tls.SecureContext; | ||
|  | import js.node.tls.SecurePair; | ||
|  | import js.node.tls.Server; | ||
|  | import js.node.tls.TLSSocket; | ||
|  | #if haxe4 | ||
|  | import js.lib.Error; | ||
|  | #else | ||
|  | import js.Error; | ||
|  | #end | ||
|  | 
 | ||
|  | typedef TlsOptionsBase = { | ||
|  | 	/** | ||
|  | 		If true the server will reject any connection which is not authorized with the list of supplied CAs. | ||
|  | 		This option only has an effect if `requestCert` is true. | ||
|  | 		Default: false. | ||
|  | 	**/ | ||
|  | 	@:optional var rejectUnauthorized:Bool; | ||
|  | 
 | ||
|  | 	/** | ||
|  | 		possible NPN protocols. (Protocols should be ordered by their priority). | ||
|  | 	**/ | ||
|  | 	@:optional var NPNProtocols:EitherType<Array<String>, Buffer>; | ||
|  | } | ||
|  | 
 | ||
|  | typedef TlsServerOptionsBase = { | ||
|  | 	> TlsOptionsBase, | ||
|  | 
 | ||
|  | 	/** | ||
|  | 		If true the server will request a certificate from clients that connect | ||
|  | 		and attempt to verify that certificate. | ||
|  | 		Default: false. | ||
|  | 	**/ | ||
|  | 	@:optional var requestCert:Bool; | ||
|  | 
 | ||
|  | 	/** | ||
|  | 		A function that will be called if client supports SNI TLS extension. | ||
|  | 		Two argument will be passed to it: `servername`, and `cb`. | ||
|  | 		SNICallback should invoke `cb(null, ctx)`, where `ctx` is a SecureContext instance. | ||
|  | 		(You can use tls.createSecureContext(...) to get proper `SecureContext`). | ||
|  | 		If `SNICallback` wasn't provided - default callback with high-level API will be used.
 | ||
|  | 	**/ | ||
|  | 	@:optional var SNICallback:#if (haxe_ver >= 4)(servername:String, cb:(Error->SecureContext)) -> Void #else String->(Error->SecureContext)->Void #end; | ||
|  | } | ||
|  | 
 | ||
|  | typedef TlsClientOptionsBase = { | ||
|  | 	> TlsOptionsBase, | ||
|  | 
 | ||
|  | 	/** | ||
|  | 		A Buffer instance, containing TLS session. | ||
|  | 	**/ | ||
|  | 	@:optional var session:Buffer; | ||
|  | 
 | ||
|  | 	/** | ||
|  | 		If true - OCSP status request extension would be added to client hello, | ||
|  | 		and OCSPResponse event will be emitted on socket before establishing secure communication | ||
|  | 	**/ | ||
|  | 	@:optional var requestOCSP:Bool; | ||
|  | } | ||
|  | 
 | ||
|  | /** | ||
|  | 	Base structure for options object used in tls methods. | ||
|  | **/ | ||
|  | typedef TlsCreateServerOptions = { | ||
|  | 	> TlsServerOptionsBase, | ||
|  | 	> SecureContextOptions, | ||
|  | 
 | ||
|  | 	/** | ||
|  | 		Abort the connection if the SSL/TLS handshake does not finish in this many milliseconds. | ||
|  | 		The default is 120 seconds. | ||
|  | 		A 'clientError' is emitted on the `tls.Server` object whenever a handshake times out. | ||
|  | 	**/ | ||
|  | 	@:optional var handshakeTimeout:Int; | ||
|  | 
 | ||
|  | 	/** | ||
|  | 		An integer specifying the seconds after which TLS session identifiers | ||
|  | 		and TLS session tickets created by the server are timed out. | ||
|  | 		See SSL_CTX_set_timeout for more details. | ||
|  | 	**/ | ||
|  | 	@:optional var sessionTimeout:Int; | ||
|  | 
 | ||
|  | 	/** | ||
|  | 		A 48-byte `Buffer` instance consisting of 16-byte prefix, 16-byte hmac key, 16-byte AES key. | ||
|  | 		You could use it to accept tls session tickets on multiple instances of tls server. | ||
|  | 
 | ||
|  | 		NOTE: Automatically shared between cluster module workers. | ||
|  | 	**/ | ||
|  | 	@:optional var ticketKeys:Buffer; | ||
|  | } | ||
|  | 
 | ||
|  | typedef TlsConnectOptions = { | ||
|  | 	> TlsClientOptionsBase, | ||
|  | 	> SecureContextOptions, | ||
|  | 
 | ||
|  | 	/** | ||
|  | 		Host the client should connect to. | ||
|  | 		Defaults to 'localhost' | ||
|  | 	**/ | ||
|  | 	@:optional var host:String; | ||
|  | 
 | ||
|  | 	/** | ||
|  | 		Port the client should connect to | ||
|  | 	**/ | ||
|  | 	@:optional var port:Int; | ||
|  | 
 | ||
|  | 	/** | ||
|  | 		Establish secure connection on a given socket rather than creating a new socket. | ||
|  | 		If this option is specified, `host` and `port` are ignored. | ||
|  | 	**/ | ||
|  | 	@:optional var socket:js.node.net.Socket; | ||
|  | 
 | ||
|  | 	/** | ||
|  | 		Creates unix socket connection to path. | ||
|  | 		If this option is specified, host and port are ignored. | ||
|  | 	**/ | ||
|  | 	@:optional var path:String; | ||
|  | 
 | ||
|  | 	/** | ||
|  | 		Servername for SNI (Server Name Indication) TLS extension. | ||
|  | 	**/ | ||
|  | 	@:optional var servername:String; | ||
|  | 
 | ||
|  | 	/** | ||
|  | 		An override for checking server's hostname against the certificate. | ||
|  | 		Should return an error if verification fails. Return `js.Lib.undefined` if passing. | ||
|  | 	**/ | ||
|  | 	@:optional var checkServerIdentity:String -> {}->Dynamic; // TODO: peer cerficicate structure | ||
|  | 
 | ||
|  | } | ||
|  | 
 | ||
|  | /** | ||
|  | 	The tls module uses OpenSSL to provide Transport Layer Security | ||
|  | 	and/or Secure Socket Layer: encrypted stream communication. | ||
|  | **/ | ||
|  | @:jsRequire("tls") | ||
|  | extern class Tls { | ||
|  | 	/** | ||
|  | 		renegotiation limit, default is 3. | ||
|  | 	**/ | ||
|  | 	static var CLIENT_RENEG_LIMIT:Int; | ||
|  | 
 | ||
|  | 	/** | ||
|  | 		renegotiation window in seconds, default is 10 minutes. | ||
|  | 	**/ | ||
|  | 	static var CLIENT_RENEG_WINDOW:Int; | ||
|  | 
 | ||
|  | 	/** | ||
|  | 		Size of slab buffer used by all tls servers and clients. Default: 10 * 1024 * 1024. | ||
|  | 
 | ||
|  | 		Don't change the defaults unless you know what you are doing.
 | ||
|  | 	**/ | ||
|  | 	static var SLAB_BUFFER_SIZE:Int; | ||
|  | 
 | ||
|  | 	/** | ||
|  | 		Returns an array with the names of the supported SSL ciphers. | ||
|  | 	**/ | ||
|  | 	static function getCiphers():Array<String>; | ||
|  | 
 | ||
|  | 	/** | ||
|  | 		Creates a new `Server`. | ||
|  | 		The `connectionListener` argument is automatically set as a listener for the 'secureConnection' event. | ||
|  | 	**/ | ||
|  | 	static function createServer(options:TlsCreateServerOptions, ?secureConnectionListener:TLSSocket->Void):Server; | ||
|  | 
 | ||
|  | 	/** | ||
|  | 		Creates a new client connection to the given `port` and `host` (old API) or `options.port` and `options.host`. | ||
|  | 		If `host` is omitted, it defaults to 'localhost'. | ||
|  | 	**/ | ||
|  | 	@:overload(function(port:Int, ?callback:Void->Void):TLSSocket {}) | ||
|  | 	@:overload(function(port:Int, options:TlsConnectOptions, ?callback:Void->Void):TLSSocket {}) | ||
|  | 	@:overload(function(port:Int, host:String, ?callback:Void->Void):TLSSocket {}) | ||
|  | 	@:overload(function(port:Int, host:String, options:TlsConnectOptions, ?callback:Void->Void):TLSSocket {}) | ||
|  | 	static function connect(options:TlsConnectOptions, ?callback:Void->Void):TLSSocket; | ||
|  | 
 | ||
|  | 	/** | ||
|  | 		Creates a credentials object. | ||
|  | 	**/ | ||
|  | 	static function createSecureContext(?details:SecureContextOptions):SecureContext; | ||
|  | 
 | ||
|  | 	/** | ||
|  | 		Creates a new secure pair object with two streams, one of which reads/writes encrypted data, | ||
|  | 		and one reads/writes cleartext data. | ||
|  | 		Generally the encrypted one is piped to/from an incoming encrypted data stream, | ||
|  | 		and the cleartext one is used as a replacement for the initial encrypted stream. | ||
|  | 	**/ | ||
|  | 	static function createSecurePair(?context:SecureContext, ?isServer:Bool, ?requestCert:Bool, ?rejectUnauthorized:Bool):SecurePair; | ||
|  | } |