diff --git a/openvidu-basic-ruby/Gemfile b/openvidu-basic-ruby/Gemfile index a56e2bcb..7d5fcbd2 100644 --- a/openvidu-basic-ruby/Gemfile +++ b/openvidu-basic-ruby/Gemfile @@ -3,4 +3,5 @@ source 'https://rubygems.org' gem 'sinatra' gem 'sinatra-cors' gem 'faraday' -gem 'json' \ No newline at end of file +gem 'json' +gem 'livekit-server-sdk' \ No newline at end of file diff --git a/openvidu-basic-ruby/Gemfile.lock b/openvidu-basic-ruby/Gemfile.lock index 98fc9712..4360f545 100644 --- a/openvidu-basic-ruby/Gemfile.lock +++ b/openvidu-basic-ruby/Gemfile.lock @@ -1,24 +1,36 @@ GEM remote: https://rubygems.org/ specs: - faraday (2.7.4) + base64 (0.1.1) + faraday (2.7.11) + base64 faraday-net_http (>= 2.0, < 3.1) ruby2_keywords (>= 0.0.4) faraday-net_http (3.0.2) + google-protobuf (3.24.4-x86_64-linux) json (2.6.3) + jwt (2.7.1) + livekit-server-sdk (0.5.6) + google-protobuf (>= 3.21.0, < 4.0) + jwt (>= 2.2.3, < 3.0) + rack (>= 2.2.3, < 3.0) + twirp (>= 1.10.0, < 2.0) mustermann (3.0.0) ruby2_keywords (~> 0.0.1) - rack (2.2.6.4) - rack-protection (3.0.5) - rack + rack (2.2.8) + rack-protection (3.1.0) + rack (~> 2.2, >= 2.2.4) ruby2_keywords (0.0.5) - sinatra (3.0.5) + sinatra (3.1.0) mustermann (~> 3.0) rack (~> 2.2, >= 2.2.4) - rack-protection (= 3.0.5) + rack-protection (= 3.1.0) tilt (~> 2.0) sinatra-cors (1.2.0) - tilt (2.1.0) + tilt (2.3.0) + twirp (1.10.0) + faraday (< 3) + google-protobuf (~> 3.0, >= 3.7.0) PLATFORMS x86_64-linux @@ -26,8 +38,9 @@ PLATFORMS DEPENDENCIES faraday json + livekit-server-sdk sinatra sinatra-cors BUNDLED WITH - 2.4.10 + 2.4.12 diff --git a/openvidu-basic-ruby/app.rb b/openvidu-basic-ruby/app.rb index 2707a9ad..d6007e36 100644 --- a/openvidu-basic-ruby/app.rb +++ b/openvidu-basic-ruby/app.rb @@ -4,12 +4,14 @@ require 'sinatra' require 'sinatra/cors' require 'faraday' require 'json' +require 'livekit' require './env.rb' # Load env variables SERVER_PORT = ENV['SERVER_PORT'] -OPENVIDU_URL = ENV['OPENVIDU_URL'] -OPENVIDU_SECRET = ENV['OPENVIDU_SECRET'] +LIVEKIT_URL = ENV['LIVEKIT_URL'] +LIVEKIT_API_KEY = ENV['LIVEKIT_API_KEY'] +LIVEKIT_API_SECRET = ENV['LIVEKIT_API_SECRET'] set :port, SERVER_PORT @@ -18,47 +20,26 @@ set :allow_origin, "*" set :allow_methods, "POST,OPTIONS" set :allow_headers, "content-type" -post '/api/sessions' do - begin - body = request.body.read - response = Faraday.post do |req| - req.url "#{OPENVIDU_URL}openvidu/api/sessions" - req.headers['Content-Type'] = 'application/json' - req.headers['Authorization'] = "Basic #{Base64.encode64("OPENVIDUAPP:#{OPENVIDU_SECRET}").strip}" - req.body = body - end - if response.success? - (JSON.parse response.body)['sessionId'] - else - if response.status == 409 - # Session already exists in OpenVidu - (JSON.parse body)['customSessionId'] - else - status response.status - body response.body - end - end - rescue Faraday::Error => err - err.response - end -end +post '/token' do -post '/api/sessions/:sessionId/connections' do - begin - body = request.body.read - response = Faraday.post do |req| - req.url "#{OPENVIDU_URL}openvidu/api/sessions/#{params['sessionId']}/connection" - req.headers['Content-Type'] = 'application/json' - req.headers['Authorization'] = "Basic #{Base64.encode64("OPENVIDUAPP:#{OPENVIDU_SECRET}").strip}" - req.body = body - end - if response.success? - (JSON.parse response.body)['token'] - else - status response.status - body response.body - end - rescue Faraday::Error => err - err.response + content_type :json + + body = JSON.parse(request.body.read) + room_name = body['roomName'] + participant_name = body['participantName'] + + if room_name.nil? || participant_name.nil? + status 400 + return 'roomName and participantName are required' end -end \ No newline at end of file + + # By default, a token expires after 6 hours. + # You may override this by passing in ttl when creating the token. ttl is expressed in seconds. + token = LiveKit::AccessToken.new(api_key: LIVEKIT_API_KEY, api_secret: LIVEKIT_API_SECRET) + token.identity = participant_name + token.name = participant_name + token.add_grant(roomJoin: true, room: room_name) + token.metadata = { "livekitUrl" => LIVEKIT_URL} + + token.to_jwt +end diff --git a/openvidu-basic-ruby/env.rb b/openvidu-basic-ruby/env.rb index 2e720793..62c4970e 100644 --- a/openvidu-basic-ruby/env.rb +++ b/openvidu-basic-ruby/env.rb @@ -1,3 +1,4 @@ ENV['SERVER_PORT'] = '5000' -ENV['OPENVIDU_URL'] = 'http://localhost:4443/' -ENV['OPENVIDU_SECRET'] = 'MY_SECRET' \ No newline at end of file +ENV['LIVEKIT_URL'] = 'ws://localhost:7880/' +ENV['LIVEKIT_API_KEY'] = 'devkey' +ENV['LIVEKIT_API_SECRET'] = 'secret' \ No newline at end of file