Skip to content

Instantly share code, notes, and snippets.

@j-mcnally
Last active November 7, 2022 17:37
Show Gist options
  • Star 1 You must be signed in to star a gist
  • Fork 2 You must be signed in to fork a gist
  • Save j-mcnally/6207839 to your computer and use it in GitHub Desktop.
Save j-mcnally/6207839 to your computer and use it in GitHub Desktop.
Simple stomp authentication over websockets
username = $.jStorage.get("username")
password = $.jStorage.get("password")
client = new Stomp.Client("localhost", 8675, false)
client.connect(function() {
client.subscribe( '/stomp', function(message) {
console.log(message)
} );
client.send('/stomp', {method: "authenticate"}, username + ":" + password)
},
function() {
console.log('error')
}
);
require 'torquebox-stomp'
class SomeStomplet
def initialize()
@pending_subscribers = {}
@subscribers = {}
end
def configure(stomplet_config)
end
def on_message(stomp_message, session)
if stomp_message.headers["method"] == "authenticate"
username, password = stomp_message.contentAsString.split(':')
session[:username] = username
session[:password] = password
if isvalid?(session)
@subscribers[session[:sub_id]] = {}
@subscribers[session[:sub_id]][:subscriber] = @pending_subscribers[session[:sub_id]]
@subscribers[session[:sub_id]][:user_id] = @user.id
@subscribers[session[:sub_id]][:customer_id] = @user.customer_id
@pending_subscribers.delete( @subscribers[session[:sub_id]][:subscriber].id )
puts "Subscriber #{@subscribers[session[:sub_id]][:subscriber].id}: Autheticated successfully"
puts @subscribers[session[:sub_id]][:subscriber].inspect
@subscribers[session[:sub_id]][:subscriber].send( valid_message(stomp_message) )
else
puts "Subscriber #{@subscribers[session[:sub_id]][:subscriber].id}: Failed Authentication"
@subscribers[session[:sub_id]][:subscriber].send( invalid_message(stomp_message) )
end
end
if stomp_message.headers["method"] == "push" && stomp_message.headers["token"] == WEBSOCKET_TOKEN
# server push with valid token
# relay message to proper subscribers
end
end
def on_subscribe(subscriber)
subscriber.session[:sub_id] = subscriber.id
@pending_subscribers[subscriber.id] = subscriber
end
def on_unsubscribe(subscriber)
@subscribers.delete( subscriber.id )
@pending_subscribers.delete( subscriber.id )
end
private
def valid_message(old_message)
message = Java::OrgProjectoddStiltsStomp::DefaultStompMessage.new
message.headers["success"] = "1"
message.contentAsString = "Authentication Succesful"
message.destination = old_message.destination
message
end
def invalid_message(old_message)
message = Java::OrgProjectoddStiltsStomp::DefaultStompMessage.new
message.headers["success"] = "0"
message.contentAsString = "Authentication Failed"
message.destination = old_message.destination
message
end
def isvalid?(session)
username = session[:username]
password = session[:password]
user = User.find_for_authentication(:email => username)
@user = user.valid_password?(password) ? user : nil
end
end
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment