Skip to content

Instantly share code, notes, and snippets.

@playupchris
Created September 19, 2012 05:38
Show Gist options
  • Save playupchris/3747866 to your computer and use it in GitHub Desktop.
Save playupchris/3747866 to your computer and use it in GitHub Desktop.
#!/usr/bin/env ruby
require 'bundler/setup'
require 'mach'
require 'json'
require 'addressable/template'
## creds ##
def creds_server
@creds_server ||= ENV.fetch('CREDS_SERVER', 'http://localhost:9090')
end
def credentials
@credentials ||= (
(
ENV['CREDENTIALS'] && Hash[%w{id secret}.zip(ENV['CREDENTIALS'].split(":"))]
) || lambda {
connection = Faraday.new(:url => creds_server) { |c| c.adapter Faraday.default_adapter }
credentials_response = connection.post { |req| req.url "/credentials" }
JSON.parse(credentials_response.body)
}.call
).tap { |x| puts "Using credentials: #{x.inspect}" }
end
## creds ##
## encryption ##
def encrypt(str, secret)
aes = _aes(:encrypt, secret)
aes.update(str + aes.final).unpack("H*").first
end
def decrypt(data, secret)
aes = _aes(:decrypt, secret)
aes.update([data].pack("H*")) + aes.final
end
def _aes(op, secret)
OpenSSL::Cipher::AES256.new(:CFB).tap do |aes|
aes.send(op)
aes.key = Digest::SHA256.digest(secret)
aes.iv = Digest::MD5.hexdigest(secret)
end
end
## encryption ##
## puapi ##
def puapi_server
@puapi_server ||= ENV.fetch('PUAPI_SERVER', 'http://localhost:8080')
end
def puapi_connection
@puapi_connection ||= Faraday.new(:url => puapi_server) { |c|
c.request :hmac_authentication, credentials["id"], credentials["secret"]
c.adapter Faraday.default_adapter
}
end
def puapi_get(path)
#make a request using those rredentials
res = puapi_connection.get { |req| req.url path }
res.body
end
def encrypted_tile_tokens
@encrtyped_tile_tokens = JSON.parse(puapi_get('/users/me/encrypted_tile_tokens'))["items"].inject({}) { |h, ett|
h.update(ett["id"] => ett["encrypted_token"])
}
end
def tile_tokens
@tile_tokens = encrypted_tile_tokens.inject({}) { |h, (id, encrypted_tile_token)|
h.update(id => decrypt(encrypted_tile_token, credentials["secret"]))
}
end
## puapi ##
## tile ##
def tile_server
@tile_server ||= ENV.fetch('TILE_SERVER', 'http://localhost')
end
def tile_connection
@tile_connection ||= Faraday.new(:url => tile_server) { |c| c.adapter Faraday.default_adapter }
end
def tile_get(path='/tile.json')
res = tile_connection.get { |req| req.url path }
res.body
end
def tile
JSON.parse(tile_get)
end
def personalized_link_template
Addressable::Template.new(tile["personalized_link"]["template"])
end
def personalized_link
personalized_link_template.expand(tile_tokens).to_s
end
## tile ##
puts "encrypted_tile_tokens = #{encrypted_tile_tokens.inspect}"
puts "tile_tokens = #{tile_tokens.inspect}"
puts "personalized_link_template = #{personalized_link_template.inspect}"
puts "personalized_link = #{personalized_link.inspect}"
__END__
# ./personalized_client.rb
Using credentials: {"id"=>"zDSq2H112cNK33UdVsLPXaKyzsqzrRkr", "secret"=>"rxpu0s2xWrmVhIM6iBpPCv9RcSDqZicde4FCYuPVyts="}
encrypted_tile_tokens = {"team_standings"=>"02657252bff9318a0f00990b5d139e07", "cricket_scorecard"=>"5e637802b8fc31dc0854960a0c149f0a", "hot_contest_lobbies_welcome"=>"08637255b8ae30db5b00930258479c5c", "hot_contest_lobbies_competition"=>"0a6d230cbaa8308c5b0292505a489f06", "hot_contest_lobbies_grouping"=>"03337802eea737db510494555949990a", "all_sports_welcome"=>"08627607bafa608d5e01c50708179f07", "all_sports_competition"=>"09672306e9ab348c5c0393575944ce0e", "top_competitions_welcome"=>"5e60720db7fc62d15d55c55008109e07", "contest_tiles_usa"=>"59342256b6fe668a580695015a12c50c", "competitions_tiles_usa"=>"0f65720db8a9618d590397045a129907", "olympic_sections"=>"09622351eca962d90f0094020948c45b", "events_and_stats_contest"=>"5f30220db8a9338c0f02c70b54419c06", "fixtures_provider_competition"=>"0266720db6fd36dc5a5490000e459808", "s3_examples"=>"0a667705bba7348b0852c3510f479b07", "s3_welcome"=>"59362351eeab3bd80b5590575e459e59", "s3_olympics_welcome"=>"5f632607eca860dd5a0791565c45c806", "s3_know_it_all"=>"0c622505e9f965da580098000e49c908", "s3_is_that_allowed"=>"0c662255b9f960d8580790525512c45c", "s3_olympic_football_video_tile"=>"0b647404bfad37de0f5591560b17c95d", "s3_olympics_closing_ceremony"=>"03362206edf9348f0b52940b55469b5b", "s3_competition"=>"5c607500b7fd37da0f0293520c499809", "s3_about_us_tile_video_welcome"=>"5c6d2602bfab308c0f54c75659449e0b", "s3_about_us_feature_video_welcome"=>"02362604bca967d95052c0055448cd5b", "s3_about_us_video_olympic"=>"5b627403b7fb62dd505090050e43980f", "s3_premier_league_feature_video_welcome"=>"08617902bfa934d05b0fc3070e439908", "playup_news_olympics"=>"08342355b7a867de5952920454489e0f", "playup_news_all"=>"08637705bdf9658d5e0692040c47c808", "buzz_all"=>"0962220debad3ade5d07c0070f47cc5e", "olympics"=>"08637207b9a732dc0807935555179806", "goalump_competition"=>"5c6c2406eeaf30d15b0f930558179b0c", "three_medals"=>"5f6c240deaa7608f0f57c2570e45995d", "instagram_pics"=>"0e677606e9fe30df5d5792520b46cd0e", "instagram_pics_all"=>"03377751befa33de0f0390070844cd5d"}
tile_tokens = {"team_standings"=>"802f0f2cf6880bc8", "cricket_scorecard"=>"d6867c25ab79aeb5", "hot_contest_lobbies_welcome"=>"262a7132262156ac", "hot_contest_lobbies_competition"=>"08c8573e243c79b9", "hot_contest_lobbies_grouping"=>"9f86a842825f48d5", "all_sports_welcome"=>"27635ecd77d4efb8", "all_sports_competition"=>"32c2f47e552d4531", "top_competitions_welcome"=>"d5298ca84cdceac8", "contest_tiles_usa"=>"cabb9aec10427c83", "competitions_tiles_usa"=>"502976bd05677cd8", "olympic_sections"=>"37cec6a0f651d99d", "events_and_stats_contest"=>"eeb9760ef4f890a9", "fixtures_provider_competition"=>"83299b553b13c4e7", "s3_examples"=>"0371487badbbb6f8", "s3_welcome"=>"cccea481bc1d34cf", "s3_olympics_welcome"=>"e6f3c7c4310e1459", "s3_know_it_all"=>"67e1fff31693c847", "s3_is_that_allowed"=>"63ba6fc1111a8c9c", "s3_olympic_football_video_tile"=>"11400247fc0eff4b", "s3_olympics_closing_ceremony"=>"9cb2bf7fbd5887fd", "s3_competition"=>"f5548b43f42aa8e6", "s3_about_us_tile_video_welcome"=>"f8f6043efbfe45c4", "s3_about_us_feature_video_welcome"=>"8cf036d09da6990d", "s3_about_us_video_olympic"=>"a7478da49f16c2e0", "s3_premier_league_feature_video_welcome"=>"2496067929b4c2d7", "playup_news_olympics"=>"2aca87d70d3799c0", "playup_news_all"=>"26712ffd7037a657", "buzz_all"=>"37b9d29741a4b61a", "olympics"=>"26236815a12f8fe9", "goalump_competition"=>"f9d2a03829265ff3", "three_medals"=>"e9d9e8cffacdc4db", "instagram_pics"=>"4262fa364a3af701", "instagram_pics_all"=>"9b7e1e07f514e50b"}
personalized_link_template = #<Addressable::Template:0x195acd0 PATTERN:http://personalized-playup-news.herokuapp.com/news_feeds?token={goalump_competition}>
personalized_link = "http://personalized-playup-news.herokuapp.com/news_feeds?token=f9d2a03829265ff3"
# CREDENTIALS=zDSq2H112cNK33UdVsLPXaKyzsqzrRkr:rxpu0s2xWrmVhIM6iBpPCv9RcSDqZicde4FCYuPVyts= ./personalized_client.rb
Using credentials: {"id"=>"zDSq2H112cNK33UdVsLPXaKyzsqzrRkr", "secret"=>"rxpu0s2xWrmVhIM6iBpPCv9RcSDqZicde4FCYuPVyts="}
encrypted_tile_tokens = {"team_standings"=>"02657252bff9318a0f00990b5d139e07", "cricket_scorecard"=>"5e637802b8fc31dc0854960a0c149f0a", "hot_contest_lobbies_welcome"=>"08637255b8ae30db5b00930258479c5c", "hot_contest_lobbies_competition"=>"0a6d230cbaa8308c5b0292505a489f06", "hot_contest_lobbies_grouping"=>"03337802eea737db510494555949990a", "all_sports_welcome"=>"08627607bafa608d5e01c50708179f07", "all_sports_competition"=>"09672306e9ab348c5c0393575944ce0e", "top_competitions_welcome"=>"5e60720db7fc62d15d55c55008109e07", "contest_tiles_usa"=>"59342256b6fe668a580695015a12c50c", "competitions_tiles_usa"=>"0f65720db8a9618d590397045a129907", "olympic_sections"=>"09622351eca962d90f0094020948c45b", "events_and_stats_contest"=>"5f30220db8a9338c0f02c70b54419c06", "fixtures_provider_competition"=>"0266720db6fd36dc5a5490000e459808", "s3_examples"=>"0a667705bba7348b0852c3510f479b07", "s3_welcome"=>"59362351eeab3bd80b5590575e459e59", "s3_olympics_welcome"=>"5f632607eca860dd5a0791565c45c806", "s3_know_it_all"=>"0c622505e9f965da580098000e49c908", "s3_is_that_allowed"=>"0c662255b9f960d8580790525512c45c", "s3_olympic_football_video_tile"=>"0b647404bfad37de0f5591560b17c95d", "s3_olympics_closing_ceremony"=>"03362206edf9348f0b52940b55469b5b", "s3_competition"=>"5c607500b7fd37da0f0293520c499809", "s3_about_us_tile_video_welcome"=>"5c6d2602bfab308c0f54c75659449e0b", "s3_about_us_feature_video_welcome"=>"02362604bca967d95052c0055448cd5b", "s3_about_us_video_olympic"=>"5b627403b7fb62dd505090050e43980f", "s3_premier_league_feature_video_welcome"=>"08617902bfa934d05b0fc3070e439908", "playup_news_olympics"=>"08342355b7a867de5952920454489e0f", "playup_news_all"=>"08637705bdf9658d5e0692040c47c808", "buzz_all"=>"0962220debad3ade5d07c0070f47cc5e", "olympics"=>"08637207b9a732dc0807935555179806", "goalump_competition"=>"5c6c2406eeaf30d15b0f930558179b0c", "three_medals"=>"5f6c240deaa7608f0f57c2570e45995d", "instagram_pics"=>"0e677606e9fe30df5d5792520b46cd0e", "instagram_pics_all"=>"03377751befa33de0f0390070844cd5d"}
tile_tokens = {"team_standings"=>"802f0f2cf6880bc8", "cricket_scorecard"=>"d6867c25ab79aeb5", "hot_contest_lobbies_welcome"=>"262a7132262156ac", "hot_contest_lobbies_competition"=>"08c8573e243c79b9", "hot_contest_lobbies_grouping"=>"9f86a842825f48d5", "all_sports_welcome"=>"27635ecd77d4efb8", "all_sports_competition"=>"32c2f47e552d4531", "top_competitions_welcome"=>"d5298ca84cdceac8", "contest_tiles_usa"=>"cabb9aec10427c83", "competitions_tiles_usa"=>"502976bd05677cd8", "olympic_sections"=>"37cec6a0f651d99d", "events_and_stats_contest"=>"eeb9760ef4f890a9", "fixtures_provider_competition"=>"83299b553b13c4e7", "s3_examples"=>"0371487badbbb6f8", "s3_welcome"=>"cccea481bc1d34cf", "s3_olympics_welcome"=>"e6f3c7c4310e1459", "s3_know_it_all"=>"67e1fff31693c847", "s3_is_that_allowed"=>"63ba6fc1111a8c9c", "s3_olympic_football_video_tile"=>"11400247fc0eff4b", "s3_olympics_closing_ceremony"=>"9cb2bf7fbd5887fd", "s3_competition"=>"f5548b43f42aa8e6", "s3_about_us_tile_video_welcome"=>"f8f6043efbfe45c4", "s3_about_us_feature_video_welcome"=>"8cf036d09da6990d", "s3_about_us_video_olympic"=>"a7478da49f16c2e0", "s3_premier_league_feature_video_welcome"=>"2496067929b4c2d7", "playup_news_olympics"=>"2aca87d70d3799c0", "playup_news_all"=>"26712ffd7037a657", "buzz_all"=>"37b9d29741a4b61a", "olympics"=>"26236815a12f8fe9", "goalump_competition"=>"f9d2a03829265ff3", "three_medals"=>"e9d9e8cffacdc4db", "instagram_pics"=>"4262fa364a3af701", "instagram_pics_all"=>"9b7e1e07f514e50b"}
personalized_link_template = #<Addressable::Template:0x195acd0 PATTERN:http://personalized-playup-news.herokuapp.com/news_feeds?token={goalump_competition}>
personalized_link = "http://personalized-playup-news.herokuapp.com/news_feeds?token=f9d2a03829265ff3"
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment