Example #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
Example #2
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
Example #3
0
 def test_activate(self):
     a = bom.Account()
     a.pkcs12 = "MIIICgIBAzCCB8MGCSqGSIb3DQEHAaCCB7QEggewMIIHrDCCA3AGCSqGSIb3DQEHAaCCA2EEggNdMIIDWTCCA1UGCyqGSIb3DQEMCgECoIICszCCAq8wKQYKKoZIhvcNAQwBAzAbBBTZqmWIr78C/YY3sn4zAufu//lNVwIDAMNQBIICgGHF7oQeJYvQCaRWGBjO6MArvnz+hf8cNHf6IiP14bG5Hy95s83kjSqeTKs4wvo9hZvgss54FDzqOqIccJaeCDmfiruXqFLLXyuN42do5cfvljF9ihFcSa7342vMsBM7h/SMXubjblzLy/rS/XyUwcdqDNwXui9Qq+AeQ06YN/i3b7xO3k9PDDUjahjyEKJw8Wi/lMnZM/eGBm+iJPcymPbwj7DBbyQ0DqJoghvzAP/E94sflbtgltss8bgFD9UtG6ctH6AHmHJoYBjM+wr395FCJfZltGplvbtHkKoZMSq44UganwX7G5tBdFOZAstGunRzfGW7UXtFKb+AJ63L+auGG4xwfwRWCQMZtUS4If1i//9moZZOVrCH/mrDUmERoF/CY0wPP9EeQwiBt9Rmc4NldoVClMqq8ZcS7daBMZPUmUvAsaBSqiFZ2g+3y2Ov8rwuK8xordjKjiwf5CqIoGgGng8V/rxD9PzBcMwJyEcFop3a+4YHQmsm1r4TFsda9vNCvyGCAh0jOo7qTVO4LNqKWvgm0TR1HSJMQ5cU57oWQAatnyraBWtGXO8svuHnBnh/NDwrDAysNtOK8YUim19yh2BjONoiiA0qq1u1J9efHTSHm/hNs5PaD0Hs9NdtwviCJic22GaSBeTPUT+EwvqAcc3NO8nlh5XfMA79E29zJcs3yYXs7CjUJ8Nso8nyb781T6FUql+IejjyjtXIOFGH+vvOmzRTl0xiD8Qp5PsoOnrVdFmjYLAatnqwxbh7sRknotYcU7bTwVys6YOCVWXDhumf7cncGSm3Ozt83Cf9b2u4xwYJ1DOqKj8pjJ52l0FjlyPj0/KmBRsIcjK/Xt8xgY4waQYJKoZIhvcNAQkUMVweWgB1AHIAbgA6AHUAdQBpAGQAOgBiAGMAMQBkADYANwA0AGIALQA1ADQANwBmAC0ANABhADEAYQAtAGIAMABjADMALQBkADUAMwA0ADcAMwA1ADkAMQA2ADAAOTAhBgkqhkiG9w0BCRUxFAQSVGltZSAxNjA0NTEyNTI0MDUyMIIENAYJKoZIhvcNAQcGoIIEJTCCBCECAQAwggQaBgkqhkiG9w0BBwEwKQYKKoZIhvcNAQwBBjAbBBQcBASLQA0s3Yu24wNAolAX7qV83wIDAMNQgIID4K30gyvv7c/AY8EmrxqAjNMj3E+vcojGekyR9kFduQAgxFSf4RglEiM+92m82dAYGbZYcCHUljM0kwe5HQONtC+UK1qUXNybb1hNfXQ1l2JWhuPFMZ5uuVKikCY2WUAJBoQ3gAGCtguMOFxbTQAIPLXUch7EdTn7450vgwkhF0ccobsD2e0nILNIkGiuTy83oxn26XwWFUab6duX787f4UkF8/hecJEaizheUEiYnWaoK4X0OIm+prmeN/Sdb56Iy9NwcBoZvdcaQ4qJcfByZmVefO9BsuhAaIYl6wXdn612PvFogjrsjYUW6rvETvjdnkpxB+rCvmNPrFWj9JmQJpAQWDRV7b+6tLESswlz07TCbFH/0gUFDgogxWIOuHRo1DLxJ7ezKMA/wKUZBFy8xe+kcFnNcN0kbZoTE+Kc8o15EgtS8oW5zW52YbKEY9Xe1x/c9pqy6Yw0JPgUGCMywa3IuKJ2s9eIxdkoCaA0zwrg0FpxEflaR5aJ7pi2dI3FwRmQ1E70ZVvA0R6aJ/6kuU4pSSiQeJxcxjbxqAr5JR4oCcvL+C/vWgrlIJxlmU6ZCLbgvVmjwy8Y7qrw0my9bcNmvYC8W9Dd1G9kDhu0l+m7RTbzMWdBBnvV+40+AnpJ9UMudnhDTec3No4xI0MxngD7n5dxWwxBx6waZhcetnwtfennmZiRElYvNRpxGD8omJhENLrZyw7iWJ3oQolx+V0eqlmcLIQSIXwTNwt12bf5uqQqkzGBOGtc3fjwmstgYtXedoNElXFfc1Hh7N5ann2sOl6o8Z0mz1htScI05BofYT9AWutxdydKbESpeJf8t+d6TL8mCApOyuGLyncNR4gYMFXfxH5HzSzBCUBRv7h3yjQds6AM3AsMlkUlDwegq/VNNC92H/sJqk5pb3xpkAf2/aXi7+/19Fpo5srrjt8qf8IEGGuaCzB0eDHZDXpmzb89IR5hmFnRdDUQv5DZ2tzszF7hXQa1cWGAW0dmhqERyXPHGnVwMmtpdL40efiZPsX5ABqem5r6kG0T5i7zlvAhycrFYFhe5vEj0GeLTQAFcYkMf4U0mYXLXmgCy8iVl3zkYGr1zFJWhmta88Fs3C1oN3CfbQYM/YcTmsLlrHG1q4kKHsiBlIfZSMKvb7aJE9kC5l7zNS1EPnHTsicSnAN7wU0DXhjnyZuiHo+njaaQwRE7MKUDFKKRYjfwRtnyQk396JGkS0/dG7bcSVJSpDnPDbdGl3pk0EdwmCDCEbOd4JEhI35FPiCRSnq+FJLC1/t+7479k/tYRjK9XfLVaI4X3S+cF8fvzs9BjUg7WIPzMD4wITAJBgUrDgMCGgUABBQb8GL4NGH28WnI/nsySswb0t1MCQQUJ4UUnRWBJZejsLNNJfsrhYABN3gCAwGGoA=="
     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)
