@@ -6,7 +6,10 @@ import Logging
6
6
import NIOHTTP1
7
7
8
8
public struct ElasticsearchClient {
9
-
9
+
10
+ public static let defaultPort = 9200
11
+ public static let allowedUrlSchemes = [ " http " , " https " ]
12
+
10
13
let requester : ElasticsearchRequester
11
14
let eventLoop : EventLoop
12
15
let logger : Logger
@@ -17,25 +20,68 @@ public struct ElasticsearchClient {
17
20
let password : String ?
18
21
let jsonEncoder : JSONEncoder
19
22
let jsonDecoder : JSONDecoder
23
+
24
+ public init ( httpClient: HTTPClient , eventLoop: EventLoop , logger: Logger , url string: String , username: String ? = nil , password: String ? = nil , jsonEncoder: JSONEncoder = JSONEncoder ( ) , jsonDecoder: JSONDecoder = JSONDecoder ( ) ) throws {
25
+ guard let url = URL ( string: string) else { throw ValidationError . invalidURLString }
26
+ try self . init (
27
+ httpClient: httpClient,
28
+ eventLoop: eventLoop,
29
+ logger: logger,
30
+ url: url,
31
+ username: username,
32
+ password: password,
33
+ jsonEncoder: jsonEncoder,
34
+ jsonDecoder: jsonDecoder
35
+ )
36
+ }
20
37
21
- public init ( httpClient: HTTPClient , eventLoop: EventLoop , logger: Logger , scheme: String = " http " , host: String , port: Int ? = 9200 , username: String ? = nil , password: String ? = nil , jsonEncoder: JSONEncoder = JSONEncoder ( ) , jsonDecoder: JSONDecoder = JSONDecoder ( ) ) {
22
- self . eventLoop = eventLoop
23
- self . logger = logger
24
- self . scheme = scheme
25
- self . host = host
26
- self . port = port
27
- self . username = username
28
- self . password = password
29
- self . jsonEncoder = jsonEncoder
30
- self . jsonDecoder = jsonDecoder
31
- self . requester = HTTPClientElasticsearchRequester ( eventLoop: eventLoop, logger: logger, client: httpClient)
38
+ public init ( httpClient: HTTPClient , eventLoop: EventLoop , logger: Logger , url: URL , username: String ? = nil , password: String ? = nil , jsonEncoder: JSONEncoder = JSONEncoder ( ) , jsonDecoder: JSONDecoder = JSONDecoder ( ) ) throws {
39
+ guard
40
+ let scheme = url. scheme,
41
+ !scheme. isEmpty
42
+ else { throw ValidationError . missingURLScheme }
43
+ guard Self . allowedUrlSchemes. contains ( scheme) else { throw ValidationError . invalidURLScheme }
44
+ guard let host = url. host, !host. isEmpty else { throw ValidationError . missingURLHost }
45
+
46
+ try self . init (
47
+ requester: HTTPClientElasticsearchRequester ( eventLoop: eventLoop, logger: logger, client: httpClient) ,
48
+ eventLoop: eventLoop,
49
+ logger: logger,
50
+ scheme: scheme,
51
+ host: host,
52
+ port: url. port,
53
+ username: username,
54
+ password: password,
55
+ jsonEncoder: jsonEncoder,
56
+ jsonDecoder: jsonDecoder
57
+ )
58
+ }
59
+
60
+ public init ( httpClient: HTTPClient , eventLoop: EventLoop , logger: Logger , scheme: String ? = nil , host: String , port: Int ? = defaultPort, username: String ? = nil , password: String ? = nil , jsonEncoder: JSONEncoder = JSONEncoder ( ) , jsonDecoder: JSONDecoder = JSONDecoder ( ) ) throws {
61
+ try self . init (
62
+ requester: HTTPClientElasticsearchRequester ( eventLoop: eventLoop, logger: logger, client: httpClient) ,
63
+ eventLoop: eventLoop,
64
+ logger: logger,
65
+ scheme: scheme,
66
+ host: host,
67
+ port: port,
68
+ username: username,
69
+ password: password,
70
+ jsonEncoder: jsonEncoder,
71
+ jsonDecoder: jsonDecoder
72
+ )
32
73
}
33
74
34
- public init ( requester: ElasticsearchRequester , eventLoop: EventLoop , logger: Logger , scheme: String = " http " , host: String , port: Int ? = 9200 , username: String ? = nil , password: String ? = nil , jsonEncoder: JSONEncoder = JSONEncoder ( ) , jsonDecoder: JSONDecoder = JSONDecoder ( ) ) {
75
+ public init ( requester: ElasticsearchRequester , eventLoop: EventLoop , logger: Logger , scheme: String ? = nil , host: String , port: Int ? = defaultPort , username: String ? = nil , password: String ? = nil , jsonEncoder: JSONEncoder = JSONEncoder ( ) , jsonDecoder: JSONDecoder = JSONDecoder ( ) ) throws {
35
76
self . requester = requester
36
77
self . eventLoop = eventLoop
37
78
self . logger = logger
38
- self . scheme = scheme
79
+ if let scheme = scheme {
80
+ guard Self . allowedUrlSchemes. contains ( scheme) else { throw ValidationError . invalidURLScheme }
81
+ self . scheme = scheme
82
+ } else {
83
+ self . scheme = Self . allowedUrlSchemes. first!
84
+ }
39
85
self . host = host
40
86
self . port = port
41
87
self . username = username
0 commit comments