221 lines
13 KiB
Python
221 lines
13 KiB
Python
import requests
|
|
import json
|
|
import time
|
|
import xmltodict
|
|
import datetime
|
|
from bs4 import BeautifulSoup
|
|
import secret
|
|
|
|
loginUrl = ('https://api.loginradius.com/identity/v2/auth/login?apiKey=d842e884-2dfb-4c8f-a971-f9eacf8e9f54&loginUrl=&emailTemplate=Verification English&verificationUrl=https://account.hydroottawa.com/login')
|
|
authenticatorUrl = ('https://account.hydroottawa.com/ajax/authenticator')
|
|
secureUrl = ('https://account.hydroottawa.com/')
|
|
downloadDataUrl = ('https://secure.hydroottawa.com/Usage/Secure/TOU/DownloadMyData.aspx')
|
|
ssoMhlUrl = ('https://account.hydroottawa.com/ajax/sso_mhl')
|
|
ssoTargetUrl = ('https://secure.hydroottawa.com/Usage/SSO/SSOTarget.aspx')
|
|
|
|
jsonPayload = {
|
|
'email': secret.email,
|
|
'password': secret.password
|
|
}
|
|
headersPayloadOptions = {
|
|
'referrer': secureUrl,
|
|
'origin': secureUrl,
|
|
'Access-Control-Request-Method': 'POST',
|
|
'Connection': 'keep-alive'
|
|
}
|
|
headersPayload = {
|
|
'referrer': secureUrl,
|
|
'origin': secureUrl,
|
|
'Connection': 'keep-alive',
|
|
'Content-Type': 'application/json'
|
|
}
|
|
|
|
with requests.session() as s:
|
|
r = s.get(secureUrl)
|
|
print('get: ', r)
|
|
r = s.options(loginUrl, headers=headersPayloadOptions)
|
|
print('options: ', r)
|
|
r = s.post(loginUrl, json=jsonPayload, headers=headersPayload)
|
|
print('login post: ', r)
|
|
responseJson = r.json()
|
|
payload = {
|
|
'source': 'login',
|
|
'uid': responseJson['Profile']['Uid'],
|
|
'token': responseJson['access_token'],
|
|
'expires': responseJson['expires_in'],
|
|
'profile[Identities]': responseJson['Profile']['Identities'],
|
|
'profile[Password]': responseJson['Profile']['Password'],
|
|
'profile[LastPasswordChangeDate]': responseJson['Profile']['LastPasswordChangeDate'],
|
|
'profile[PasswordExpirationDate]': responseJson['Profile']['PasswordExpirationDate'],
|
|
'profile[LastPasswordChangeToken]': responseJson['Profile']['LastPasswordChangeToken'],
|
|
'profile[EmailVerified]': responseJson['Profile']['EmailVerified'],
|
|
'profile[IsActive]': responseJson['Profile']['IsActive'],
|
|
'profile[IsDeleted]': responseJson['Profile']['IsDeleted'],
|
|
'profile[Uid]': responseJson['Profile']['Uid'],
|
|
'profile[CustomFields][EBilling]': responseJson['Profile']['CustomFields']['EBilling'],
|
|
'profile[CustomFields][AccountID]': responseJson['Profile']['CustomFields']['AccountID'],
|
|
'profile[CustomFields][PreviousBillAmount]': responseJson['Profile']['CustomFields']['PreviousBillAmount'],
|
|
'profile[CustomFields][PreviousDueDate]': responseJson['Profile']['CustomFields']['PreviousDueDate'],
|
|
'profile[IsEmailSubscribed]': responseJson['Profile']['IsEmailSubscribed'],
|
|
'profile[UserName]': responseJson['Profile']['UserName'],
|
|
'profile[NoOfLogins]': responseJson['Profile']['NoOfLogins'],
|
|
'profile[PhoneId]': responseJson['Profile']['PhoneId'],
|
|
'profile[PhoneIdVerified]': responseJson['Profile']['PhoneIdVerified'],
|
|
'profile[Roles]': responseJson['Profile']['Roles'],
|
|
'profile[ExternalUserLoginId]': responseJson['Profile']['ExternalUserLoginId'],
|
|
'profile[RegistrationProvider]': responseJson['Profile']['RegistrationProvider'],
|
|
'profile[IsLoginLocked]': responseJson['Profile']['IsLoginLocked'],
|
|
'profile[LoginLockedType]': responseJson['Profile']['LoginLockedType'],
|
|
'profile[LastLoginLocation]': responseJson['Profile']['LastLoginLocation'],
|
|
'profile[RegistrationSource]': responseJson['Profile']['RegistrationSource'],
|
|
'profile[IsCustomUid]': responseJson['Profile']['IsCustomUid'],
|
|
'profile[UnverifiedEmail]': responseJson['Profile']['UnverifiedEmail'],
|
|
'profile[IsSecurePassword]': responseJson['Profile']['IsSecurePassword'],
|
|
'profile[PrivacyPolicy]': responseJson['Profile']['PrivacyPolicy'],
|
|
'profile[ExternalIds]': responseJson['Profile']['ExternalIds'],
|
|
'profile[IsRequiredFieldsFilledOnce]': responseJson['Profile']['IsRequiredFieldsFilledOnce'],
|
|
'profile[ConsentProfile]': responseJson['Profile']['ConsentProfile'],
|
|
'profile[PIN]': responseJson['Profile']['PIN'],
|
|
'profile[RegistrationData]': responseJson['Profile']['RegistrationData'],
|
|
'profile[ID]': responseJson['Profile']['ID'],
|
|
'profile[Provider]': responseJson['Profile']['Provider'],
|
|
'profile[Prefix]': responseJson['Profile']['Prefix'],
|
|
'profile[FirstName]': responseJson['Profile']['FirstName'],
|
|
'profile[MiddleName]': responseJson['Profile']['MiddleName'],
|
|
'profile[LastName]': responseJson['Profile']['LastName'],
|
|
'profile[Suffix]': responseJson['Profile']['Suffix'],
|
|
'profile[FullName]': responseJson['Profile']['FullName'],
|
|
'profile[NickName]': responseJson['Profile']['NickName'],
|
|
'profile[ProfileName]': responseJson['Profile']['ProfileName'],
|
|
'profile[BirthDate]': responseJson['Profile']['BirthDate'],
|
|
'profile[Gender]': responseJson['Profile']['Gender'],
|
|
'profile[Website]': responseJson['Profile']['Website'],
|
|
'profile[Email][0][Type]': responseJson['Profile']['Email'][0]['Type'],
|
|
'profile[Email][0][Value]': responseJson['Profile']['Email'][0]['Value'],
|
|
'profile[Country]': responseJson['Profile']['Country'],
|
|
'profile[ThumbnailImageUrl]': responseJson['Profile']['ThumbnailImageUrl'],
|
|
'profile[ImageUrl]': responseJson['Profile']['ImageUrl'],
|
|
'profile[Favicon]': responseJson['Profile']['Favicon'],
|
|
'profile[ProfileUrl]': responseJson['Profile']['ProfileUrl'],
|
|
'profile[HomeTown]': responseJson['Profile']['HomeTown'],
|
|
'profile[State]': responseJson['Profile']['State'],
|
|
'profile[City]': responseJson['Profile']['City'],
|
|
'profile[Industry]': responseJson['Profile']['Industry'],
|
|
'profile[About]': responseJson['Profile']['About'],
|
|
'profile[TimeZone]': responseJson['Profile']['TimeZone'],
|
|
'profile[LocalLanguage]': responseJson['Profile']['LocalLanguage'],
|
|
'profile[CoverPhoto]': responseJson['Profile']['CoverPhoto'],
|
|
'profile[TagLine]': responseJson['Profile']['TagLine'],
|
|
'profile[Language]': responseJson['Profile']['Language'],
|
|
'profile[Verified]': responseJson['Profile']['Verified'],
|
|
'profile[UpdatedTime]': responseJson['Profile']['UpdatedTime'],
|
|
'profile[Positions]': responseJson['Profile']['Positions'],
|
|
'profile[Educations]': responseJson['Profile']['Educations'],
|
|
'profile[PhoneNumbers]': responseJson['Profile']['PhoneNumbers'],
|
|
'profile[IMAccounts]': responseJson['Profile']['IMAccounts'],
|
|
'profile[Addresses]': responseJson['Profile']['Addresses'],
|
|
'profile[MainAddress]': responseJson['Profile']['MainAddress'],
|
|
'profile[Created]': responseJson['Profile']['Created'],
|
|
'profile[CreatedDate]': responseJson['Profile']['CreatedDate'],
|
|
'profile[ModifiedDate]': responseJson['Profile']['ModifiedDate'],
|
|
'profile[ProfileModifiedDate]': responseJson['Profile']['ProfileModifiedDate'],
|
|
'profile[LocalCity]': responseJson['Profile']['LocalCity'],
|
|
'profile[ProfileCity]': responseJson['Profile']['ProfileCity'],
|
|
'profile[LocalCountry]': responseJson['Profile']['LocalCountry'],
|
|
'profile[ProfileCountry]': responseJson['Profile']['ProfileCountry'],
|
|
'profile[FirstLogin]': responseJson['Profile']['FirstLogin'],
|
|
'profile[IsProtected]': responseJson['Profile']['IsProtected'],
|
|
'profile[RelationshipStatus]': responseJson['Profile']['RelationshipStatus'],
|
|
'profile[Quota]': responseJson['Profile']['Quota'],
|
|
'profile[Quote]': responseJson['Profile']['Quote'],
|
|
'profile[InterestedIn]': responseJson['Profile']['InterestedIn'],
|
|
'profile[Interests]': responseJson['Profile']['Interests'],
|
|
'profile[Religion]': responseJson['Profile']['Religion'],
|
|
'profile[Political]': responseJson['Profile']['Political'],
|
|
'profile[Sports]': responseJson['Profile']['Sports'],
|
|
'profile[InspirationalPeople]': responseJson['Profile']['InspirationalPeople'],
|
|
'profile[HttpsImageUrl]': responseJson['Profile']['HttpsImageUrl'],
|
|
'profile[FollowersCount]': responseJson['Profile']['FollowersCount'],
|
|
'profile[FriendsCount]': responseJson['Profile']['FriendsCount'],
|
|
'profile[IsGeoEnabled]': responseJson['Profile']['IsGeoEnabled'],
|
|
'profile[TotalStatusesCount]': responseJson['Profile']['TotalStatusesCount'],
|
|
'profile[Associations]': responseJson['Profile']['Associations'],
|
|
'profile[NumRecommenders]': responseJson['Profile']['NumRecommenders'],
|
|
'profile[Honors]': responseJson['Profile']['Honors'],
|
|
'profile[Awards]': responseJson['Profile']['Awards'],
|
|
'profile[Skills]': responseJson['Profile']['Skills'],
|
|
'profile[CurrentStatus]': responseJson['Profile']['CurrentStatus'],
|
|
'profile[Certifications]': responseJson['Profile']['Certifications'],
|
|
'profile[Courses]': responseJson['Profile']['Courses'],
|
|
'profile[Volunteer]': responseJson['Profile']['Volunteer'],
|
|
'profile[RecommendationsReceived]': responseJson['Profile']['RecommendationsReceived'],
|
|
'profile[Languages]': responseJson['Profile']['Languages'],
|
|
'profile[Projects]': responseJson['Profile']['Projects'],
|
|
'profile[Games]': responseJson['Profile']['Games'],
|
|
'profile[Family]': responseJson['Profile']['Family'],
|
|
'profile[TeleVisionShow]': responseJson['Profile']['TeleVisionShow'],
|
|
'profile[MutualFriends]': responseJson['Profile']['MutualFriends'],
|
|
'profile[Movies]': responseJson['Profile']['Movies'],
|
|
'profile[Books]': responseJson['Profile']['Books'],
|
|
'profile[AgeRange]': responseJson['Profile']['AgeRange'],
|
|
'profile[PublicRepository]': responseJson['Profile']['PublicRepository'],
|
|
'profile[Hireable]': responseJson['Profile']['Hireable'],
|
|
'profile[RepositoryUrl]': responseJson['Profile']['RepositoryUrl'],
|
|
'profile[Age]': responseJson['Profile']['Age'],
|
|
'profile[Patents]': responseJson['Profile']['Patents'],
|
|
'profile[FavoriteThings]': responseJson['Profile']['FavoriteThings'],
|
|
'profile[ProfessionalHeadline]': responseJson['Profile']['ProfessionalHeadline'],
|
|
'profile[ProviderAccessCredential]': responseJson['Profile']['ProviderAccessCredential'],
|
|
'profile[RelatedProfileViews]': responseJson['Profile']['RelatedProfileViews'],
|
|
'profile[KloutScore]': responseJson['Profile']['KloutScore'],
|
|
'profile[LRUserID]': responseJson['Profile']['LRUserID'],
|
|
'profile[PlacesLived]': responseJson['Profile']['PlacesLived'],
|
|
'profile[Publications]': responseJson['Profile']['Publications'],
|
|
'profile[JobBookmarks]': responseJson['Profile']['JobBookmarks'],
|
|
'profile[Suggestions]': responseJson['Profile']['Suggestions'],
|
|
'profile[Badges]': responseJson['Profile']['Badges'],
|
|
'profile[MemberUrlResources]': responseJson['Profile']['MemberUrlResources'],
|
|
'profile[TotalPrivateRepository]': responseJson['Profile']['TotalPrivateRepository'],
|
|
'profile[Currency]': responseJson['Profile']['Currency'],
|
|
'profile[StarredUrl]': responseJson['Profile']['StarredUrl'],
|
|
'profile[GistsUrl]': responseJson['Profile']['GistsUrl'],
|
|
'profile[PublicGists]': responseJson['Profile']['PublicGists'],
|
|
'profile[PrivateGists]': responseJson['Profile']['PrivateGists'],
|
|
'profile[Subscription]': responseJson['Profile']['Subscription'],
|
|
'profile[Company]': responseJson['Profile']['Company'],
|
|
'profile[GravatarImageUrl]': responseJson['Profile']['GravatarImageUrl'],
|
|
'profile[ProfileImageUrls]': responseJson['Profile']['ProfileImageUrls'],
|
|
'profile[WebProfiles]': responseJson['Profile']['WebProfiles'],
|
|
'profile[PinsCount]': responseJson['Profile']['PinsCount'],
|
|
'profile[BoardsCount]': responseJson['Profile']['BoardsCount'],
|
|
'profile[LikesCount]': responseJson['Profile']['LikesCount'],
|
|
'profile[SignupDate]': responseJson['Profile']['SignupDate'],
|
|
'profile[LastLoginDate]': responseJson['Profile']['LastLoginDate'],
|
|
'profile[PreviousUids]': responseJson['Profile']['PreviousUids']
|
|
}
|
|
print('Number of logins: ', responseJson['Profile']['NoOfLogins'])
|
|
r = s.post(authenticatorUrl, data=payload)
|
|
print('authenticator post: ', r)
|
|
r = s.get(secureUrl)
|
|
print('succesfully logged in')
|
|
|
|
ssoMhlPayload = {
|
|
'account': responseJson['Profile']['CustomFields']['AccountID'],
|
|
'request_type': 'BILLING'
|
|
}
|
|
|
|
r = s.post(ssoMhlUrl, data=ssoMhlPayload)
|
|
print('SSO: ', r)
|
|
responseSsoMhlJson = r.json()
|
|
|
|
ssoTargetPayload = {
|
|
'authssotoken': responseSsoMhlJson['token']
|
|
}
|
|
r = s.post(ssoTargetUrl, data=ssoTargetPayload)
|
|
print('SSO Target: ', r)
|
|
|
|
r = s.get(downloadDataUrl)
|
|
print('Download My Data: ', r)
|
|
|
|
# TODO: Need to figure out how to read data
|