Created
September 19, 2012 05:38
-
-
Save playupchris/3747866 to your computer and use it in GitHub Desktop.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
#!/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