Ejemplo n.º 1
0
  def test_fulfillment(self):
    d = bom.Device()
    d.device_id = "urn:1"
    d.device_type = "mobile"
    d.device_key = 1
    d.name = "local"

    a = bom.Account()
    a.urn = "toto"
    a.devices = [d]

    operator = "http://fairyland.com"
    content = etree.Element("Content")

    backup = utils.extract_pk_from_pkcs12, xml_tools.generate_signature
    utils.extract_pk_from_pkcs12 = MagicMock(return_value="DEADBEEF")
    xml_tools.generate_signature = MagicMock(return_value="0123456789ABCDEF")
    
    with patch('requests.post') as mock_request:
      mock_request.return_value.status_code = 200
      mock_request.return_value.text = '<fulfillment><fulfillmentResult xmlns="http://ns.adobe.com/adept"><resourceItemInfo xmlns="http://ns.adobe.com/adept"><licenseToken>toto</licenseToken><src>http://books.com/mybook.epub</src><metadata><title xmlns="http://purl.org/dc/elements/1.1/">My great book</title></metadata></resourceItemInfo></fulfillmentResult></fulfillment>'

      title, url, licenseToken = epub_get.fulfill(content, a, operator)

      self.assertEqual(title, "My great book")
      self.assertEqual(url, "http://books.com/mybook.epub")
      self.assertEqual(etree.tostring(licenseToken), b'<licenseToken xmlns="http://ns.adobe.com/adept">toto</licenseToken>')

    utils.extract_pk_from_pkcs12, xml_tools.generate_signature = backup
Ejemplo n.º 2
0
 def test_parse_activation_reply(self):
     d = bom.Device()
     act = api_call.Activate(None, d)
     reply = '<activationToken xmlns="http://ns.adobe.com/adept"><device>urn:uuid:a9d8548e-fc74-462a-9551-913ef3b27493</device><fingerprint>yvKBQhD7vweOkx6YVI4pQhhoDn0=</fingerprint><deviceType>standalone</deviceType><activationURL>http://adeactivate.adobe.com/adept</activationURL><user>urn:uuid:06ff762f-e588-4133-8345-b6580dfecd56</user><signature>jWDdUVAbHVsL2oZL25km36VabXO8a8DRQUP0d8PkB2zksnSOk+Sz7T56k29Icxz65SfvfXswx9OkztNP+kHuCpIeK3iXA1U8KWUyQzvPhCpbbvu472A4Sm7bKG3hvoojCRa9/4uqTOn37jRAXozeQYI5sAizMkpgmtHIXH3BGhs=</signature></activationToken>'
     #device_id = device.parse_activation_reply(reply)
     act.parse(reply)
     self.assertEqual(d.device_id,
                      "urn:uuid:a9d8548e-fc74-462a-9551-913ef3b27493")
Ejemplo n.º 3
0
    def test_activate_device(self):
        # Mock data
        mountpoint = './fake_device'

        conf = bom.Config()
        conf.auth_url = 'authurl'
        conf.userinfo_url = 'userinfourl'
        conf.activation_certificate = 'ACT_CERTIFICATE'
        conf.authentication_certificate = 'AUTH_CERTIFICATE'
        conf.current_user = "******"

        default_account = bom.Account()
        default_account.urn = "toto"
        default_account.sign_id = "*****@*****.**"
        default_account.sign_method = "AdobeID"

        #data = db.DBData()
        data.config = conf
        data.accounts = [default_account]

        d = bom.Device()

        # Mock methods
        backup = device.activate, data.add_device, default_account.get_private_key, device.read_device_file, device.read_activation_file, device.build_activation_file, device.write_activation_file

        device.activate = MagicMock(
            return_value="<activationToken></activationToken>")

        default_account.get_private_key = MagicMock(
            return_value="SuperSecretKey")
        data.add_device = MagicMock()

        device.read_device_file = MagicMock(return_value=d)
        device.read_activation_file = MagicMock(return_value=(None, None,
                                                              None))
        device.build_activation_file = MagicMock(return_value="content")
        device.write_activation_file = MagicMock(return_value=True)

        # Test method
        device.device_register(mountpoint)

        device.read_device_file.assert_called_with(mountpoint)
        device.read_activation_file.assert_called_with(mountpoint)
        device.build_activation_file.assert_called()
        device.write_activation_file.assert_called_with(mountpoint, "content")
        data.add_device.assert_called()

        device.activate.assert_called()

        # restore methods
        device.activate, data.add_device, default_account.get_private_key, device.read_device_file, device.read_activation_file, device.build_activation_file, device.write_activation_file = backup
