38 lines
991 B
Ruby
38 lines
991 B
Ruby
class TwitchStreamUpdatesController < ApplicationController
|
|
skip_before_action :verify_authenticity_token
|
|
|
|
def show
|
|
if params["hub.mode"] == "denied"
|
|
Rails.logger.error("Twitch Webhook was denied: #{params.permit('hub.mode', 'hub.reason', 'hub.topic').to_json}")
|
|
head :no_content
|
|
else
|
|
render plain: params["hub.challenge"]
|
|
end
|
|
end
|
|
|
|
def create
|
|
head :no_content
|
|
|
|
unless secret_verified?
|
|
Rails.logger.warn("Twitch Webhook Received for which the webhook could not be verified")
|
|
return
|
|
end
|
|
|
|
user = User.find(params[:user_id])
|
|
|
|
if params[:data].first.present?
|
|
user.update!(currently_streaming_on: :twitch)
|
|
else
|
|
user.update!(currently_streaming_on: nil)
|
|
end
|
|
end
|
|
|
|
private
|
|
|
|
def secret_verified?
|
|
twitch_sha = request.headers["x-hub-signature"]
|
|
digest = OpenSSL::HMAC.hexdigest("SHA256", ApplicationConfig["TWITCH_WEBHOOK_SECRET"], request.raw_post)
|
|
|
|
twitch_sha == "sha256=#{digest}"
|
|
end
|
|
end
|