Example #4
0
    def test_sign(self):
        a = bom.Account()
        c = bom.Config()
        c.authentication_certificate = "MIIEYDCCA0igAwIBAgIER2q5eTANBgkqhkiG9w0BAQUFADCBhDELMAkGA1UEBhMCVVMxIzAhBgNVBAoTGkFkb2JlIFN5c3RlbXMgSW5jb3Jwb3JhdGVkMRswGQYDVQQLExJEaWdpdGFsIFB1Ymxpc2hpbmcxMzAxBgNVBAMTKkFkb2JlIENvbnRlbnQgU2VydmVyIENlcnRpZmljYXRlIEF1dGhvcml0eTAeFw0wODAxMDkxODQzNDNaFw0xODAxMzEwODAwMDBaMHwxKzApBgNVBAMTImh0dHA6Ly9hZGVhY3RpdmF0ZS5hZG9iZS5jb20vYWRlcHQxGzAZBgNVBAsTEkRpZ2l0YWwgUHVibGlzaGluZzEjMCEGA1UEChMaQWRvYmUgU3lzdGVtcyBJbmNvcnBvcmF0ZWQxCzAJBgNVBAYTAlVTMIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQDZAxpzOZ7N38ZGlQjfMY/lfu4Ta4xK3FRm069VwdqGZIwrfTTRxnLE4A9i1X00BnNk/5z7C0pQX435ylIEQPxIFBKTH+ip5rfDNh/Iu6cIlB0N4I/t7Pac8cIDwbc9HxcGTvXg3BFqPjaGVbmVZmoUtSVOsphdA43sZc6j1iFfOQIDAQABo4IBYzCCAV8wEgYDVR0TAQH/BAgwBgEB/wIBATAUBgNVHSUEDTALBgkqhkiG9y8CAQUwgbIGA1UdIASBqjCBpzCBpAYJKoZIhvcvAQIDMIGWMIGTBggrBgEFBQcCAjCBhhqBg1lvdSBhcmUgbm90IHBlcm1pdHRlZCB0byB1c2UgdGhpcyBMaWNlbnNlIENlcnRpZmljYXRlIGV4Y2VwdCBhcyBwZXJtaXR0ZWQgYnkgdGhlIGxpY2Vuc2UgYWdyZWVtZW50IGFjY29tcGFueWluZyB0aGUgQWRvYmUgc29mdHdhcmUuMDEGA1UdHwQqMCgwJqAkoCKGIGh0dHA6Ly9jcmwuYWRvYmUuY29tL2Fkb2JlQ1MuY3JsMAsGA1UdDwQEAwIBBjAfBgNVHSMEGDAWgBSL7vCBYMmi2h4OUsFYDASwQ/eP6DAdBgNVHQ4EFgQU9RP19K+lzF03he+0T47hCVkPhdAwDQYJKoZIhvcNAQEFBQADggEBAJoqOj+bUa+bDYyOSljs6SVzWH2BN2ylIeZKpTQYEo7jA62tRqW/rBZcNIgCudFvEYa7vH8lHhvQak1s95g+NaNidb5tpgbS8Q7/XTyEGS/4Q2HYWHD/8ydKFROGbMhfxpdJgkgn21mb7dbsfq5AZVGS3M4PP1xrMDYm50+Sip9QIm1RJuSaKivDa/piA5p8/cv6w44YBefLzGUN674Y7WS5u656MjdyJsN/7Oup+12fHGiye5QS5mToujGd6LpU80gfhNxhrphASiEBYQ/BUhWjHkSi0j4WOiGvGpT1Xvntcj0rf6XV6lNrOddOYUL+KdC1uDIe8PUI+naKI+nWgrs="
        reply = '<credentials xmlns="http://ns.adobe.com/adept"><user>urn:uuid:563084fa-6c5c-4489-b8a6-b9e053dcbb7c</user><username method="anonymous"></username><pkcs12>MIIICgIBAzCCB8MGCSqGSIb3DQEHAaCCB7QEggewMIIHrDCCA3AGCSqGSIb3DQEHAaCCA2EEggNdMIIDWTCCA1UGCyqGSIb3DQEMCgECoIICszCCAq8wKQYKKoZIhvcNAQwBAzAbBBTCUwaYFOgvBdSZ6uX4fXSLTXSulwIDAMNQBIICgFaWkCjE8c/o0SJM34uaot7ImIqsZMCZ1JoXsUOf4dwu/vboGQxAy0vgRw8dyPdbsgnCScWA6BWtBoLcOX0zz9DqGPL8hzW4BJaolGMjbhxRn2tNvK/J/74mAYPXLWMLITPr9UPlncFUnvWKi3EvXeZbu4kWCuWJKDMnPn0FrZ+P//iIwGX3vERbAmSZTLQ9XjKMLrxdbSW4qS1trmrFpTj+2dCDQ8F7Mw5LErF1rm1jZuFIAwvMUsTxFh5qUCyvFjO6fK25e82o0HIICcNl4lfe6RtB4+FO3Z3vHPRRIb8j25cAduOkKv84KfEqijgyJ5CqKu94nIj5rTw8N9+BfpfL+2O+s4wB5CeQiNeIExJlQzc+X5eeU3Tv/Bei8/7u72PwxfQT1AtGFOZ1c9VK8zrdiH54yOByf8VOEOIoc2jcb0zrXGGb4uZ/34fjUoiKs2rmInUyI9L3Zr7vfcGmQ5Nlw1taWM5zZ8WSxHVlYLuazK3yCiHV6e0H903oTJMvVuXq+14v76UZytkgvcOQ+FZQK2PdvbnfUTMcXHSceNzusiA0kF5WkbvWAYMvnpRcfWyF+PSk/81BDIfdmxRyzq1QJBph/GSnlmWfKIYqa+gNiXaTBhCYVpFc+pGuQWtRmtJTqA7+xzSkZ5a23s/RC9gmVbnjXKYkPk+4oBmJiOv3hLBDFbD9EfiyNHrScryr7Ajo7/0cm9KerIuj6cKfu+9io3xuKuYoObLtTKm5ICSTp1qsJ/INFth4Q0q+2pLbfnqcAg3//K0Ma1Y6vCVgc8BUF1xOVw39FSWV1HlSbq2cfHnJDz1UvTTwPPK21IWNx6XDR/c1FolOmJpItiaKYHsxgY4waQYJKoZIhvcNAQkUMVweWgB1AHIAbgA6AHUAdQBpAGQAOgA1ADYAMwAwADgANABmAGEALQA2AGMANQBjAC0ANAA0ADgAOQAtAGIAOABhADYALQBiADkAZQAwADUAMwBkAGMAYgBiADcAYzAhBgkqhkiG9w0BCRUxFAQSVGltZSAxNjA0MzU0OTI0MTM2MIIENAYJKoZIhvcNAQcGoIIEJTCCBCECAQAwggQaBgkqhkiG9w0BBwEwKQYKKoZIhvcNAQwBBjAbBBTrtj7naLPj797TXsavlakgh6Z3BwIDAMNQgIID4Et7SLvWN1HWk2hY+4/SVfKo5BaPrkSFC0s3Le6U9nf7bDDIIsclazqiCix2ij08mXcyW43HepWGd4TVJvF68VJxhPI8prebPBnnGjQnYomAgGeh4OH8lzOBtPsc0QJmfvH9cU8r+qjCvo4upj5+GJBdbQZOqoL1T2xlRGlHjWplCQoVN/WuuVpqy7bEI1rOvsuePk8kYBQ96pNF+iEpSTZd1PbqoaCpSdHnHZVI4FSUfeqUiRSnqav2LTcXlejAHfdZeYc/veh8UQM6YhRzypMtqNlTuRny7D04kBeOJRNXDSRl6FKxRah/hyUZ64Dz0UT0o5UBQwVqwDm31bA365uugbfFtui/Vaz29nhA//OQ2ZXYSAUJ51kw53d8/tBdpmZuLGART3T6WBE7I8eQu6SHf3aR8JrHrGLuxNplarfbPchtEZK3kUA7BLV1hBqXqDvcTG2QK1QP/peKR0wVXAVK5xDJDo9IBusMSR05yjMRI0qgG84I9IbC6MrT/3yQW4PQnwnCIOh8iE8ijF1d+EwdoQ9kaNlBNSOqrB5rwvcr0lkifnt4STTdflcMKn1Aulqa3Q9TEonvcFBH+FdmXExIkdxEO/RwUeMjIb21mC5Tlxp1+SmgLFRkItDAsOcYDW8Dz8RhlE+Axpop77N+4n0sC4HFvK92vBoSWTIhOH42yE3iP+inzr+0bUhiRQOR1r7+w/I7kladAKZ5Xj6SrQQyZ4tYn0jbd8Esp1x+nfBnhTc/n9TiyPcJP2PXIh0gOQYg3lBCToNpgq8u79+/rbpkuUPGXdA9muFwQNSYg1vZzgHqHiJ9Jy5TZnNQ1tFUKzxqzz1zfbBMlDGwWduMDOOgTwE6XrFZJZ3Sdm/5/dODSxa635hEsFlX9tvVI8qVa1nczCM6PNNWCzNXdzmG36+46F012Pj8CD58GU9zZlo967e5U35KrA9HElp7GYzDWe7HIBJ6oqHOA0VPJShkSheKQr6ZQaKQapyKDKVy3MaeV5s7RBNDPNZRuZJS6sy0kh7CuTeAyhIa5mBeFdwaoCGeBA5GHR0A8UW0qm14KOFDdbBNg33ycy1C5ji+aWLCjZd2uWmfHoa/dpRoLPVwY2DQHoPSDOXRfKnz/N4CKjuQg/UljrVo5JrR/QhdQD3tdw2y3cVg1m1H8mzMWMRH3sORS6tFkSLpU8JlvZQ/jtY0jizXBlVqtwacJ6MGt5m2tZZgOHmAIQAoOTQx2A4HpWKDjLfX+dBeof7/NOqd7IM3SZs2KiRt/g6x2i98p2PqjPwAWa93/kF/A2/6+UyAy7Q0s8NdberGETxHA9DP1DcwMD4wITAJBgUrDgMCGgUABBTExi/hqUguiL/Fa9GIh/eck77gLAQUOAKDDqfBIPQXWKKhqq1Bl2OqKZYCAwGGoA==</pkcs12><encryptedPrivateLicenseKey>RY/f/x2CedmmsrbNgfUopDRJhS5lRgFe4+/wvqvFdSBckoGwo+Q9THFOPIt0d7gyp9XoP/gi6Ysf6k/SdSfHtneaTB/hCXgLPULHg2niZrZcL/vvlAOQuNgV9s+zJF68QIZB6vKPHkveR1WLfLzCWq1A1SvtCzB1xULh7QW2KtCeta4MIv/YUq2kwvU/FPC9tcfbkbr6jb/i9nMl76Y0vKmELXDMQGmIpJLdAZw5efB7ay3DRdcXvs3qDdEB8ucG35PqLsn7/llW6Kwo6C/XNE0E0mGFmDezhYBSkbedeHBpBn92tRlLhrTOzsRAH+NAK8ZMDw3VAmdI2pYIQuq1rxxxmSv/288hfVyc8B90MyTUgjEQUE+D0fcrIreabO+0nx9qANEw3Zm7nCg6/TxqzVOY8EjUXJ+FF+aunKI/VlwS28+/8loFLHXGuHIyfKSN3aaXYyu0FIW5whMwIQ1/R0Pl+xdG3vuRbcIi+a43UmfOM/t7ysYCxjZ0YEeGDPegogrxxk4+I+klWeQg+bbfZ7BDH1KsEe0yDrrw+XL1EzQVNeNdRoYcSYjGzgxxaKpAE1HJDaMmQdrt0jiy0/qwRA9UyXuVLwDY/msRZHJcGPa3u4oBfjKUjvpK7m0wtgeTJCSzN5h5bTH+KJZW37HiAwUVCP1K7o3KcROlsDHn5Ah2BvyRvP/zDA4x/i2gzAixwpwXxzwdyeR5CQV72+B3BFxeYUhM1QVHF/5yB/COtzlamX0C1vC9mBVaoIZvAMwa/LQMET2tt+XYUi8mPzWINOOJi7lQk4KBRIopc3R3zYMV8QLwutt3LNV0t9oloDB8a9mc2ostQjrZsfITtx0pV7TilDjZsr5hMHq7LNJ2dq4=</encryptedPrivateLicenseKey><licenseCertificate>MIIDGDCCAoGgAwIBAgIGAXWLAV5nMA0GCSqGSIb3DQEBBQUAMHwxKzApBgNVBAMTImh0dHA6Ly9hZGVhY3RpdmF0ZS5hZG9iZS5jb20vYWRlcHQxGzAZBgNVBAsTEkRpZ2l0YWwgUHVibGlzaGluZzEjMCEGA1UEChMaQWRvYmUgU3lzdGVtcyBJbmNvcnBvcmF0ZWQxCzAJBgNVBAYTAlVTMB4XDTIwMTEwMjIyMDg0NFoXDTMwMTEwMjIyMDg0NFowODE2MDQGA1UEAxMtdXJuOnV1aWQ6NTYzMDg0ZmEtNmM1Yy00NDg5LWI4YTYtYjllMDUzZGNiYjdjMIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQDJmedSj+sKaaq7U/Zr1aSR5vAvRXb+8q0xg4Z9cyQDztNe+o2Fz2KxHSyqxjfSZM3dSR859e3iyqcwDYAjLs7ZhLwZCy1zeEGIKyrx2p7oS/RHWYKgEUUdRig6Xrd6/yQzxBzEXDwcMQnQwND9CvRZqDhxYlUKOeZK2fHOOVeQOQIDAQABo4HoMIHlMIG0BgNVHSMEgawwgamAFPUT9fSvpcxdN4XvtE+O4QlZD4XQoYGKpIGHMIGEMQswCQYDVQQGEwJVUzEjMCEGA1UEChMaQWRvYmUgU3lzdGVtcyBJbmNvcnBvcmF0ZWQxGzAZBgNVBAsTEkRpZ2l0YWwgUHVibGlzaGluZzEzMDEGA1UEAxMqQWRvYmUgQ29udGVudCBTZXJ2ZXIgQ2VydGlmaWNhdGUgQXV0aG9yaXR5ggRHarl5MAkGA1UdEwQCMAAwFAYDVR0lBA0wCwYJKoZIhvcvAgEHMAsGA1UdDwQEAwIFIDANBgkqhkiG9w0BAQUFAAOBgQA4RODpTPoBY+YhrLJ06zqjT1iua8VD4UHP5F9pxkbgGyhSHZpkODN82msrcE4Gw7C4s8Y+ZPJW84nwQoeEFDcu8OfuCqrmbARYPfiZW8/bT0ncQHKS7+LGqFHf7ECQC+tdh+tp2GIPW0F3JId6dPO1h96SKI4VcdW33pfLoxoHSA==</licenseCertificate></credentials>'

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

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

            login.sign_in(data, a, None, None)
            self.assertEqual(a.urn,
                             "urn:uuid:563084fa-6c5c-4489-b8a6-b9e053dcbb7c")
            mock_request.assert_called()
Example #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
Example #6
0
    def test_build_activation_file(self):
        expected = b'<activationInfo xmlns="http://ns.adobe.com/adept"><activationServiceInfo><authURL>authurl</authURL><userInfoURL>userinfourl</userInfoURL><activationURL>authurl</activationURL><certificate>ACT_CERTIFICATE</certificate></activationServiceInfo><credentials><user>toto</user><licenseCertificate/><privateLicenseKey>SuperSecretKey</privateLicenseKey><authenticationCertificate>AUTH_CERTIFICATE</authenticationCertificate><username method="AdobeID">[email protected]</username></credentials><activationToken/></activationInfo>'

        default_account = bom.Account()
        default_account.urn = "toto"
        default_account.sign_id = "*****@*****.**"
        default_account.sign_method = "AdobeID"
        default_account.get_private_key = MagicMock(
            return_value="SuperSecretKey")

        activationToken = "<activationToken></activationToken>"

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

        content = device.build_activation_file(default_account,
                                               activationToken, conf)

        self.assertEqual(content, expected)
Example #7
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