This repository was archived by the owner on Jan 9, 2026. It is now read-only.
-
Notifications
You must be signed in to change notification settings - Fork 1
Expand file tree
/
Copy pathapp.rb
More file actions
111 lines (93 loc) · 2.42 KB
/
app.rb
File metadata and controls
111 lines (93 loc) · 2.42 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
# frozen_string_literal: true
require 'dotenv/load'
require 'sinatra'
require 'workos'
require 'json'
require 'sinatra-websocket'
set :server, 'thin'
set :sockets, []
# Pull API key from ENV variable
WorkOS.key = ENV['WORKOS_API_KEY']
enable :sessions
use(
Rack::Session::Cookie,
key: 'rack.session',
domain: 'localhost',
path: '/',
expire_after: 2_592_000,
secret: SecureRandom.hex(16)
)
get '/' do
before = params[:before]
after = params[:after]
puts before
puts after
if !before
@directories = WorkOS::DirectorySync.list_directories(
limit: 5
)
else
@directories = WorkOS::DirectorySync.list_directories(
limit: 5,
before: before,
after: after
)
end
@before = @directories.list_metadata["before"]
@after = @directories.list_metadata["after"]
erb :index, :layout => false
end
get '/directories/:id' do
@groups_list = WorkOS::DirectorySync.list_groups(directory: params[:id])
@groups = @groups_list.data
@users_list = WorkOS::DirectorySync.list_users(directory: params[:id])
@users = @users_list.data
erb :directory
end
get '/users/:id' do
@user = WorkOS::DirectorySync.get_user(params[:id])
@user_groups_list = WorkOS::DirectorySync.list_groups(user: params[:id], limit: 5)
@user_groups = @user_groups_list.data
erb :user
end
get '/groups/:id' do
@group = WorkOS::DirectorySync.get_group(params[:id])
@group_users_list = WorkOS::DirectorySync.list_users(group: params[:id])
@group_users = @group_users_list.data
erb :group
end
get '/webhooks' do
if !request.websocket?
erb :webhooks
else
request.websocket do |ws|
ws.onopen do
warn("websocket opened")
settings.sockets << ws
end
ws.onmessage do |msg|
warn("websocket onmessage")
EM.next_tick { settings.sockets.each{|s| s.send(msg) } }
end
ws.onclose do
warn("websocket closed")
settings.sockets.delete(ws)
end
end
end
end
post '/webhooks' do
payload = JSON.parse(request.body.read).to_json
sig_header = request.env['HTTP_WORKOS_SIGNATURE']
verified_webhook = WorkOS::Webhooks.construct_event(
payload: payload.to_s,
sig_header: sig_header,
secret: ENV['WORKOS_WEBHOOK_SECRET']
)
if verified_webhook
EM.next_tick { settings.sockets.each{|s| s.send(payload.to_s ) } }
redirect "/webhooks"
else
render :json => {:status => 400, :error => "Webhook failed"} and return
end
end