linerb 0.1.2
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +7 -0
- data/lib/linerb.rb +1 -0
- data/lib/linerb/api/pollApi.rb +1 -0
- data/lib/linerb/api/talkApi.rb +13 -0
- data/lib/linerb/auth.rb +126 -0
- data/lib/linerb/client.rb +38 -0
- data/lib/linerb/config.rb +14 -0
- data/lib/linerb/gen-rb/account_auth_factor_eap_connect_service.rb +268 -0
- data/lib/linerb/gen-rb/auth_service.rb +905 -0
- data/lib/linerb/gen-rb/call_service.rb +837 -0
- data/lib/linerb/gen-rb/channel_service.rb +883 -0
- data/lib/linerb/gen-rb/primary_account_init_service.rb +1224 -0
- data/lib/linerb/gen-rb/secondary_qr_code_login_permit.rb +268 -0
- data/lib/linerb/gen-rb/secondary_qr_code_login_permit_notice_service.rb +140 -0
- data/lib/linerb/gen-rb/secondary_qrcode_login_service.rb +326 -0
- data/lib/linerb/gen-rb/takagi_chan_constants.rb +9 -0
- data/lib/linerb/gen-rb/takagi_chan_types.rb +16981 -0
- data/lib/linerb/gen-rb/talk_service.rb +5800 -0
- data/lib/linerb/version.rb +3 -0
- metadata +103 -0
checksums.yaml
ADDED
@@ -0,0 +1,7 @@
|
|
1
|
+
---
|
2
|
+
SHA256:
|
3
|
+
metadata.gz: fc0f82cf83433cc6e798d54d542ffe15839587526c60eab38a8ded0846882aea
|
4
|
+
data.tar.gz: 38bc0d916bc2f9d857b9740e3a27f4d931d6dcbb27695251708e4e5dbcacbf27
|
5
|
+
SHA512:
|
6
|
+
metadata.gz: 69487a94fe2dc9c9170d16c945ef5010ce96d6a0c6fbcc897e52b92296177a8b123638fb8e55b1eddc42eba743887f02f141bbf4d47db6800e491728fb9eb376
|
7
|
+
data.tar.gz: c4f65d968af9e5c843e9b3325e9f12b1afc93470e2c6f1529423cebd0a5e35840605854919e278dd7a4146cdf528849b6bf9993b083719f316e9ade4e4d6a473
|
data/lib/linerb.rb
ADDED
@@ -0,0 +1 @@
|
|
1
|
+
require 'linerb/client'
|
@@ -0,0 +1 @@
|
|
1
|
+
#in progress
|
data/lib/linerb/auth.rb
ADDED
@@ -0,0 +1,126 @@
|
|
1
|
+
$:.push('./gen-rb')
|
2
|
+
|
3
|
+
require 'thrift'
|
4
|
+
require 'openssl'
|
5
|
+
require "base64"
|
6
|
+
require 'cgi'
|
7
|
+
require 'securerandom'
|
8
|
+
|
9
|
+
require_relative 'config'
|
10
|
+
|
11
|
+
require_relative 'gen-rb/takagi_chan_types'
|
12
|
+
require_relative 'gen-rb/secondary_qrcode_login_service'
|
13
|
+
require_relative 'gen-rb/secondary_qr_code_login_permit_notice_service'
|
14
|
+
|
15
|
+
begin
|
16
|
+
|
17
|
+
class Auth
|
18
|
+
|
19
|
+
def initialize(authToken:, certificate:)
|
20
|
+
@a = authToken
|
21
|
+
@c = certificate
|
22
|
+
|
23
|
+
#authToken login is in progress
|
24
|
+
end
|
25
|
+
|
26
|
+
def client_proto(url, headers)
|
27
|
+
|
28
|
+
transport = Thrift::HTTPClientTransport.new(url)
|
29
|
+
transport.add_headers(headers)
|
30
|
+
|
31
|
+
protocol = Thrift::CompactProtocol.new(transport)
|
32
|
+
|
33
|
+
return protocol
|
34
|
+
end
|
35
|
+
|
36
|
+
def login
|
37
|
+
protocol = client_proto(Config::LOGIN_URL, Config::HEADERS)
|
38
|
+
loginClient = SecondaryQrcodeLoginService::Client.new(protocol)
|
39
|
+
|
40
|
+
sessionId = loginClient.createSession(CreateQrSessionRequest).authSessionId
|
41
|
+
|
42
|
+
qr_req = CreateQrCodeRequest.new
|
43
|
+
qr_req::authSessionId = sessionId
|
44
|
+
|
45
|
+
qr_url = loginClient.createQrCode(qr_req).callbackUrl
|
46
|
+
|
47
|
+
secret = Base64.strict_encode64(SecureRandom.base64(32))
|
48
|
+
version = 1
|
49
|
+
e2ee = "?secret=#{secret}" + "&e2eeVersion=#{version}"
|
50
|
+
puts "[LOGIN] => " + qr_url + e2ee
|
51
|
+
|
52
|
+
Config::HEADERS[:"X-Line-Access"] = ""
|
53
|
+
|
54
|
+
protocol = client_proto(Config::PERMIT_NOTICE_URL, Config::HEADERS)
|
55
|
+
certClient = SecondaryQrCodeLoginPermitNoticeService::Client.new(protocol)
|
56
|
+
|
57
|
+
qr_check = CheckQrCodeVerifiedRequest.new
|
58
|
+
qr_check::authSessionId = sessionId
|
59
|
+
|
60
|
+
begin
|
61
|
+
certClient.checkQrCodeVerified(qr_check)
|
62
|
+
|
63
|
+
rescue Net::ReadTimeout
|
64
|
+
puts "[Timeout] QrCode verification"
|
65
|
+
exit(1)
|
66
|
+
end
|
67
|
+
|
68
|
+
Config::HEADERS.delete(:"X-Line-Access") #=> ""
|
69
|
+
|
70
|
+
protocol = client_proto(Config::LOGIN_URL, Config::HEADERS)
|
71
|
+
loginClient = SecondaryQrcodeLoginService::Client.new(protocol)
|
72
|
+
|
73
|
+
begin
|
74
|
+
|
75
|
+
certificate_check = VerifyCertificateRequest.new
|
76
|
+
certificate_check::authSessionId = sessionId
|
77
|
+
certificate_check::certificate = @certificate
|
78
|
+
|
79
|
+
loginClient.verifyCertificate(certificate_check)
|
80
|
+
|
81
|
+
login_req = QrCodeLoginRequest.new
|
82
|
+
login_req.authSessionId = sessionId
|
83
|
+
login_req.systemName = "Ruby on Rails"
|
84
|
+
login_req.autoLoginIsRequired = FALSE
|
85
|
+
|
86
|
+
res = loginClient.qrCodeLogin(login_req)
|
87
|
+
|
88
|
+
puts "[CERT] => " + res.certificate
|
89
|
+
puts "[TOKEN] => " + res.accessToken
|
90
|
+
|
91
|
+
Config::HEADERS[:"X-Line-Access"] = res.accessToken
|
92
|
+
|
93
|
+
rescue SecondaryQrCodeException
|
94
|
+
pin_req = CreatePinCodeRequest.new
|
95
|
+
pin_req::authSessionId = sessionId
|
96
|
+
pincode = loginClient.createPinCode(pin_req).pinCode
|
97
|
+
|
98
|
+
if pincode != nil then
|
99
|
+
puts "[PIN] => " + pincode
|
100
|
+
pin_check = CheckPinCodeVerifiedRequest.new
|
101
|
+
pin_check::authSessionId = sessionId
|
102
|
+
|
103
|
+
begin
|
104
|
+
certClient.checkPinCodeVerified(pin_check)
|
105
|
+
|
106
|
+
login_req = QrCodeLoginRequest.new
|
107
|
+
login_req.authSessionId = sessionId
|
108
|
+
login_req.systemName = "Ruby on Rails"
|
109
|
+
login_req.autoLoginIsRequired = FALSE
|
110
|
+
|
111
|
+
res = loginClient.qrCodeLogin(login_req)
|
112
|
+
|
113
|
+
puts "[CERT] => " + res.certificate
|
114
|
+
puts "[TOKEN] => " + res.accessToken
|
115
|
+
|
116
|
+
Config::HEADERS[:"X-Line-Access"] = res.accessToken
|
117
|
+
|
118
|
+
rescue Net::ReadTimeout
|
119
|
+
puts "[Timeout] PinCode verification"
|
120
|
+
exit(1)
|
121
|
+
end
|
122
|
+
end
|
123
|
+
end
|
124
|
+
end
|
125
|
+
end
|
126
|
+
end
|
@@ -0,0 +1,38 @@
|
|
1
|
+
$:.push('./gen-rb')
|
2
|
+
|
3
|
+
require_relative 'auth'
|
4
|
+
require_relative 'gen-rb/talk_service'
|
5
|
+
|
6
|
+
class LineClient
|
7
|
+
|
8
|
+
def initialize(authToken:, certificate:)
|
9
|
+
@a = authToken
|
10
|
+
@c = certificate
|
11
|
+
end
|
12
|
+
|
13
|
+
def doAuthService
|
14
|
+
Auth.new(authToken: @a, certificate: @c).login
|
15
|
+
end
|
16
|
+
|
17
|
+
def getTalkService
|
18
|
+
transport = Thrift::HTTPClientTransport.new(Config::TALK_SERVICE_V4_URL)
|
19
|
+
transport.add_headers(Config::HEADERS)
|
20
|
+
|
21
|
+
protocol = Thrift::CompactProtocol.new(transport)
|
22
|
+
|
23
|
+
client = TalkService::Client.new(protocol)
|
24
|
+
|
25
|
+
return client
|
26
|
+
end
|
27
|
+
|
28
|
+
def getPollService
|
29
|
+
transport = Thrift::HTTPClientTransport.new(Config::POLL_SERVICE_V4_URL)
|
30
|
+
transport.add_headers(Config::HEADERS)
|
31
|
+
|
32
|
+
protocol = Thrift::CompactProtocol.new(transport)
|
33
|
+
|
34
|
+
client = TalkService::Client.new(protocol)
|
35
|
+
|
36
|
+
return client
|
37
|
+
end
|
38
|
+
end
|
@@ -0,0 +1,14 @@
|
|
1
|
+
module Config
|
2
|
+
HOST_URL = "https://legy-jp-addr.line.naver.jp"
|
3
|
+
LOGIN_URL = HOST_URL + "/acct/lgn/sq/v1"
|
4
|
+
PERMIT_NOTICE_URL = HOST_URL + "/acct/lp/lgn/sq/v1"
|
5
|
+
|
6
|
+
TALK_SERVICE_V4_URL = HOST_URL + "/S4"
|
7
|
+
POLL_SERVICE_V4_URL = HOST_URL + "/P4"
|
8
|
+
|
9
|
+
HEADERS = {
|
10
|
+
"User-Agent": "LLA/2.11.1 Nexus 5X 10",
|
11
|
+
"X-Line-Application": "ANDROIDLITE\t2.11.1\tAndroid OS\t10.0;SECONDARY",
|
12
|
+
"x-lal": "ja_jp",
|
13
|
+
}
|
14
|
+
end
|
@@ -0,0 +1,268 @@
|
|
1
|
+
#
|
2
|
+
# Autogenerated by Thrift Compiler (0.13.0)
|
3
|
+
#
|
4
|
+
# DO NOT EDIT UNLESS YOU ARE SURE THAT YOU KNOW WHAT YOU ARE DOING
|
5
|
+
#
|
6
|
+
|
7
|
+
require 'thrift'
|
8
|
+
require_relative 'takagi_chan_types'
|
9
|
+
|
10
|
+
module AccountAuthFactorEapConnectService
|
11
|
+
class Client
|
12
|
+
include ::Thrift::Client
|
13
|
+
|
14
|
+
def connectEapAccount(request)
|
15
|
+
send_connectEapAccount(request)
|
16
|
+
return recv_connectEapAccount()
|
17
|
+
end
|
18
|
+
|
19
|
+
def send_connectEapAccount(request)
|
20
|
+
send_message('connectEapAccount', ConnectEapAccount_args, :request => request)
|
21
|
+
end
|
22
|
+
|
23
|
+
def recv_connectEapAccount()
|
24
|
+
result = receive_message(ConnectEapAccount_result)
|
25
|
+
return result.success unless result.success.nil?
|
26
|
+
raise result.e unless result.e.nil?
|
27
|
+
raise ::Thrift::ApplicationException.new(::Thrift::ApplicationException::MISSING_RESULT, 'connectEapAccount failed: unknown result')
|
28
|
+
end
|
29
|
+
|
30
|
+
def disconnectEapAccount(request)
|
31
|
+
send_disconnectEapAccount(request)
|
32
|
+
return recv_disconnectEapAccount()
|
33
|
+
end
|
34
|
+
|
35
|
+
def send_disconnectEapAccount(request)
|
36
|
+
send_message('disconnectEapAccount', DisconnectEapAccount_args, :request => request)
|
37
|
+
end
|
38
|
+
|
39
|
+
def recv_disconnectEapAccount()
|
40
|
+
result = receive_message(DisconnectEapAccount_result)
|
41
|
+
return result.success unless result.success.nil?
|
42
|
+
raise result.e unless result.e.nil?
|
43
|
+
raise ::Thrift::ApplicationException.new(::Thrift::ApplicationException::MISSING_RESULT, 'disconnectEapAccount failed: unknown result')
|
44
|
+
end
|
45
|
+
|
46
|
+
def openSession(request)
|
47
|
+
send_openSession(request)
|
48
|
+
return recv_openSession()
|
49
|
+
end
|
50
|
+
|
51
|
+
def send_openSession(request)
|
52
|
+
send_message('openSession', OpenSession_args, :request => request)
|
53
|
+
end
|
54
|
+
|
55
|
+
def recv_openSession()
|
56
|
+
result = receive_message(OpenSession_result)
|
57
|
+
return result.success unless result.success.nil?
|
58
|
+
raise result.e unless result.e.nil?
|
59
|
+
raise ::Thrift::ApplicationException.new(::Thrift::ApplicationException::MISSING_RESULT, 'openSession failed: unknown result')
|
60
|
+
end
|
61
|
+
|
62
|
+
def verifyEapLogin(request)
|
63
|
+
send_verifyEapLogin(request)
|
64
|
+
return recv_verifyEapLogin()
|
65
|
+
end
|
66
|
+
|
67
|
+
def send_verifyEapLogin(request)
|
68
|
+
send_message('verifyEapLogin', VerifyEapLogin_args, :request => request)
|
69
|
+
end
|
70
|
+
|
71
|
+
def recv_verifyEapLogin()
|
72
|
+
result = receive_message(VerifyEapLogin_result)
|
73
|
+
return result.success unless result.success.nil?
|
74
|
+
raise result.e unless result.e.nil?
|
75
|
+
raise ::Thrift::ApplicationException.new(::Thrift::ApplicationException::MISSING_RESULT, 'verifyEapLogin failed: unknown result')
|
76
|
+
end
|
77
|
+
|
78
|
+
end
|
79
|
+
|
80
|
+
class Processor
|
81
|
+
include ::Thrift::Processor
|
82
|
+
|
83
|
+
def process_connectEapAccount(seqid, iprot, oprot)
|
84
|
+
args = read_args(iprot, ConnectEapAccount_args)
|
85
|
+
result = ConnectEapAccount_result.new()
|
86
|
+
begin
|
87
|
+
result.success = @handler.connectEapAccount(args.request)
|
88
|
+
rescue ::AccountEapConnectException => e
|
89
|
+
result.e = e
|
90
|
+
end
|
91
|
+
write_result(result, oprot, 'connectEapAccount', seqid)
|
92
|
+
end
|
93
|
+
|
94
|
+
def process_disconnectEapAccount(seqid, iprot, oprot)
|
95
|
+
args = read_args(iprot, DisconnectEapAccount_args)
|
96
|
+
result = DisconnectEapAccount_result.new()
|
97
|
+
begin
|
98
|
+
result.success = @handler.disconnectEapAccount(args.request)
|
99
|
+
rescue ::AccountEapConnectException => e
|
100
|
+
result.e = e
|
101
|
+
end
|
102
|
+
write_result(result, oprot, 'disconnectEapAccount', seqid)
|
103
|
+
end
|
104
|
+
|
105
|
+
def process_openSession(seqid, iprot, oprot)
|
106
|
+
args = read_args(iprot, OpenSession_args)
|
107
|
+
result = OpenSession_result.new()
|
108
|
+
begin
|
109
|
+
result.success = @handler.openSession(args.request)
|
110
|
+
rescue ::AuthException => e
|
111
|
+
result.e = e
|
112
|
+
end
|
113
|
+
write_result(result, oprot, 'openSession', seqid)
|
114
|
+
end
|
115
|
+
|
116
|
+
def process_verifyEapLogin(seqid, iprot, oprot)
|
117
|
+
args = read_args(iprot, VerifyEapLogin_args)
|
118
|
+
result = VerifyEapLogin_result.new()
|
119
|
+
begin
|
120
|
+
result.success = @handler.verifyEapLogin(args.request)
|
121
|
+
rescue ::AccountEapConnectException => e
|
122
|
+
result.e = e
|
123
|
+
end
|
124
|
+
write_result(result, oprot, 'verifyEapLogin', seqid)
|
125
|
+
end
|
126
|
+
|
127
|
+
end
|
128
|
+
|
129
|
+
# HELPER FUNCTIONS AND STRUCTURES
|
130
|
+
|
131
|
+
class ConnectEapAccount_args
|
132
|
+
include ::Thrift::Struct, ::Thrift::Struct_Union
|
133
|
+
REQUEST = 1
|
134
|
+
|
135
|
+
FIELDS = {
|
136
|
+
REQUEST => {:type => ::Thrift::Types::STRUCT, :name => 'request', :class => ::ConnectEapAccountRequest}
|
137
|
+
}
|
138
|
+
|
139
|
+
def struct_fields; FIELDS; end
|
140
|
+
|
141
|
+
def validate
|
142
|
+
end
|
143
|
+
|
144
|
+
::Thrift::Struct.generate_accessors self
|
145
|
+
end
|
146
|
+
|
147
|
+
class ConnectEapAccount_result
|
148
|
+
include ::Thrift::Struct, ::Thrift::Struct_Union
|
149
|
+
SUCCESS = 0
|
150
|
+
E = 1
|
151
|
+
|
152
|
+
FIELDS = {
|
153
|
+
SUCCESS => {:type => ::Thrift::Types::STRUCT, :name => 'success', :class => ::ConnectEapAccountResponse},
|
154
|
+
E => {:type => ::Thrift::Types::STRUCT, :name => 'e', :class => ::AccountEapConnectException}
|
155
|
+
}
|
156
|
+
|
157
|
+
def struct_fields; FIELDS; end
|
158
|
+
|
159
|
+
def validate
|
160
|
+
end
|
161
|
+
|
162
|
+
::Thrift::Struct.generate_accessors self
|
163
|
+
end
|
164
|
+
|
165
|
+
class DisconnectEapAccount_args
|
166
|
+
include ::Thrift::Struct, ::Thrift::Struct_Union
|
167
|
+
REQUEST = 1
|
168
|
+
|
169
|
+
FIELDS = {
|
170
|
+
REQUEST => {:type => ::Thrift::Types::STRUCT, :name => 'request', :class => ::DisconnectEapAccountRequest}
|
171
|
+
}
|
172
|
+
|
173
|
+
def struct_fields; FIELDS; end
|
174
|
+
|
175
|
+
def validate
|
176
|
+
end
|
177
|
+
|
178
|
+
::Thrift::Struct.generate_accessors self
|
179
|
+
end
|
180
|
+
|
181
|
+
class DisconnectEapAccount_result
|
182
|
+
include ::Thrift::Struct, ::Thrift::Struct_Union
|
183
|
+
SUCCESS = 0
|
184
|
+
E = 1
|
185
|
+
|
186
|
+
FIELDS = {
|
187
|
+
SUCCESS => {:type => ::Thrift::Types::STRUCT, :name => 'success', :class => ::DisconnectEapAccountResponse},
|
188
|
+
E => {:type => ::Thrift::Types::STRUCT, :name => 'e', :class => ::AccountEapConnectException}
|
189
|
+
}
|
190
|
+
|
191
|
+
def struct_fields; FIELDS; end
|
192
|
+
|
193
|
+
def validate
|
194
|
+
end
|
195
|
+
|
196
|
+
::Thrift::Struct.generate_accessors self
|
197
|
+
end
|
198
|
+
|
199
|
+
class OpenSession_args
|
200
|
+
include ::Thrift::Struct, ::Thrift::Struct_Union
|
201
|
+
REQUEST = 1
|
202
|
+
|
203
|
+
FIELDS = {
|
204
|
+
REQUEST => {:type => ::Thrift::Types::STRUCT, :name => 'request', :class => ::OpenSessionRequest}
|
205
|
+
}
|
206
|
+
|
207
|
+
def struct_fields; FIELDS; end
|
208
|
+
|
209
|
+
def validate
|
210
|
+
end
|
211
|
+
|
212
|
+
::Thrift::Struct.generate_accessors self
|
213
|
+
end
|
214
|
+
|
215
|
+
class OpenSession_result
|
216
|
+
include ::Thrift::Struct, ::Thrift::Struct_Union
|
217
|
+
SUCCESS = 0
|
218
|
+
E = 1
|
219
|
+
|
220
|
+
FIELDS = {
|
221
|
+
SUCCESS => {:type => ::Thrift::Types::STRING, :name => 'success'},
|
222
|
+
E => {:type => ::Thrift::Types::STRUCT, :name => 'e', :class => ::AuthException}
|
223
|
+
}
|
224
|
+
|
225
|
+
def struct_fields; FIELDS; end
|
226
|
+
|
227
|
+
def validate
|
228
|
+
end
|
229
|
+
|
230
|
+
::Thrift::Struct.generate_accessors self
|
231
|
+
end
|
232
|
+
|
233
|
+
class VerifyEapLogin_args
|
234
|
+
include ::Thrift::Struct, ::Thrift::Struct_Union
|
235
|
+
REQUEST = 1
|
236
|
+
|
237
|
+
FIELDS = {
|
238
|
+
REQUEST => {:type => ::Thrift::Types::STRUCT, :name => 'request', :class => ::VerifyEapLoginRequest}
|
239
|
+
}
|
240
|
+
|
241
|
+
def struct_fields; FIELDS; end
|
242
|
+
|
243
|
+
def validate
|
244
|
+
end
|
245
|
+
|
246
|
+
::Thrift::Struct.generate_accessors self
|
247
|
+
end
|
248
|
+
|
249
|
+
class VerifyEapLogin_result
|
250
|
+
include ::Thrift::Struct, ::Thrift::Struct_Union
|
251
|
+
SUCCESS = 0
|
252
|
+
E = 1
|
253
|
+
|
254
|
+
FIELDS = {
|
255
|
+
SUCCESS => {:type => ::Thrift::Types::STRUCT, :name => 'success', :class => ::VerifyEapLoginResponse},
|
256
|
+
E => {:type => ::Thrift::Types::STRUCT, :name => 'e', :class => ::AccountEapConnectException}
|
257
|
+
}
|
258
|
+
|
259
|
+
def struct_fields; FIELDS; end
|
260
|
+
|
261
|
+
def validate
|
262
|
+
end
|
263
|
+
|
264
|
+
::Thrift::Struct.generate_accessors self
|
265
|
+
end
|
266
|
+
|
267
|
+
end
|
268
|
+
|