xify-rocket_chat 0.0.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +7 -0
- data/lib/xify/base/rocket_chat.rb +77 -0
- data/lib/xify/input/rocket_chat.rb +42 -0
- data/lib/xify/output/rocket_chat.rb +28 -0
- metadata +76 -0
checksums.yaml
ADDED
@@ -0,0 +1,7 @@
|
|
1
|
+
---
|
2
|
+
SHA256:
|
3
|
+
metadata.gz: 557292d4b7cf3ed6a1f8e3fa50e75daedec4dbebab058f79fdf793af355f87eb
|
4
|
+
data.tar.gz: 8f1a92e1a135f8c8ca2e02eedb367975b21ed875927dd177f2ad7b98b88f5f29
|
5
|
+
SHA512:
|
6
|
+
metadata.gz: 55539da4d0f7397f09b79139861ab23358787c6c984de3898eef207026265897e16982306b77303127d8f18f1a783e1576319a7855b9608f2a89db712c5d8ce4
|
7
|
+
data.tar.gz: fd3a6436768f25edf1d35accfda2449a2cb85196c7d5b7aeb227b62d2330443a98f19075b599ccfe8f4742fd45acd434722a9158acadd1ef89c6c3171321fe01
|
@@ -0,0 +1,77 @@
|
|
1
|
+
require 'json'
|
2
|
+
require 'net/https'
|
3
|
+
require 'time'
|
4
|
+
|
5
|
+
module Xify
|
6
|
+
module Base
|
7
|
+
class RocketChat
|
8
|
+
def initialize(config)
|
9
|
+
@config = config
|
10
|
+
|
11
|
+
uri = URI.parse config['uri']
|
12
|
+
@http = Net::HTTP.new uri.host, uri.port
|
13
|
+
@http.use_ssl = true
|
14
|
+
|
15
|
+
working_dir = "#{ENV['HOME']}/.xify/RocketChat"
|
16
|
+
Dir.mkdir working_dir rescue Errno::EEXIST
|
17
|
+
@auth_file = "#{working_dir}/#{@config['user']}.json"
|
18
|
+
end
|
19
|
+
|
20
|
+
def request(method, path, &block)
|
21
|
+
login unless @auth_data
|
22
|
+
|
23
|
+
req = Object.const_get("Net::HTTP::#{method.capitalize}").new path,
|
24
|
+
'X-User-Id' => @auth_data['userId'],
|
25
|
+
'X-Auth-Token' => @auth_data['authToken']
|
26
|
+
|
27
|
+
yield req if block_given?
|
28
|
+
|
29
|
+
res = @http.request req
|
30
|
+
|
31
|
+
case res
|
32
|
+
when Net::HTTPUnauthorized
|
33
|
+
relogin
|
34
|
+
request method, path, &block
|
35
|
+
when Net::HTTPSuccess
|
36
|
+
# nothing
|
37
|
+
else
|
38
|
+
$stderr.puts res.body
|
39
|
+
raise "Error on #{method.upcase} #{@config['uri']}#{path}: #{res.code} #{res.message}"
|
40
|
+
end
|
41
|
+
|
42
|
+
res
|
43
|
+
end
|
44
|
+
|
45
|
+
private
|
46
|
+
|
47
|
+
def login
|
48
|
+
if File.exists? @auth_file
|
49
|
+
@auth_data = JSON.parse File.read @auth_file
|
50
|
+
return
|
51
|
+
end
|
52
|
+
|
53
|
+
req = Net::HTTP::Post.new '/api/v1/login',
|
54
|
+
'Content-Type' => 'application/json'
|
55
|
+
req.body = {
|
56
|
+
username: @config['user'],
|
57
|
+
password: @config['pass']
|
58
|
+
}.to_json
|
59
|
+
|
60
|
+
res = @http.request req
|
61
|
+
|
62
|
+
unless res.is_a? Net::HTTPSuccess
|
63
|
+
$stderr.puts res.body
|
64
|
+
raise "Error while authenticating to #{@config['uri']}: #{res.code} #{res.message}"
|
65
|
+
end
|
66
|
+
|
67
|
+
@auth_data = JSON.parse(res.body)['data']
|
68
|
+
File.write @auth_file, @auth_data.to_json
|
69
|
+
end
|
70
|
+
|
71
|
+
def relogin
|
72
|
+
File.delete @auth_file
|
73
|
+
login
|
74
|
+
end
|
75
|
+
end
|
76
|
+
end
|
77
|
+
end
|
@@ -0,0 +1,42 @@
|
|
1
|
+
require 'eventmachine'
|
2
|
+
require 'json'
|
3
|
+
require 'metybur'
|
4
|
+
require 'net/https'
|
5
|
+
require 'time'
|
6
|
+
|
7
|
+
require 'xify/base/rocket_chat'
|
8
|
+
require 'xify/event'
|
9
|
+
|
10
|
+
module Xify
|
11
|
+
module Input
|
12
|
+
class RocketChat < Base::RocketChat
|
13
|
+
def updates
|
14
|
+
login
|
15
|
+
|
16
|
+
EM.run do
|
17
|
+
config = @config
|
18
|
+
uri = URI.parse config['uri']
|
19
|
+
meteor = Metybur.connect "wss://#{uri.host}:#{uri.port}/websocket"
|
20
|
+
meteor.login resume: @auth_data['authToken'] do
|
21
|
+
meteor.subscribe 'stream-notify-user', "#{result[:id]}/rooms-changed", false
|
22
|
+
messages = meteor.collection 'stream-notify-user'
|
23
|
+
messages.on(:changed) do |id, attributes|
|
24
|
+
event = attributes[:args].last
|
25
|
+
room = event[:name]
|
26
|
+
message = event[:lastMessage]
|
27
|
+
|
28
|
+
next if message[:editedAt] || room != config['channel'][1..-1]
|
29
|
+
|
30
|
+
author = message[:u][:name]
|
31
|
+
text = message[:msg]
|
32
|
+
time = message[:ts][:'$date']
|
33
|
+
type = event[:t] == 'p' ? 'group' : 'channel'
|
34
|
+
|
35
|
+
yield Xify::Event.new author, text, parent: "##{room}", parent_link: "#{config['uri']}/#{type}/#{room}", time: Time.at(time / 1000)
|
36
|
+
end
|
37
|
+
end
|
38
|
+
end
|
39
|
+
end
|
40
|
+
end
|
41
|
+
end
|
42
|
+
end
|
@@ -0,0 +1,28 @@
|
|
1
|
+
require 'json'
|
2
|
+
require 'net/https'
|
3
|
+
require 'time'
|
4
|
+
|
5
|
+
require 'xify/base/rocket_chat'
|
6
|
+
|
7
|
+
module Xify
|
8
|
+
module Output
|
9
|
+
class RocketChat < Base::RocketChat
|
10
|
+
def process(event)
|
11
|
+
request :post, '/api/v1/chat.postMessage' do |req|
|
12
|
+
req['Content-Type'] = 'application/json'
|
13
|
+
req.body = {
|
14
|
+
channel: @config['channel'],
|
15
|
+
alias: event.author,
|
16
|
+
attachments: [
|
17
|
+
{
|
18
|
+
title: event.args[:parent],
|
19
|
+
title_link: event.args[:parent_link],
|
20
|
+
text: event.args[:link] ? "#{event.message.chomp} ([more](#{event.args[:link]}))" : event.message.chomp
|
21
|
+
}
|
22
|
+
]
|
23
|
+
}.to_json
|
24
|
+
end
|
25
|
+
end
|
26
|
+
end
|
27
|
+
end
|
28
|
+
end
|
metadata
ADDED
@@ -0,0 +1,76 @@
|
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
|
+
name: xify-rocket_chat
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
version: 0.0.1
|
5
|
+
platform: ruby
|
6
|
+
authors:
|
7
|
+
- Finn Glöe
|
8
|
+
autorequire:
|
9
|
+
bindir: bin
|
10
|
+
cert_chain: []
|
11
|
+
date: 2018-05-22 00:00:00.000000000 Z
|
12
|
+
dependencies:
|
13
|
+
- !ruby/object:Gem::Dependency
|
14
|
+
name: metybur
|
15
|
+
requirement: !ruby/object:Gem::Requirement
|
16
|
+
requirements:
|
17
|
+
- - "~>"
|
18
|
+
- !ruby/object:Gem::Version
|
19
|
+
version: 0.4.3
|
20
|
+
type: :runtime
|
21
|
+
prerelease: false
|
22
|
+
version_requirements: !ruby/object:Gem::Requirement
|
23
|
+
requirements:
|
24
|
+
- - "~>"
|
25
|
+
- !ruby/object:Gem::Version
|
26
|
+
version: 0.4.3
|
27
|
+
- !ruby/object:Gem::Dependency
|
28
|
+
name: xify
|
29
|
+
requirement: !ruby/object:Gem::Requirement
|
30
|
+
requirements:
|
31
|
+
- - ">="
|
32
|
+
- !ruby/object:Gem::Version
|
33
|
+
version: '0.4'
|
34
|
+
type: :runtime
|
35
|
+
prerelease: false
|
36
|
+
version_requirements: !ruby/object:Gem::Requirement
|
37
|
+
requirements:
|
38
|
+
- - ">="
|
39
|
+
- !ruby/object:Gem::Version
|
40
|
+
version: '0.4'
|
41
|
+
description: |2
|
42
|
+
Used as input and/or output handler for Xify. Listen to messages in a specified channel or send them into one. Uses
|
43
|
+
the realtime API of Rocket.Chat (websocket) to receive messages.
|
44
|
+
email: fgloee@united-internet.de
|
45
|
+
executables: []
|
46
|
+
extensions: []
|
47
|
+
extra_rdoc_files: []
|
48
|
+
files:
|
49
|
+
- lib/xify/base/rocket_chat.rb
|
50
|
+
- lib/xify/input/rocket_chat.rb
|
51
|
+
- lib/xify/output/rocket_chat.rb
|
52
|
+
homepage:
|
53
|
+
licenses:
|
54
|
+
- MIT
|
55
|
+
metadata: {}
|
56
|
+
post_install_message:
|
57
|
+
rdoc_options: []
|
58
|
+
require_paths:
|
59
|
+
- lib
|
60
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
61
|
+
requirements:
|
62
|
+
- - ">="
|
63
|
+
- !ruby/object:Gem::Version
|
64
|
+
version: '0'
|
65
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
66
|
+
requirements:
|
67
|
+
- - ">="
|
68
|
+
- !ruby/object:Gem::Version
|
69
|
+
version: '0'
|
70
|
+
requirements: []
|
71
|
+
rubyforge_project:
|
72
|
+
rubygems_version: 2.7.6
|
73
|
+
signing_key:
|
74
|
+
specification_version: 4
|
75
|
+
summary: Rocket.Chat extension for Xify gem.
|
76
|
+
test_files: []
|