Ejemplo n.º 4
0
 def test_activate(self):
     a = bom.Account()
     a.pkcs12 = "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"
     d = bom.Device()
     d.fingerprint = "dG90bw=="
     d.name = 'local'
     d.device_key = "TlPf+z/dETowaQGk0ZP3NA==".encode('ascii')
     a.devices.append(d)
     utils.make_nonce = MagicMock(return_value="0rTl6wAAAAA=")
     utils.get_expiration_date = MagicMock(
         return_value="2020-11-16T21:47:52-00:00")
     act = api_call.Activate(a, d)
     xml = act.build()
     expected = b'<activate xmlns="http://ns.adobe.com/adept" requestType="initial"><fingerprint>dG90bw==</fingerprint><deviceType>standalone</deviceType><clientOS>Windows Vista</clientOS><clientLocale>en</clientLocale><clientVersion>ADE WIN 9,0,1131,27</clientVersion><nonce>0rTl6wAAAAA=</nonce><expiration>2020-11-16T21:47:52-00:00</expiration><user/><signature>GqUb3mNBC9H/OGCINWxrVwlgQlKo0qHMyXppWsQyxmT02R5wKid1Ce8J3gJWWzC0HdRWh9NPxNCdY4WCCN7iBRSCzNAd3S18SqHtLgJdOkhbUJd9t1SaymuLKDfCRXzKBb2IQZj0ue1YGQDNJB7jVSlU9g87MOrIydB6sCaNCYc=</signature></activate>'
     self.assertEqual(xml, expected)
Ejemplo n.º 5
0
  def test_get(self):
    d = bom.Device()
    d.name = "local"

    a = bom.Account()
    a.urn = "toto"
    a.devices = [d]

    c = bom.Config()
    c.current_user = "******"

    data.config = c
    data.accounts = [a]

    filename = 'files/fake.acsm'

    license_token = etree.Element("licenseToken")
    license_token.text = "toto"

    backup = epub_get.log_in, epub_get.fulfill, epub_get.generate_rights_xml, patch_epub.patch 
    epub_content = 'Zipped book content'
    rights_content = "<rights>GOD</rights>"
    book_title = "Book Title"

    epub_get.log_in = MagicMock(return_value=True)
    epub_get.fulfill = MagicMock(return_value=(book_title, "http://books.com/mybook.epub", license_token))
    epub_get.generate_rights_xml = MagicMock(return_value=rights_content)
    patch_epub.patch = MagicMock(return_value = "{}{}".format(epub_content, rights_content))

    with patch('requests.get') as mock_request:
      mock_request.return_value.status_code = 200
      mock_request.return_value.text = epub_content
      
      with patch('builtins.open', mock_open()) as mo:
        epub_get.get_ebook(filename)
        mo.assert_called_with("{}.epub".format(book_title), 'wb')
        mo().write.assert_called_with("{}{}".format(epub_content, rights_content))
    
      mock_request.assert_called_with('http://books.com/mybook.epub')
    epub_get.log_in, epub_get.fulfill, epub_get.generate_rights_xml, patch_epub.patch = backup
Ejemplo n.º 6
0
  def test_login(self):
    d = bom.Device()
    d.device_key = 1
    d.name = "local"

    a = bom.Account()
    a.urn = "toto"
    a.licenseCertificate = b"LICENSECERT"
    a.devices = [d]

    c = bom.Config()
    c.current_user = "******"
    c.authentication_certificate = b"AUTHCERT"

    data.config = c
    data.accounts = [a]

    backup = utils.extract_cert_from_pkcs12, utils.extract_pk_from_pkcs12, xml_tools.generate_signature, utils.make_nonce, utils.get_expiration_date
    utils.extract_cert_from_pkcs12 = MagicMock(return_value=b"DEADBEEF")
    utils.extract_pk_from_pkcs12 = MagicMock(return_value="DEADBEEF")
    utils.make_nonce = MagicMock(return_value="11Mo2AAAAAA=")
    utils.get_expiration_date = MagicMock(return_value="2021-04-15T23:27:34-00:00")
    xml_tools.generate_signature = MagicMock(return_value="0123456789ABCDEF")

    with patch('requests.post') as mock_request:
      mock_request.return_value.status_code = 200
      mock_request.return_value.text = "success"

      epub_get.log_in(c, a, "http://fairyland.com")

      auth_call = call('http://fairyland.com/Auth', data=b'<credentials xmlns="http://ns.adobe.com/adept"><user>toto</user><certificate>REVBREJFRUY=</certificate><licenseCertificate>LICENSECERT</licenseCertificate><authenticationCertificate>AUTHCERT</authenticationCertificate></credentials>', headers={'Content-type': 'application/vnd.adobe.adept+xml', 'charset': 'utf-8'})
      initlicense_call = call('http://adeactivate.adobe.com/adept/InitLicenseService', data=b'<licenseServiceRequest xmlns="http://ns.adobe.com/adept" identity="user"><operatorURL>http://fairyland.com</operatorURL><nonce>11Mo2AAAAAA=</nonce><expiration>2021-04-15T23:27:34-00:00</expiration><user>toto</user><signature>0123456789ABCDEF</signature></licenseServiceRequest>', headers={'Content-type': 'application/vnd.adobe.adept+xml', 'charset': 'utf-8'})
      rfs = call().raise_for_status()
      mock_request.assert_has_calls([auth_call, rfs, initlicense_call, rfs])


    utils.extract_cert_from_pkcs12, utils.extract_pk_from_pkcs12, xml_tools.generate_signature, utils.make_nonce, utils.get_expiration_date = backup