Browse code

added CHANGELOG.txt appinfo/info.xml appinfo/signature.json css/style.css lib/Service/PaxfaxService.php lib/Migration/Version100Date20211106170854.php

DoubleBastionAdmin authored on 02/12/2022 23:47:12
Showing 6 changed files
1 1
new file mode 100644
... ...
@@ -0,0 +1,40 @@
1
+======= CHANGELOG =======
2
+
3
+Versions:
4
+
5
+== 1.0.0 - 2022-1-27 ==
6
+* Initial release.
7
+
8
+== 1.0.1 - 2022-3-31 ==
9
+* Changed presentation text.
10
+
11
+== 1.0.2 - 2022-4-11 ==
12
+* Respect custom 'datadirectory'.
13
+* Fixed received/sent faxes list not shown in the right hand pane when clicking the 'Received Faxes/Sent Faxes' button, while using Apache as a web server.
14
+* Fixed error when uploading pdf files, while using Apache as a web server.
15
+
16
+== 1.0.3 - 2022-4-14 ==
17
+* Changed the way the app gets the timezone.
18
+
19
+== 1.0.4 - 2022-4-29 ==
20
+* Specified how usernames containing an @ can be included in the callback URL, on the Settings page.
21
+* Adjusted pdf files paths, so that uploaded pdf files can be previewed when Nextcloud is served on a subdomain or on a subdirectory, by Nginx or by Apache. 
22
+
23
+== 1.0.5 - 2022-5-10 ==
24
+* Changed syntax of SQL queries and of encryption function.
25
+* Modified file paths to match changes in Nextcloud 24.
26
+* Text change on Settings page.
27
+
28
+== 1.0.6 - 2022-9-3 ==
29
+* Solved issue with viewing images picked from Nextcloud.
30
+* Small text changes on navigation pane.
31
+* Minor CSS modifications.
32
+
33
+== 1.0.7 - 2022-9-22 ==
34
+* Changed presentation text and text on Settings page.
35
+
36
+== 1.0.8 - 2022-10-27 ==
37
+* Changed CSS settings to match the modifications introduced in Nextcloud 25.
38
+
39
+== 1.0.9 - 2022-12-3 ==
40
+* Added support for dark themes.
0 41
\ No newline at end of file
1 42
new file mode 100644
... ...
@@ -0,0 +1,80 @@
1
+<?xml version="1.0"?>
2
+<info xmlns:xsi= "http://www.w3.org/2001/XMLSchema-instance"
3
+      xsi:noNamespaceSchemaLocation="https://apps.nextcloud.com/schema/apps/info.xsd">
4
+    <id>pax_fax</id>
5
+    <name>Pax Fax</name>
6
+    <summary>A fax sending application</summary>
7
+    <description><![CDATA[
8
+This application allows sending and receiving faxes in Nextcloud. A phaxio.com account and a real fax number acquired from Phaxio are needed. The 'libcurl' 
9
+PHP library has to be installed on the server. Complete instructions on how to configure and use this application are detailed in the 'Admin documentation' 
10
+linked on this page.
11
+          
12
+### Features:
13
+
14
+* 🚀 Multiple documents can be sent in one fax call (up to 20 separate files with a cumulative size of up to 20 MB).
15
+
16
+* 📠 A fax can be sent to multiple fax numbers at once (up to 15 different fax numbers).
17
+
18
+* 📄 Users can send as fax any document in any of the following formats: pdf, doc, docx, odt, jpeg/jpg, png, tiff/tif, txt, html.
19
+
20
+* 📰 All incoming faxes are received as pdf documents and stored in a Nextcloud folder.
21
+
22
+* 📧 Users receive notifications and (optionally) emails when new faxes arrive.
23
+
24
+* 🔍 All the sent and received faxes are stored in specific Nextcloud folders, so that they can be searched by caller/callee phone number or date.
25
+
26
+* 💻 When they want to send a fax, users can upload files from their computer or choose them directly from Nextcloud.
27
+
28
+* 🔏 Incoming fax requests are checked for authenticity and integrity by verifying Phaxio's signature.
29
+
30
+* 💵 Current Phaxio balance can be always checked by pressing a button on the left panel.
31
+
32
+* 💰 The only ongoing cost is $2 per month for a fax number located in USA or Canada, in a city chosen by the user. No contracts.
33
+
34
+* 💸 Straightforward pricing: $0.07 per sent/received page for faxes to/from USA and Canada and $0.1 per sent/received page for faxes to/from other countries.
35
+
36
+We have no affiliation with Phaxio.
37
+
38
+### Documentation
39
+
40
+* [Admin documentation](https://www.doublebastion.com/install-nextcloud/#install-pax-fax)
41
+
42
+### Donations
43
+
44
+* 🎁 [Donate](https://www.doublebastion.com/donations/)
45
+
46
+    ]]></description>
47
+    <version>1.0.9</version>
48
+    <licence>AGPL</licence>
49
+    <author homepage="https://www.doublebastion.com">Double Bastion LLC</author>
50
+    <namespace>PaxFax</namespace>
51
+	<documentation>
52
+		<admin>https://www.doublebastion.com/install-nextcloud/#install-pax-fax</admin>
53
+	</documentation>
54
+    <category>office</category>
55
+    <category>organization</category>
56
+
57
+    <website>https://www.doublebastion.com/pax-fax/</website>
58
+    <bugs>https://git.doublebastion.com/pax-fax/issues/develop</bugs>
59
+    <repository>https://git.doublebastion.com/pax-fax/develop/</repository>
60
+
61
+    <screenshot>https://git.doublebastion.com/pax-fax/raw/develop/img/pax_fax_screenshot.png</screenshot>
62
+
63
+    <dependencies>
64
+            <nextcloud min-version="25" max-version="25" />
65
+    </dependencies>
66
+
67
+    <navigations>
68
+        <navigation>
69
+            <name>Pax Fax</name>
70
+            <route>pax_fax.page.index</route>
71
+            <order>103</order>
72
+            <icon>../img/pax_fax.svg</icon>
73
+        </navigation>
74
+    </navigations>
75
+
76
+    <settings>
77
+            <personal>OCA\PaxFax\Settings\Personal</personal>
78
+            <personal-section>OCA\PaxFax\Settings\PersonalSection</personal-section>
79
+    </settings>
80
+</info>
0 81
new file mode 100644
... ...
@@ -0,0 +1,108 @@
1
+{
2
+    "hashes": {
3
+        "CHANGELOG.txt": "6c274c38fc6e88f6dc4e222f42fec7c336ea95336b76142dcd856b0ea09df5500d7df51c33c02d050e212f3eda95bd830116f2fa2808b96f4832079523ccceb3",
4
+        "COPYING.txt": "a0a86214ea153fb07ff35ceec0848dd1703eae22de036a825efc8394e50f65e3044832f3b49cf7e45a39edc470bdf738abc36a3a78ca7df3a6e73c14eaef94a8",
5
+        "Contributors.txt": "36bb17a05cb65b7ce8faf6b601396a2ff9b2e99b159a3eac35f21107f0457fbcee645b53c97aab653eac8433e59ad774b521aaf4f4dfdf8470817e51636d1535",
6
+        "Phaxio\/composer.json": "15a73bed2e5760f4c4dd1fd60abf746cbd245830ba502884261e9a0b6202844a8a37936e60a2761c6cd94a3054ebdf0c791fb866e191797a9f08227c125f5e4c",
7
+        "Phaxio\/composer.lock": "a6366b124ebbd604e11245e4e01f2f3a6d2bb63bccb861bf2e275f7be7d84d3380447cd9b84afd9dd5da0258cdaa01cdbde0f67ca27f2494d60b9304b092d2f9",
8
+        "Phaxio\/vendor\/autoload.php": "4eeb7a390556c23bed27d39fa0e9921347ccd07a8116f373f1d9ec45e6be608ba526392b6392722fd0aca67b14c8365f45773c50d983218df51f2b221d225761",
9
+        "Phaxio\/vendor\/composer\/ClassLoader.php": "2b6fa585122ace1ba816410acbd8372cb75329917aae6363dbad48e396cca581452616e1386a2e445a8fbb0e461b988279103f4f89adf704bce7726f761abf0e",
10
+        "Phaxio\/vendor\/composer\/InstalledVersions.php": "d7273807c70dea77e8708d58a8368ac9e1cd03a952f5cca0202d469a76d13ae84e17152a52b17768e16f54b18a84963959031c32485166a46b425bb4852b8a2a",
11
+        "Phaxio\/vendor\/composer\/LICENSE": "f3bb64009f41a425df5a9bbab53490f0eb9b74fa8d6aaa2f57efb928edc4ffff330260666edeaa04a91fed708c3663371cf01b284f3a08d6698aaef7a23f355a",
12
+        "Phaxio\/vendor\/composer\/autoload_classmap.php": "38cb0fcac43c6563d0320769be34f7020cecc2d172100930fb5f77043fafae1e1d7467bf681996316e41bb5e5d71a159a02f2b88fa5e067a1fa7883f1f734c79",
13
+        "Phaxio\/vendor\/composer\/autoload_namespaces.php": "e94d2ac452dac5c0a46d259cb9c142ce02d424db8ecd680e16eb604636cbe7b1cff5ce75406b8c99d762952343abfde8a29c3611994c77fb15ad3c9a4d3737f8",
14
+        "Phaxio\/vendor\/composer\/autoload_psr4.php": "1d78c03bc79c82476a9b806cba84ce9067f3dd1a2565f5616f6bcdb0c2eae4ccee33e7267f78a636c9e02904253c024cef43ec01d789918294586d2a1b4654fb",
15
+        "Phaxio\/vendor\/composer\/autoload_real.php": "8e0c72be16830e95bdac7c33043d1ad5144a294dbc28d078563274f379d81e957b2edc400382abd517adc74c0d295ecb606701e4240f55a7303686f424f5432c",
16
+        "Phaxio\/vendor\/composer\/autoload_static.php": "c1abaf9518c87901439bbdba91b10c144ab4fa5263fa35bafba3d56143febc7d045fb281f8fea746e82279c74fe4b22e323a6857cd9fc1ec688e70212546845a",
17
+        "Phaxio\/vendor\/composer\/installed.json": "4cb36f28c497f8d506b8570c0894262a37e98c4327737ed67a963b1ecfa561625a10bf7322e9b0fab7e2401182cc6864e529458ac5d421d8658610479c73cb5e",
18
+        "Phaxio\/vendor\/composer\/installed.php": "2dc2f106f98921818677d17f135455d02ad3946f06dbf85cbecbbef387adbc0d4ffaa53b0fa18697130c53977cccb5a745e69ba3e539fc2ace74997430283a7d",
19
+        "Phaxio\/vendor\/composer\/platform_check.php": "03262b35b0226cd690c4e88d4ac19edfa911b51cd3b49589f6a7d19100a566ee3848d5afedafc68f4dbdf0c1580e98be4bb929195e9e23906fc14d542dc921a1",
20
+        "Phaxio\/vendor\/phaxio\/phaxio\/CHANGELOG": "2eff47994cc1ef1ff374ab0e6d63c6504518b2731149c200ed7aa0aa5ea13fef070a7408741426c1c384a298061bc4c53c3dd91ef8eb6c5e4f62894aee1a3206",
21
+        "Phaxio\/vendor\/phaxio\/phaxio\/LICENSE": "a2a7604f0909b0e4b282508198c8e525d239a18995574b54569abd07ba784e872af3757b2a0802e1a8430fcbfe8260eee8f508f3821f29b0fe95ccc7e44874a2",
22
+        "Phaxio\/vendor\/phaxio\/phaxio\/composer.json": "37a15063347f6997ccebacc48942110158f8fd682ac5eb5c58465e3562a9cad346228dec018841d28be3d6afd282f5dce978a22d778f77b75dda05e1cf6a4213",
23
+        "Phaxio\/vendor\/phaxio\/phaxio\/examples\/autoload.php": "fccd9008107c490da7808c70d27ea04f13ee3de4bde8291a69c3283ebf7b5efc0d0a440aaad0d68ebeadfe37241f924040c977dd0bc93a16b894638211bad1dd",
24
+        "Phaxio\/vendor\/phaxio\/phaxio\/examples\/cancelFax.php": "590564fdaaef85e7b72b49c31ddc0a5cd9ae70a5c452f1ce4b08f56bec1e19ae9f8c826fe179dd0c68127f96333ddab1faa3d652879e35d27ac5e4b422586c07",
25
+        "Phaxio\/vendor\/phaxio\/phaxio\/examples\/createPhaxCode.php": "8fd8fe39a97abc99afae8edc9363319bee3ef07841b91f0bc6f738d283a24b2e8e56f109ecd0b4d567e5da694abd4deae14008c1d247dd8690de7ad54e48238e",
26
+        "Phaxio\/vendor\/phaxio\/phaxio\/examples\/deleteFax.php": "0f14c0147950102848ed065c3ca3f12bb56fad382a35e42f77f0acf67ed491050054bbc43f3ee49a96895d3081156ddbdc7640f3f7d9a0fc7848d13bf4921107",
27
+        "Phaxio\/vendor\/phaxio\/phaxio\/examples\/downloadFaxDocument.php": "ee26536919405a2e5f4303c69cbaaa66d08eb946143f17dabc8636881b88cb08abdb56812d826424e756efa247dc1c6aeb585ad9f7bfaa21547d0827f4d2e934",
28
+        "Phaxio\/vendor\/phaxio\/phaxio\/examples\/downloadFaxThumbnail.php": "b581ab76492911decadad4357e6d1cba800394dea1dd0be3ebe925b43b41efc0005ec66707f52ec8a21bcba46f9be0626ff8d08e2686da35e690ebd13302b4db",
29
+        "Phaxio\/vendor\/phaxio\/phaxio\/examples\/files\/content.pdf": "515cdf6ba8271b7a17bd44e9458e28aa288cd9aee64db2daf721568d0eab1249d47243bfa6b2cf39563e848afa1f246453288682d16ddfd4a0a89c981424dbdc",
30
+        "Phaxio\/vendor\/phaxio\/phaxio\/examples\/files\/coverPage.html": "8c14d034bd830269ab9df374f6bff8261b4641d121e4c5806c0e923f744e5b0eab82504924e474f04b9218b166edddb5ad1dc42524c64a018e21e9c968f8160a",
31
+        "Phaxio\/vendor\/phaxio\/phaxio\/examples\/listFaxes.php": "4bd4e16ae654cd39df0f7b405537af034a48c4acee9107dec5fc7f5bb982c2b9cfd6ea030912f0190132664c80fad629bfebb1229d7650200d0ca096a5aabdfe",
32
+        "Phaxio\/vendor\/phaxio\/phaxio\/examples\/phaxio_config.php.temp": "1efc886fce5ea24e9a650a35c497d45b8bae47bc035c6ce4f58aa2abd78ba46585c0401d8e4cc34614d3521b234d12d539536bc9bfe78a9e980f97f92ff898f9",
33
+        "Phaxio\/vendor\/phaxio\/phaxio\/examples\/sendContentUrls.php": "f65f864142f8f856d504ddc89f37a570cb3f229563fdeb2a7a56d628c7f4d316c930cd0e4f944cea3c73c0349aba51340f9cf02a174fcdcb7dcf4823ecd4d3c7",
34
+        "Phaxio\/vendor\/phaxio\/phaxio\/examples\/sendFiles.php": "ae986282c3c75b8e0162bbe95bd08100ce4ec10af67cd536b763e674d9c21a8168948a5f2b1fc3efeb9fd9d9daf46645ffbf179e1e3166ff0060c4ee39edd593",
35
+        "Phaxio\/vendor\/phaxio\/phaxio\/examples\/sendFilesWithBatching.php": "5e4915fe1fb7fb1c916c776a962aff398ea8c0d3bb753fb0b6edd00ceea8374c8cdc6a528c1e36ee61368d072f8ef549c2ffc62ccff6057088b768d764fe5984",
36
+        "Phaxio\/vendor\/phaxio\/phaxio\/examples\/sendText.php": "914a594bdd09c08727c9f155945060212f6c03ecf920a9ffe3eeed9ed5ff35547e541a3bd18b242ef47ae356f2c1e55f74b8d790ca077950a07881ae926fa46e",
37
+        "Phaxio\/vendor\/phaxio\/phaxio\/lib\/Phaxio.php": "e13f967f4b54f99de59d91fe0dbcf8c653a388825fa1f84f76b391a839941586d38d215f63005fe4307a2a3658afaece45088c002de83f962bb1d936476e9b13",
38
+        "Phaxio\/vendor\/phaxio\/phaxio\/lib\/Phaxio\/AbstractResource.php": "48f68360a03312162d9aae7195345ba848216700f9a7d89f08d681d500d27af715af7d569aaab23b2426867519244d2cbec50fa3db7c8eee897bfd9e43aa30a8",
39
+        "Phaxio\/vendor\/phaxio\/phaxio\/lib\/Phaxio\/AbstractResourceCollection.php": "0365a3e8c6194b51633199d9123aa0789e2279f5b29455c1ae5feb0c01a7731d053ef5252d91f6aa62ac1a4726fa3b906ffffabf9e715f30f9aaa34780367aaa",
40
+        "Phaxio\/vendor\/phaxio\/phaxio\/lib\/Phaxio\/AbstractResources.php": "b22c82110e2f60cdf92c7546f1ec8e8039cb9f4b92298087290c9113698166e9ef7d25b9a2645809e0f2aceb3994e45f4c8904b1a2ca03cf00c05be8504df6bd",
41
+        "Phaxio\/vendor\/phaxio\/phaxio\/lib\/Phaxio\/Account.php": "aea5b414544a9c3c7797146c15c4f419d732225de824113ece7a089f26bbc99426f11e980fa7214e4a3065b8efcd1e32ac1d29ea82ebb1eff445e9d27ff6aac0",
42
+        "Phaxio\/vendor\/phaxio\/phaxio\/lib\/Phaxio\/Account\/Status.php": "678e00b88f00ce03ce1cdfacd7ff23608baa09f5298bdda06f834d73257b89ba60ced77df88c2604fcc828b5432f2bb7c13e0d5418674b76a5152a59138d8e35",
43
+        "Phaxio\/vendor\/phaxio\/phaxio\/lib\/Phaxio\/Error.php": "db0e1a32af83054c31662c26b30bef0ce125d0269a3b762ee231af524df152698814fd479db55833f5a7e580a83f6e823130b4b4e81e6635cbcfca796c8154c1",
44
+        "Phaxio\/vendor\/phaxio\/phaxio\/lib\/Phaxio\/Error\/APIConnectionException.php": "39411737aa1d7c4e8ac656908db977500fb3a5bc9a429e5367341525d010bb48c2785ec9eec0b7d84a244d21182cf0e0f635125a7aef96006a2222cb066ac353",
45
+        "Phaxio\/vendor\/phaxio\/phaxio\/lib\/Phaxio\/Error\/AuthenticationException.php": "50dc9337d0e0339547d74d49fb608cb9434ec645b16a283f2feef6959de9ebcd0bd0134c113188c8ee4fb06e21a981ed4274670eb0adc51634b1de8c4f3be8ad",
46
+        "Phaxio\/vendor\/phaxio\/phaxio\/lib\/Phaxio\/Error\/GeneralException.php": "d6d1d96f8ef2d89eff98814befa51b3f0f5a24a44611414c9bbeaf3046633f8a3b752d33b002738ddd5bbde167a1478f897a127e8ec90e710446ca53bf6a2af0",
47
+        "Phaxio\/vendor\/phaxio\/phaxio\/lib\/Phaxio\/Error\/InvalidRequestException.php": "64988a6943b848b3f74614c27a16c109af76e4cca9df497ee7066b4ccac0719e2665460337b1e03dcc9ebc7d469f0f670c45b680bdf327c8a3ffaecf4e872846",
48
+        "Phaxio\/vendor\/phaxio\/phaxio\/lib\/Phaxio\/Error\/NotFoundException.php": "cdbe663b94bd2fdef124570af93509a8080312b0ba13e8ac1664744d40a19c9701c35813da6b10f619c6ccd449ba863c012ef2613b24993e59ecb460dd901cf7",
49
+        "Phaxio\/vendor\/phaxio\/phaxio\/lib\/Phaxio\/Error\/RateLimitException.php": "583aebaa33f59f697795034ea4053919e7203218a6984516ad8ffca8a5eb85a7804a30414b33595016b48ca6b83b1926f5b3eefb4bf8bca5fd88ecf173f0e0d1",
50
+        "Phaxio\/vendor\/phaxio\/phaxio\/lib\/Phaxio\/Fax.php": "754cc2e5f039acfd3e6ee98311fb12519d83079bb8acfb21338a0ea175df1b53ae863a709c14e43ae1ef39eddc51bfcaaa577eb284d33da787e511c3abb56df0",
51
+        "Phaxio\/vendor\/phaxio\/phaxio\/lib\/Phaxio\/Fax\/File.php": "650cf3c1e6aabd535c13c09de0525d73e695f813f0c267008b7722e7a594b5a25f2156bcf6d9fc0828dc0869fa250c138f55256d8aee6a10d83569f33228ed5e",
52
+        "Phaxio\/vendor\/phaxio\/phaxio\/lib\/Phaxio\/FaxCollection.php": "cd04652b9ff7b19af3d53436ca45cb82db41b611df18473b52cc6eb6f5051ad8db34fe751cec891ab315032f6dd109fff6c430baef95aba11cfae10fc073d2ce",
53
+        "Phaxio\/vendor\/phaxio\/phaxio\/lib\/Phaxio\/Faxes.php": "2e1c9c7c78e80fd6efbd49820002c423560bc2fc32d15799b70e26b754a9e659ef61aa707846724c999e1f98ac82366cf57ea49b0ea101a6d825b5bcc80ca278",
54
+        "Phaxio\/vendor\/phaxio\/phaxio\/lib\/Phaxio\/OperationResult.php": "3e85b6a921303cd1e03bc67a79203446e59f76714eed5b468ced130a33fe4e37d6198ef07059fc1f1b8784115ff2084d67e0c3a44b2d7c9433158873c67d7cd9",
55
+        "Phaxio\/vendor\/phaxio\/phaxio\/lib\/Phaxio\/PhaxCode.php": "3999628fee6f6f8488e49b8a03a587186a78c20f0ea1a07a5f60455de9dcc8fee644aab86b1942dfeef3b5510de3fa6c71bdf8ee4f2724ddd60309bc09e07fc6",
56
+        "Phaxio\/vendor\/phaxio\/phaxio\/lib\/Phaxio\/PhaxCodes.php": "b4d3e68f7c69646cc7e740496173504c8d5ba5956ca43e556c4da1b472500c2937f8ae81fdf8598a7c96899f8e9e9570236cf290547b3a604b0873495a39c4af",
57
+        "Phaxio\/vendor\/phaxio\/phaxio\/lib\/Phaxio\/PhaxioPublic.php": "9dcb4a790708f552289c28e12de86a5be8af96c1383e079ca626aaba2dc0ae0ac1930c2cc32547d328c69867476746caa7a0c1e9af4b162cee8ea98637720749",
58
+        "Phaxio\/vendor\/phaxio\/phaxio\/lib\/Phaxio\/PhaxioPublic\/AreaCode.php": "e40391514dc3ac86040436625c8cc977177269d878f97f1f7a26f441b75899fc0ac5f124e82563be63998b5009261287a709630bd5feb7f58d1ca0aff4e799c8",
59
+        "Phaxio\/vendor\/phaxio\/phaxio\/lib\/Phaxio\/PhaxioPublic\/AreaCodeCollection.php": "36ef6b3a17eaf0bbb45cafd7bc63a387b028c55759e9650c597ed9ad4d98a6788a5c4f2c59055dacaa7ba5cd958f1d8e0811b53962c3b9ad51e96b26ca85e418",
60
+        "Phaxio\/vendor\/phaxio\/phaxio\/lib\/Phaxio\/PhaxioPublic\/AreaCodes.php": "59b42f33330ad1856d9ecc01588abdcf34080e770f32134cbbf207144d10e1b65c1182df7e39c11f6ba9381fe845715eefd6891cbe29ffc06a8ce2e4e20a3987",
61
+        "Phaxio\/vendor\/phaxio\/phaxio\/lib\/Phaxio\/PhaxioPublic\/Countries.php": "c3214a5af911c09a2be6de5446c02c6b262082a0cfca057e9a135dbd29631f00a75bfea3bb9181bea1dbe45a7238afd05510275822857031726002ba7d9f2118",
62
+        "Phaxio\/vendor\/phaxio\/phaxio\/lib\/Phaxio\/PhaxioPublic\/Country.php": "df81c4fd6eaf3d3fd82b090e481cef2c19e34cf532c16753ec909b36c38ac2e87efda4133d8322a512cd0a31d53421fdd2009e6f04be0119a31a90c30c690db5",
63
+        "Phaxio\/vendor\/phaxio\/phaxio\/lib\/Phaxio\/PhaxioPublic\/CountryCollection.php": "5457c89d54da2c2f6ff8ae907e8c7e21e7fa8197e05c6209d7924e2ac02e422002c6d92e434b45cefe79630532d2c80f1ddd7f4508c0867db637288bc32833c6",
64
+        "Phaxio\/vendor\/phaxio\/phaxio\/lib\/Phaxio\/PhoneNumber.php": "e8d578db0d72ff22b472c2ecbd58f6b90c06a581392dcb0281b8116dfda57d7fe43d33a212b79d6185276b69ec6c3dadc231603eedb62ded7bd695177baa7b50",
65
+        "Phaxio\/vendor\/phaxio\/phaxio\/lib\/Phaxio\/PhoneNumberCollection.php": "17e29c72a0a23bf39ab4aca4e77836f78a1a9b570cbece8837e479e2039f8bbf433fe9137c7f9f39e0de930f8eea3eccaf202e6e60cda6ca8fab25e5738af264",
66
+        "Phaxio\/vendor\/phaxio\/phaxio\/lib\/Phaxio\/PhoneNumbers.php": "0a196164d5abb4598c5f3e4eaf092e999aa2e6d097fa4d93c284757ce5c616d949f07e5a6e9a93f632f838551c5979d6517802243014131f2a6bd20bd64c0246",
67
+        "Phaxio\/vendor\/phaxio\/phaxio\/lib\/Phaxio\/StringUpload.php": "a8e15f97d3562d17375989d34ee31569ae2b7a684632bf64f209e61cac7198ec91cc6668e7be51e1d3cf6110a66e881b20e47d6eac0dd2dc6ba8404f04cd0423",
68
+        "README.md": "835aa5ef090f2eef3d49067ba444181f76300e8f8110809089774b089040d3f16ee10189fbd7bc2afd15024ba4805358977a5e5923dddf805ee4075428af8166",
69
+        "appinfo\/info.xml": "d1f3d422e6f807c935b17aafd7d8631785ac1c80ba221008906fe06a08c404fbda37a0a06aa07af74d720d0d6b9e520044eb4fe4ab07ea54bb84b3e41ab4cea8",
70
+        "appinfo\/routes.php": "5c13e06285f7bdea64204c7603ea997220a6bacfef64e74bb676546e7fba262f4a47792c270de13b1fcb454e1759c824517f8af6107af8b877e0a81cf4a250c4",
71
+        "css\/style.css": "c6a4b3cb7739ef84fdf1afc4d16e956ffeb51d11f0b43504988aa0bb24d3ca2c34698eda2aa0d876d8c9c02a26cc087ce801e3164f861a4e6785687a84a7afb5",
72
+        "img\/nextcloud_logo.svg": "4e0d3f0c371d668d83d443e5b1f69f0eedcc759092601d8fe8710dd97b16fd53aa3f9667bba7f305dc3aacfbc14e29b09b78da8b7bf6f41dcb83f5b16473991e",
73
+        "img\/nextcloud_logo_bright.svg": "aeab941556e29f9537508171583bb3309372866122c150c887c21d6a567c5aa06d2653db67c7151b064d4e2fa25f1fc63df21c786ede02ca5f40f12e5c1bad26",
74
+        "img\/pax_fax.svg": "db540b202b0b9e49e0ed2453d99eb23b8eb37c293fcf52de280844e3d3c224ed067cc7bd80db755d851a78fca13fd2721e7bf16727f755de17442fd894b75791",
75
+        "img\/pax_fax_choose_file_from_nextcloud.png": "92d30d5c20d0f03acd9430f4e2c1a3694e346941dc9ec1400fb8a2697b750ddc611d226a55c31d5d3001c1bce2199edfcd823cc2634bb6d050ad0ce4fadaf993",
76
+        "img\/pax_fax_dark.svg": "1cd5df59a2886ada493eedba1ec62dcef815210416cdc1a6bb35aaa3fcaee59f5cd5a756e082557ba95eddd5abcba37236b5fc815cfffd9dea2843614071a673",
77
+        "img\/pax_fax_files_from_pc_and_nextcloud.png": "610c382b47f8ca41898098642538c1ede712a0462442a0eb937110b81befe71833de0a4e74c7f6e798888b51a9b7718108b910c145b7d4bc8096145f835ac556",
78
+        "img\/pax_fax_grey.svg": "fc36143f41b406b237a36e98b5834320bfff94c992a5633508834a8f2db79f679e5b83573d727774f7db6ac5c2eb01fb09b3d42ff1c16fb891f75e9d8a890c17",
79
+        "img\/pax_fax_logo.png": "3c901669e9f2e76f7bb3f2479209f0ff51c24c940d1d5ec163a375464b696c61872bc482dd523560919179cc0af3825d254dd89506220317c9930030896790df",
80
+        "img\/pax_fax_received_fax.png": "42c31af0849badf3d5451ada2d9db869031a48df473a7f4a0c07c1a31bc6c46ad7952612145d4d6037955b015eb90fe8a4115f506fee5d69f3ec46a956333080",
81
+        "img\/pax_fax_received_faxes.png": "ae747393bbbce84696c45aad0d30eb50903dd455f4cb7ba128fd8c5f22aa8d099b2fcc32a2ce58d34ca8bafa5ddd3824e94df68464b36c3d4b6ce56fa85915fe",
82
+        "img\/pax_fax_screenshot.png": "799b5e05469cab56f30cc58f1dc290cc6293fe2e79fef89566cf6feba0418068908d421d5b59eb33570fed2f40bee792fe86a3821e5121b2b204b2daeca516f6",
83
+        "img\/pax_fax_send_uploaded_file_as_fax.png": "536cd0913447bd152049e9cc7793b0674353f2e8b9bd8ae2b5eb7080d24484c4a4aae48f8a8b1ac0a271ed7ff6da2fa19547259a7d5090dbb32febb873ca136c",
84
+        "img\/pax_fax_sent_faxes.png": "d2630afa4992268e9891c66805fb44b21a3c7fbe431f7cc4582ae28b0355821696e8e50304b0165b5208b05a0b7c460f8d2d572d98ec53c3bd99ba08feb17a4e",
85
+        "img\/refresh_logo.svg": "a95a19645bbde5e2146a3ec669950bc6029bfc6104886552eaeb4746733657ecbe4f9199e676ee2e9852ef0c5adb612d93e300e3fa9713fc611e1f8e7c1d5183",
86
+        "js\/sendfax.js": "0c4f2cb18cf05252c7f8f631729565817fb5ab2e68f133202a81dc46ec6920d1ac9425f9e565ff4b3415afb4f9c50ecafe2411b5e7a3b7af2bb75ba72a84324d",
87
+        "js\/settings.js": "2cd438a40f2388d58b1a4577830906928ba03f08cce2196d4e26f603bd42ad1d0f4fc66607e1b0d279ebea0483a4bb1f8a912c1b7e7b7c3113c0f364ed749e43",
88
+        "js\/tiff.min.js": "c35f67b587aab62db7a3de662779a7b3264d70f5f856142cae88eadd1b477e474977f2b8c5ab31c16be002cb7ca9b52282e6de533b6fd79a02e6d33815919cb4",
89
+        "js\/webodf.min.js": "655acab6a9773314aa741a7477121885c593bf3ecf2bc67adf8f870c81d0604ebf5fc558dc2a6072da0a70397c0d995ce15c5969b2190bcd2b687693772a3281",
90
+        "l10n\/en_GB.js": "91aa74b34d75a800f0ea59635affc02e6efa8e71ed36fa7aaa3fce4046909c669dc8f34740c991469e50bae8b9dff1c5c7bf38d519475de21f197044c6a69b06",
91
+        "l10n\/en_GB.json": "04c7aea39bdbff91d74c0a9b1e788c066c833c6a7fe6c8b770121ded1b20faf47a80312500d103078a10839f72419d8aac78aee91e1734085bb3049365cdadd1",
92
+        "lib\/AppConfig.php": "c8acb61a0d2a4411a468578e4d10dbf1491c259fdfc6f40bfb29b5fae9b2d9dfb3564c72b9c679b5427f37dd51932d17ce6924c4e49daf58c390b6d2076c15b3",
93
+        "lib\/AppInfo\/Application.php": "d4dd88c84a7e53ca402beb53a7794182f04aff7e98a075ebd413369991f8699ec957f356b9f5c319e5bf6e19765bc175f985df0e376e3103ef88b516caf383ff",
94
+        "lib\/Controller\/AuthorApiController.php": "d99516665a701cb3d2a76fe37d2012f66c628f3ada353dbc204ff0545b1f749ece5766b1b1eddaa8ee6b4b73cf1613d150b801352e9cce96ba09b79021e061ca",
95
+        "lib\/Controller\/PageController.php": "c2abb6d62f7118e4c4ff73252c3ac4290e46e252a65248dae12c5a721a1aadeda189835d8efb9c8da7b22b3d8221e928a640bd93e4c5408a2db453517b78cb0d",
96
+        "lib\/Controller\/PaxfaxController.php": "55cd5b1e488f518a83ea9c87da7cc2e1d961fbaff9a44a23373c633c2638ac0974dfd26345f268d0e00fb8cf7bb093102f554eaef931cfff005613dae0c77a3c",
97
+        "lib\/Migration\/Version100Date20211106170854.php": "d1f5538dc19c89a6b8a1521af701f0682be89f773ac63b7615b3d7af8fa183f03f176f1ba38d5c55c3912e23b815b2cf3d85078b0c4445af64380906f67e2601",
98
+        "lib\/Service\/PaxfaxService.php": "ef0a256754d4e8fcbc3a89ce72fac231b63f3d15b137d1da886a2498078107daca8b060855d6b2d09836ef658c61a177476ff97558abe1d063426395aabe0e79",
99
+        "lib\/Settings\/Personal.php": "8242e941926433f948a32c6bad02faeba1d64374f4a7efbac64d1600177507ecd66b85df98194312d7f0062a34536e5f21293ac43b6402899146359ff7bb3d65",
100
+        "lib\/Settings\/PersonalSection.php": "f928a8b1df3bd8b482cab7a61cd32cb039ec6b8744f1902bc741c0ca85d0c3473d939df0a1fc91c2bead6b94546a10fa59136e491b142680814bd99ffb05d12b",
101
+        "templates\/content\/index.php": "7f88b793a60d7e3baeb18a22e8f6f6980fe981952871fb4efc1f9d56b4b2fcfc4ac5ef32e03ff227b0c6229cfcfa3a42a12d48c6871d5400a8b4fd68e3d18615",
102
+        "templates\/index.php": "ea041904c7847c95b9e75d60e0328b51a5eb55bd2c45352127d5490f8ee04af5af9b740cd8b71009841c53c1a1ac8de44be01f4744d7273b688d11fa5dd56498",
103
+        "templates\/navigation\/index.php": "4c2380162aafa36016d3f53eaeb569d401ee6aa0eb983509168a0c359f7dbbea225fdf1cb7daa1b24f13041b77527e9a16f4927fe1dc9cb2f4547ead07895565",
104
+        "templates\/settings.php": "80a9e433b68e8d01ddafab10dd909531ae11a18ad23889cebdfe662700cd4c1e36327fe63a92e9a7644789cf5da6dcec0d90f8a9df48dc303dea2b0091ff04a3"
105
+    },
106
+    "signature": "hPLMRxNHmICnukXlLznshzg2MPuwirwhVpx3wpjGgBXAai2Xvx9fmluqUhcwbG0UiatOFE4Kxm1fs3O7WD4wvWQ60D7oBlMMYHlMgAB7m+Wks\/P07G+f8Zv2aHKrl\/vHCNb\/9\/W80ncW8qwM1Z7Zd35L+1xNOtB0QnqjLevgQcW4UzJg+UY+WcRvWxEvpJoVIK5COTXNYmRadgPGwvMUrcOcCy\/HE6f7nlI4dM0fXPWOTHjCaJCVTuIHwrXzKlRCTWIQ\/MexpbxDjbeB8sfNgWyorVElInZlcBbbrXiQRO5uHRvZ1GNqwLTd2JPJWfirebk47cSg6ahhzcSqPCfU6AFzq3wbJyywUTxH2URerTZcvFc24TCKu5lKeYmrrm7XyV6s104\/o2Y\/7DIQgC8oJwS+eCLacpQB11qgjnSaauxipeElJmTIgafYyd0uQuOhkrT+vMRhyN8XvhuqF8OSisALmgCEd+lmaAEg3svOXv9xvWXbgGWO6YrLpiWtQVWaTvZgBLTyKoDGdXPw4Ps\/FLJUevkg2mP5ODOdzg399T2Z+nv1B30ENnhPYG0JFYnPD7Yd8VHgO5n+t9mnNHiuKLJ0UHyAAgV\/nc157lGikCwt0MKW1bJr\/siRUHyQtfxp7klAl8foy\/02L2rgMO2T3UpYUhCs4WBgE0okxrmvSqw=",
107
+    "certificate": "-----BEGIN CERTIFICATE-----\r\nMIIEAjCCAuoCAhG6MA0GCSqGSIb3DQEBCwUAMHsxCzAJBgNVBAYTAkRFMRswGQYD\r\nVQQIDBJCYWRlbi1XdWVydHRlbWJlcmcxFzAVBgNVBAoMDk5leHRjbG91ZCBHbWJI\r\nMTYwNAYDVQQDDC1OZXh0Y2xvdWQgQ29kZSBTaWduaW5nIEludGVybWVkaWF0ZSBB\r\ndXRob3JpdHkwHhcNMjIwMjI1MTU0NTUwWhcNMzIwNjAyMTU0NTUwWjASMRAwDgYD\r\nVQQDDAdwYXhfZmF4MIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIICCgKCAgEAsa4b\r\nARkaBatWm4JNKsst3BNjt1X4Clo0Vynelj+VfcMK9G2dB02HGZiQhBfi5cvLMDD4\r\nJEw9jPPf+pxxBY87gwloEQxRW4WmI3LLCPNVSF7GfvONwdjsoJebCPnH6AYHbUlG\r\nQ8\/6wlgCiCklMiCWW0pGFQaDis+4KIkmoFS4elRxOzb+oLCsJRHmLIcV1ZipRanE\r\nP5Y1u953glpjMChZEW6\/p4AEB4xi6b+GaQ+8cBZ5+7WvT54l5iKHY6Tl6fwOuBjl\r\nCc+8FC+hIKk7bTSXfbuwpgzZ7RNgH0BYD\/aryxK\/MHAqeGQKM\/pwvH9SN8LMLZVg\r\nXG+25FiBPuiST\/3l42sY1HD+Gh1KIw83zWD\/kVsU8tKIf0t0uS3ntwx3xjH0ojo9\r\n85Pu4XexopIPi4YxNFtphd\/+cJegbSLKa1LL2CqhnPSXHD8GYjZ16qdy6AxEyEki\r\nOQssSlTOsQ2RmvRqDPwqrbIZrVeiN3Mt4qEontOzci4ggjhBWqhjkcRId4XlGveu\r\nAbWP9O8aXzrElLLeSuDzl6uAcrtwgFvYjoxbRH66hcwv\/+RBOK58CI\/0ShGJZyVh\r\n\/9oDKwyYfHT1OTbRKlvm+TfV6Vmbuol0xFinUv4GoykBO67JJcERTSTGGDqMP2OL\r\n97lkR1b7sy9WKrWw1iljbwyzEEASKKleJtp8HC0CAwEAATANBgkqhkiG9w0BAQsF\r\nAAOCAQEAK+uuoq2F0N4nYdHpRRi5pP8hu540jEpHsLB8o\/3GT++Tdj9jeMdfDWos\r\nskB2e+Vi3OgiCWq51gQ9pq0YSQLZJzXBtX9Zd7gvnmIWJZqjbEkMsky+zMM2mweA\r\nl4+coZvXuqxNN6aY+oAKuf66ZWviUld1WEOz0+2vLrhs9qDCYFKDl7vXol6hz4gf\r\nX5d5crNAu1QboE8FEMxqfDrAMeJzL6SAG4UUaF9duB\/6xUm9d7vBKDCPMzZAV\/ob\r\n+8wxt7K4VoOuCo1KEpp\/+ZRrEr5ZbGGsNw41jrtfBsrMtbbIoRtyIh9Xfme2KzYM\r\ncm9HZiMNDokH8MlzOPOGwkP31w4FHQ==\r\n-----END CERTIFICATE-----"
108
+}
0 109
\ No newline at end of file
1 110
new file mode 100644
... ...
@@ -0,0 +1,816 @@
1
+/**
2
+ * @copyright 2021 Double Bastion LLC <www.doublebastion.com>
3
+ *
4
+ * @author Double Bastion LLC
5
+ *
6
+ * @license GNU AGPL version 3 or any later version
7
+ *
8
+ * This program is free software; you can redistribute it and/or
9
+ * modify it under the terms of the GNU AFFERO GENERAL PUBLIC LICENSE
10
+ * License as published by the Free Software Foundation; either
11
+ * version 3 of the License, or any later version.
12
+ *
13
+ * This program is distributed in the hope that it will be useful,
14
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
15
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
16
+ * GNU AFFERO GENERAL PUBLIC LICENSE for more details.
17
+ *
18
+ * You should have received a copy of the GNU Affero General Public
19
+ * License along with this program.  If not, see <http://www.gnu.org/licenses/>.
20
+ *
21
+ */
22
+
23
+#app {
24
+  position: relative;
25
+  display: flex;
26
+  min-height: 100%;
27
+  min-width: 100%;
28
+}
29
+
30
+#app-content {
31
+   position: relative;
32
+   z-index: 1000;
33
+   flex-basis: 100vw;
34
+   min-width: 0;
35
+   min-height: 100%;
36
+   margin: 0 !important;
37
+   overflow-y: scroll;
38
+}
39
+
40
+#app-content #app-content-wrapper {
41
+   height: 108% !important;
42
+}
43
+
44
+#pax_fax_vbar {
45
+  padding: 18px;
46
+  font-family: Calibri, Frutiger, "Myriad Pro", Myriad, sans-serif;
47
+  color: #6d6c6c;
48
+}
49
+
50
+#currentbaldiv {
51
+  display: block;
52
+  position: relative;
53
+  font-size: 17px;
54
+  font-weight: bold;
55
+  padding: 5px 0px 2px 14px;
56
+  margin: 0px 0px 8px 0px;
57
+  color: #FFFFFF;
58
+  background: #3f9dd1;
59
+  border-radius: 20px;
60
+}
61
+
62
+#currentbalance {
63
+  display: inline;
64
+  position: relative;
65
+  padding-left: 10px;
66
+}
67
+
68
+.providername {
69
+  color: #FFFFFF;
70
+}
71
+
72
+.providername:hover {
73
+  color: #003b94;
74
+}
75
+
76
+#faxnumbersdiv {
77
+  display: block;
78
+  position: relative;
79
+  font-size: 17px;
80
+  font-weight: bold;
81
+  height: 30px;
82
+  margin: 0px 0px 20px 0px;
83
+  background: #3f9dd1;
84
+  border-radius: 20px;
85
+}
86
+
87
+#currentfaxnmbrs {
88
+  display: inline-block;
89
+  position: absolute;
90
+  height: 22px !important;
91
+  width: 54%;
92
+  font-size: 14px;
93
+  color: #353535;
94
+  padding: 1px 0px 0px 5px;
95
+  margin: 0.5px 0px 0px 4px;
96
+  -moz-box-sizing: border-box;
97
+  -webkit-box-sizing: border-box;
98
+  box-sizing: border-box;
99
+  background: #fcfcfc;
100
+  border-radius: 20px;
101
+}
102
+
103
+.pflabels {
104
+  font-size: 15px;
105
+  font-weight: bold;
106
+}
107
+
108
+.pfheader {
109
+  display: block;
110
+  position: relative;
111
+  margin: 0px 0px 7px 0px;
112
+  font-size: 17px;
113
+  font-weight: bold;
114
+}
115
+
116
+.faxnbformat {
117
+  display: block;
118
+  position: relative;
119
+  margin: 0px 0px 4px 0px;
120
+  font-size: 17px;
121
+  font-weight: bold;
122
+
123
+}
124
+
125
+.pax_fax_box {
126
+  display: block;
127
+  box-sizing: content-box;
128
+  margin: 8px 0px !important;
129
+  width: 70%;
130
+}
131
+.indtext {
132
+  display: inline-block;
133
+  padding-left: 10px;
134
+}
135
+
136
+#settings-dscr {
137
+  padding-top: 3px;
138
+}
139
+
140
+#pf_upload_msg, #pf_choose_msg, #pf_submit_msg {
141
+  display: block;
142
+  margin: 8px 0px 8px 0px;
143
+  text-align: center;
144
+  font-size: 15px;
145
+  font-weight: bold;
146
+  color: #181918;
147
+  background-color: #a5e5b3;
148
+  border-radius: 14px;
149
+}
150
+
151
+#paxfax_save_msg {
152
+  display: inline;
153
+  color: #181918;
154
+  background-color: #a5e5b3;
155
+  font-weight: bold;
156
+  max-width: 70px;
157
+  text-align: center;
158
+  margin-top: 7px;
159
+}
160
+
161
+#pf_submit_msg {
162
+  padding-left: 5px;
163
+  padding-right: 5px;
164
+}
165
+
166
+#pickedfilename {
167
+  font-size: 13px;
168
+}
169
+
170
+#faxtodiv {
171
+  display: block;
172
+  position: relative;
173
+}
174
+
175
+#faxto {
176
+  display: block;
177
+  width: 97%;
178
+  max-height: 22px;
179
+  margin: 3px 0px 20px 0px;
180
+  padding: 1px 13px 0px 13px;
181
+  color: #565656;
182
+  font-size: 15px;
183
+  font-weight: bold;
184
+  border-radius: 20px;
185
+}
186
+
187
+.up-bttn-wrapper {
188
+  display: block;
189
+  position: relative;
190
+  overflow: hidden;
191
+  padding-top: 20px;
192
+  padding-bottom: 30px;
193
+}
194
+
195
+#submitfax {
196
+  display: block;
197
+  color: white;
198
+  font-weight: bold;
199
+  font-size: 15px;
200
+  background: #3f9dd1;
201
+  padding: 6px 16px 6px 16px;
202
+}
203
+
204
+#submitfax:active {
205
+  background: #00a2f9;
206
+}
207
+
208
+.uploadfiledv {
209
+  position: relative;
210
+  display: inline-block;
211
+  margin: 4px 0px 22px 0px;
212
+}
213
+
214
+#faxfoldersview {
215
+  display: inline-block;
216
+  position: relative;
217
+  width: 100%;
218
+  height: 100%;
219
+  margin-top: -50px;
220
+  background-color: #f4f9ff;
221
+}
222
+
223
+#viewerContainer {
224
+  display: block;
225
+  position: relative;
226
+  width: 100%;
227
+  height: 100%;
228
+}
229
+
230
+#viewer {
231
+  display: block;
232
+  position: relative;
233
+  min-width: 100%;
234
+  min-height: 100%;
235
+}
236
+
237
+#faxdocpreview {
238
+  display: block;
239
+  position: relative;
240
+  min-width: 100%;
241
+  min-height: 100%;
242
+  background-color: #f4f9ff;
243
+}
244
+
245
+#docPreviewFaxImg {
246
+  display: block;
247
+  position: relative;
248
+  background-image: url('../img/pax_fax_grey.svg');
249
+  background-repeat: no-repeat;
250
+  background-position: center;
251
+  width: 100%;
252
+  height: 100%;
253
+}
254
+
255
+#outerContainer {
256
+  display: block;
257
+  position: relative;
258
+  width: 100%;
259
+  height: 100%;
260
+}
261
+
262
+#mainContainer {
263
+  display: block;
264
+  position: relative;
265
+  width: 100%;
266
+  height: 100%;
267
+}
268
+
269
+#uploadedjpg, #uploadedpng {
270
+  width: auto !important;
271
+  height: auto !important;
272
+}
273
+
274
+.cllridcls {
275
+  position: relative;
276
+  display: inline;
277
+  font-size: 17px;
278
+  color: #000000;
279
+  z-index: 3;
280
+}
281
+
282
+.fortooltipinit {
283
+  position: relative;
284
+  display: inline-block;
285
+  float: right;
286
+  font-size: 15px;
287
+  color: #000000;
288
+  z-index: 3;
289
+}
290
+
291
+.fortooltipinit #infosetid {
292
+  display: block;
293
+  position: relative;
294
+  margin: 4px 9px 0px 0px;
295
+  color: #000000;
296
+  font-size: 21px;
297
+  font-weight: bold;
298
+  font-family: Times New Roman;
299
+  font-style: italic;
300
+}
301
+
302
+.fortooltip {
303
+  position: relative;
304
+  display: inline-block;
305
+  font-size: 15px;
306
+  color: #000000;
307
+  z-index: 2;
308
+}
309
+
310
+.fortooltip #infonumber {
311
+  color: #000000;
312
+  font-size: 21px;
313
+  font-weight: bold;
314
+  font-family: Times New Roman;
315
+  font-style: italic;
316
+  padding: 0px 0px 3px 3px;
317
+}
318
+
319
+.fortooltipsec {
320
+  position: relative;
321
+  display: inline-block;
322
+  font-size: 15px;
323
+  color: #000000;
324
+  padding: 0px 0px 4px 0px;
325
+  z-index: 1;
326
+}
327
+
328
+.fortooltipsec #infoformat {
329
+  color: #000000;
330
+  font-size: 21px;
331
+  font-weight: bold;
332
+  font-family: Times New Roman;
333
+  font-style: italic;
334
+  padding: 0px 0px 3px 3px;
335
+}
336
+
337
+.fortooltipinit .calleridtooltip {
338
+  display: block;
339
+  position: absolute;
340
+  visibility: hidden;
341
+  width: 264px;
342
+  background-color: #f4f4f4;
343
+  font-size: 15px;
344
+  font-weight: bold;
345
+  color: #595959;
346
+  text-align: left;
347
+  border-radius: 1px;
348
+  padding: 5px 5px 5px 8px;
349
+  margin: 0px 0px 0px -214px;
350
+  -webkit-box-shadow: 7px 9px 8px 0px rgba(212,212,212,1);
351
+  -moz-box-shadow: 7px 9px 8px 0px rgba(212,212,212,1);
352
+  box-shadow: 7px 9px 8px 0px rgba(212,212,212,1);
353
+}
354
+
355
+.fortooltipinit:hover .calleridtooltip {
356
+  visibility: visible;
357
+}
358
+
359
+.fortooltip .fortooltiptext {
360
+  display: block;
361
+  position: absolute;
362
+  visibility: hidden;
363
+  width: 256px;
364
+  background-color: #f4f4f4;
365
+  font-size: 15px;
366
+  font-weight: bold;
367
+  color: #595959;
368
+  text-align: left;
369
+  border-radius: 1px;
370
+  padding: 5px 5px 13px 5px;
371
+  margin-top: -8px;
372
+  -webkit-box-shadow: 7px 9px 8px 0px rgba(212,212,212,1);
373
+  -moz-box-shadow: 7px 9px 8px 0px rgba(212,212,212,1);
374
+  box-shadow: 7px 9px 8px 0px rgba(212,212,212,1);
375
+}
376
+
377
+.fortooltip:hover .fortooltiptext {
378
+  visibility: visible;
379
+}
380
+
381
+.fortooltipsec .fortooltiptextsec {
382
+  display: block;
383
+  position: absolute;
384
+  visibility: hidden;
385
+  width: 256px;
386
+  background-color: #f4f4f4;
387
+  font-size: 15px;
388
+  font-weight: bold;
389
+  color: #595959;
390
+  text-align: left;
391
+  border-radius: 1px;
392
+  padding: 5px;
393
+  margin-top: -8px;
394
+  -webkit-box-shadow: 7px 9px 8px 0px rgba(212,212,212,1);
395
+  -moz-box-shadow: 7px 9px 8px 0px rgba(212,212,212,1);
396
+  box-shadow: 7px 9px 8px 0px rgba(212,212,212,1);
397
+}
398
+
399
+.fortooltipsec:hover .fortooltiptextsec {
400
+  visibility: visible;
401
+}
402
+
403
+.fileupload {
404
+  display: none;
405
+}
406
+
407
+div > label {
408
+  position: relative;
409
+}
410
+
411
+.uploadflbt {
412
+  width: 411px;
413
+}
414
+
415
+label span {
416
+  display: inline-block;
417
+  min-width: 110px;
418
+  padding: 0px 0px 8px 0px;
419
+}
420
+
421
+.uploadflbt .icon-upload {
422
+  display: inline;
423
+}
424
+
425
+.pfprompt {
426
+  font-size: 17px;
427
+  font-weight: bold;
428
+  color: #6d6c6c;
429
+}
430
+
431
+.fileuploadstl,.filesfromnc {
432
+  display: block;
433
+  font-size: 17px;
434
+  font-weight: bold;
435
+  color: #000000;
436
+}
437
+
438
+#filestotsize {
439
+  display: none;
440
+  position: relative;
441
+  height:auto;
442
+  margin: 0px 0px 16px 0px;
443
+  color: #18bf6e;
444
+  font-size: 15px;
445
+  font-weight: bold;
446
+}
447
+
448
+#filessizetext {
449
+  display: inline;
450
+  position: relative;
451
+  padding-left: 10px;
452
+}
453
+
454
+#fileuploadednm .indivflcls {
455
+  display: inline-block;
456
+  position: relative;
457
+  height:auto;
458
+  max-width: 90%;
459
+  overflow: visible;
460
+  white-space: normal;
461
+  word-break: break-all;
462
+  text-overflow: ellipsis;
463
+  font-size: 17px;
464
+  color: #0e6ba0;
465
+}
466
+
467
+.indivflcls:hover {
468
+  cursor: pointer;
469
+  text-decoration: underline;
470
+}
471
+
472
+.indupfldl {
473
+  position: relative;
474
+  display: inline-block;
475
+  float: right;
476
+  cursor: pointer;
477
+  width: 20px;
478
+  color: #0e6ba0;
479
+  text-align: center;
480
+  font-size: 17px;
481
+}
482
+
483
+#fileuploadednm .indupfldl:hover {
484
+  background-color: #e8f6ff;
485
+  cursor: pointer;
486
+}
487
+
488
+#filespickednc .indivflpckd {
489
+  display: inline-block;
490
+  position: relative;
491
+  height:auto;
492
+  max-width: 90%;
493
+  overflow: visible;
494
+  white-space: normal;
495
+  word-break: break-all;
496
+  text-overflow: ellipsis;
497
+  color: #0e6ba0;
498
+}
499
+
500
+.indivflpckd:hover {
501
+  cursor: pointer;
502
+  text-decoration: underline;
503
+}
504
+
505
+.indpckfldl {
506
+  position: relative;
507
+  display: inline-block;
508
+  float: right;
509
+  cursor: pointer;
510
+  width: 20px;
511
+  color: #0e6ba0;
512
+  text-align: center;
513
+}
514
+
515
+#filespickednc .indpckfldl:hover {
516
+  background-color: #e8f6ff;
517
+  cursor: pointer;
518
+}
519
+
520
+select, button, .button, input:not([type="range"]), textarea, div[contenteditable="true"], .pager li a {
521
+  margin: 0px 0px 0px 0px;
522
+}
523
+
524
+#dirbuttons {
525
+  margin-top: 28px;
526
+}
527
+
528
+button, .button, input[type="button"], input[type="submit"], input[type="reset"] {
529
+  padding: 6px 20px;
530
+  width: auto;
531
+  min-height: 22px;
532
+  cursor: pointer;
533
+  box-sizing: border-box;
534
+  background-color: var(--color-background-dark);
535
+}
536
+
537
+select {
538
+  width: 130px;
539
+  min-height: 28px;
540
+  box-sizing: border-box;
541
+  padding-right: 0px !important;
542
+}
543
+
544
+#uploadfileforfax {
545
+  margin-left: 19px;
546
+}
547
+
548
+#pickFromNext, #uploadFile {
549
+  display: inline-block;
550
+  position: relative;
551
+  font-size: 17px;
552
+  font-weight: bold;
553
+  color: #6d6c6c;
554
+}
555
+
556
+#choosefilen {
557
+  display: inline;
558
+  position: relative;
559
+  margin: 0px 0px 20px 16px;
560
+  padding-top: 15px;
561
+  background-image: url('../img/nextcloud_logo.svg');
562
+  background-repeat: no-repeat;
563
+  background-size: 110% 125%;
564
+  background-position: center center;
565
+  min-width: 66px;
566
+  min-height: 30px;
567
+  cursor:pointer;
568
+}
569
+
570
+#choosefilen:active {
571
+  background-image: url('../img/nextcloud_logo_bright.svg');
572
+  background-repeat: no-repeat;
573
+  background-size: 110% 125%;
574
+  background-position: center center;
575
+  min-width: 66px;
576
+  min-height: 30px;
577
+}
578
+
579
+#checkbalance {
580
+  display: inline;
581
+  position: relative;
582
+  padding-left: 0px;
583
+  margin-top: -1px;
584
+  margin-right: 4px;
585
+  float: right;
586
+  background-image: url('../img/refresh_logo.svg');
587
+  background-repeat: no-repeat;
588
+  background-size: 110% 110%;
589
+  background-position: center center;
590
+  min-width: 24px;
591
+  min-height: 24px;
592
+  cursor: pointer;
593
+  background-color: #FFFFFF;
594
+}
595
+
596
+#selectcalleridbttn {
597
+  display: inline;
598
+  position: relative;
599
+  padding-left: 0px;
600
+  margin-top: 2.6px;
601
+  margin-right: 4px;
602
+  float: right;
603
+  background-image: url('../img/refresh_logo.svg');
604
+  background-repeat: no-repeat;
605
+  background-size: 110% 110%;
606
+  background-position: center center;
607
+  min-width: 24px;
608
+  min-height: 24px;
609
+  cursor: pointer;
610
+  background-color: #FFFFFF;
611
+}
612
+
613
+#faxnumbersdiv #pickid {
614
+  display: inline-block;
615
+  position: relative;
616
+  font-size: 17px;
617
+  font-weight: bold;
618
+  margin: 4px 3px 4px 13px;
619
+  color: #FFFFFF;
620
+}
621
+
622
+#get_notification {
623
+  display: block;
624
+  margin-bottom: 8px;
625
+}
626
+
627
+#get_notification:hover {
628
+  cursor: pointer;
629
+}
630
+
631
+.pax_fax_boxspec {
632
+  display: inline-block;
633
+  box-sizing: content-box;
634
+  margin: 8px 0px !important;
635
+  width: 70%;
636
+  font-size: 14px !important;
637
+}
638
+
639
+.setlabeltext {
640
+  font-size: 15px;
641
+}
642
+
643
+#countryCallCode {
644
+  color: #1b60ba;
645
+}
646
+
647
+#countryCallCode:hover {
648
+  color: #0D3B78;
649
+}
650
+
651
+.openfaxfolder {
652
+  display: block;
653
+  position: relative;
654
+  margin: 10px 0px 10px 0px !important;
655
+  padding: 7px 0px 7px 0px;
656
+  width: 100% !important;
657
+  color: #FFFFFF !important;
658
+  font-size: 15px !important;
659
+  background-color: #CB99C5 !important;
660
+}
661
+
662
+.openfaxfolder:hover {
663
+  border: 2px;
664
+  background-color: #c18bba !important;
665
+}
666
+
667
+.openfaxfolder:active {
668
+  background-color: #b777af !important;
669
+  border: 2px;
670
+  color: #FFFFFF !important;
671
+  border-color: #b777af;
672
+}
673
+
674
+.openfaxfolder:focus {
675
+  background-color: #a3669b !important;
676
+  border: 2px;
677
+  border-color: #a3669b;
678
+}
679
+
680
+.indgenflcls, .indgenpckfls {
681
+  display: block;
682
+  margin: 0px 6px 14px 6px;
683
+}
684
+
685
+/*Changes for dark themes*/
686
+[data-theme-dark] .fortooltipinit #infosetid,
687
+[data-theme-dark-highcontrast] .fortooltipinit #infosetid {
688
+  display: block;
689
+  position: relative;
690
+  margin: 4px 9px 0px 0px;
691
+  color: #fafafa;
692
+  font-size: 21px;
693
+  font-weight: bold;
694
+  font-family: Times New Roman;
695
+  font-style: italic;
696
+}
697
+
698
+[data-theme-dark] .fortooltip #infonumber,
699
+[data-theme-dark-highcontrast] .fortooltip #infonumber {
700
+  color: #fafafa;
701
+  font-size: 21px;
702
+  font-weight: bold;
703
+  font-family: Times New Roman;
704
+  font-style: italic;
705
+  padding: 0px 0px 3px 3px;
706
+}
707
+
708
+[data-theme-dark] .fortooltipsec #infoformat,
709
+[data-theme-dark-highcontrast] .fortooltipsec #infoformat {
710
+  color: #fafafa;
711
+  font-size: 21px;
712
+  font-weight: bold;
713
+  font-family: Times New Roman;
714
+  font-style: italic;
715
+  padding: 0px 0px 3px 3px;
716
+}
717
+
718
+[data-theme-dark] .faxnbformat a,
719
+[data-theme-dark-highcontrast] .faxnbformat a {
720
+  color: #cedfff !important;
721
+}
722
+
723
+[data-theme-dark] .faxnbformat font,
724
+[data-theme-dark-highcontrast] .faxnbformat font {
725
+  color: #f7547a !important;
726
+}
727
+
728
+[data-theme-dark] #faxto,
729
+[data-theme-dark-highcontrast] #faxto {
730
+  display: block;
731
+  width: 97%;
732
+  max-height: 22px;
733
+  margin: 3px 0px 20px 0px;
734
+  padding: 1px 13px 0px 13px;
735
+  color: #fafafa;
736
+  font-size: 15px;
737
+  font-weight: bold;
738
+  border-radius: 20px;
739
+}
740
+
741
+[data-theme-dark] .pfheader,
742
+[data-theme-dark-highcontrast] .pfheader {
743
+  display: block;
744
+  position: relative;
745
+  margin: 0px 0px 7px 0px;
746
+  color: #fafafa;
747
+  font-size: 17px;
748
+  font-weight: bold;
749
+}
750
+
751
+[data-theme-dark] #uploadFile,
752
+[data-theme-dark] #pickFromNext,
753
+[data-theme-dark-highcontrast] #uploadFile,
754
+[data-theme-dark-highcontrast] #pickFromNext {
755
+  display: inline-block;
756
+  position: relative;
757
+  font-size: 17px;
758
+  font-weight: bold;
759
+  color: #fafafa;
760
+}
761
+
762
+[data-theme-dark] #uploadfileforfax,
763
+[data-theme-dark-highcontrast] #uploadfileforfax {
764
+  margin-left: 19px;
765
+  background-color: #898989;
766
+}
767
+
768
+[data-theme-dark] #fileuploadednm .indivflcls,
769
+[data-theme-dark-highcontrast] #fileuploadednm .indivflcls {
770
+  display: inline-block;
771
+  position: relative;
772
+  height: auto;
773
+  max-width: 90%;
774
+  overflow: visible;
775
+  white-space: normal;
776
+  word-break: break-all;
777
+  text-overflow: ellipsis;
778
+  font-size: 17px;
779
+  color: #c2e9ff;
780
+}
781
+
782
+[data-theme-dark] .indupfldl,
783
+[data-theme-dark-highcontrast] .indupfldl {
784
+  position: relative;
785
+  display: inline-block;
786
+  float: right;
787
+  cursor: pointer;
788
+  width: 20px;
789
+  color: #c2e9ff;
790
+  text-align: center;
791
+  font-size: 17px;
792
+}
793
+
794
+[data-theme-dark] #filespickednc .indivflpckd,
795
+[data-theme-dark-highcontrast] #filespickednc .indivflpckd {
796
+  display: inline-block;
797
+  position: relative;
798
+  height: auto;
799
+  max-width: 90%;
800
+  overflow: visible;
801
+  white-space: normal;
802
+  word-break: break-all;
803
+  text-overflow: ellipsis;
804
+  color: #c2e9ff;
805
+}
806
+
807
+[data-theme-dark] .indpckfldl,
808
+[data-theme-dark-highcontrast] .indpckfldl {
809
+  position: relative;
810
+  display: inline-block;
811
+  float: right;
812
+  cursor: pointer;
813
+  width: 20px;
814
+  color: #c2e9ff;
815
+  text-align: center;
816
+}
0 817
new file mode 100644
... ...
@@ -0,0 +1,94 @@
1
+<?php
2
+/**
3
+ * @copyright 2021 Double Bastion LLC <www.doublebastion.com>
4
+ *
5
+ * @author Double Bastion LLC
6
+ *
7
+ * @license GNU AGPL version 3 or any later version
8
+ *
9
+ * This program is free software; you can redistribute it and/or
10
+ * modify it under the terms of the GNU AFFERO GENERAL PUBLIC LICENSE
11
+ * License as published by the Free Software Foundation; either
12
+ * version 3 of the License, or any later version.
13
+ *
14
+ * This program is distributed in the hope that it will be useful,
15
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
16
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
17
+ * GNU AFFERO GENERAL PUBLIC LICENSE for more details.
18
+ *
19
+ * You should have received a copy of the GNU Affero General Public
20
+ * License along with this program.  If not, see <http://www.gnu.org/licenses/>.
21
+ *
22
+ */
23
+
24
+declare(strict_types=1);
25
+
26
+namespace OCA\PaxFax\Migration;
27
+
28
+use Closure;
29
+use OCP\DB\Types;
30
+use OCP\DB\ISchemaWrapper;
31
+use OCP\Migration\IOutput;
32
+use OCP\Migration\SimpleMigrationStep;
33
+
34
+
35
+class Version100Date20211106170854 extends SimpleMigrationStep {
36
+	/**
37
+	 * @param IOutput $output
38
+	 * @param Closure $schemaClosure The `\Closure` returns a `ISchemaWrapper`
39
+	 * @param array $options
40
+	 * @return null|ISchemaWrapper
41
+	 */
42
+	public function changeSchema(IOutput $output, Closure $schemaClosure, array $options): ?ISchemaWrapper {
43
+		/** @var ISchemaWrapper $schema */
44
+		$schema = $schemaClosure();
45
+
46
+		if (!$schema->hasTable('pax_fax')) {
47
+			$table = $schema->createTable('pax_fax');
48
+			$table->addColumn('id', Types::BIGINT, [
49
+				'autoincrement' => true,
50
+				'notnull' => true,
51
+                                'length' => 11,
52
+                                'unsigned' => true,
53
+			]);
54
+			$table->addColumn('user_id', Types::STRING, [
55
+				'notnull' => true,
56
+				'length' => 64,
57
+				'default' => '',
58
+			]);
59
+			$table->addColumn('api_key', Types::STRING, [
60
+				'notnull' => true,
61
+				'length' => 1024,
62
+				'default' => '',
63
+			]);
64
+			$table->addColumn('api_secret', Types::STRING, [
65
+				'notnull' => true,
66
+				'length' => 1024,
67
+				'default' => '',
68
+			]);
69
+			$table->addColumn('webhook_token', Types::STRING, [
70
+				'notnull' => true,
71
+				'length' => 1024,
72
+				'default' => '',
73
+			]);
74
+			$table->addColumn('receive_url', Types::STRING, [
75
+				'notnull' => true,
76
+				'length' => 1024,
77
+				'default' => '',
78
+			]);
79
+			$table->addColumn('get_notification', Types::SMALLINT, [
80
+				'notnull' => false,
81
+				'length' => 1,
82
+			]);
83
+			$table->addColumn('notification_email', Types::STRING, [
84
+				'notnull' => false,
85
+				'length' => 1024,
86
+				'default' => '',
87
+			]);
88
+                        $table->setPrimaryKey(['id']);
89
+                        $table->addUniqueIndex(['id']);
90
+		}
91
+
92
+		return $schema;
93
+	}
94
+}
0 95
\ No newline at end of file
1 96
new file mode 100644
... ...
@@ -0,0 +1,248 @@
1
+<?php
2
+/**
3
+ * @copyright 2021 Double Bastion LLC <www.doublebastion.com>
4
+ *
5
+ * @author Double Bastion LLC
6
+ *
7
+ * @license GNU AGPL version 3 or any later version
8
+ *
9
+ * This program is free software; you can redistribute it and/or
10
+ * modify it under the terms of the GNU AFFERO GENERAL PUBLIC LICENSE
11
+ * License as published by the Free Software Foundation; either
12
+ * version 3 of the License, or any later version.
13
+ *
14
+ * This program is distributed in the hope that it will be useful,
15
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
16
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
17
+ * GNU AFFERO GENERAL PUBLIC LICENSE for more details.
18
+ *
19
+ * You should have received a copy of the GNU Affero General Public
20
+ * License along with this program.  If not, see <http://www.gnu.org/licenses/>.
21
+ *
22
+ */
23
+
24
+declare(strict_types=1);
25
+
26
+namespace OCA\PaxFax\Service;
27
+
28
+use OCP\DB\QueryBuilder\IQueryBuilder;
29
+use OCP\IDBConnection;
30
+use OCP\Security\ICrypto;
31
+use OCP\AppFramework\ApiController;
32
+use OCP\IRequest;
33
+use OCP\AppFramework\Controller;
34
+use OCP\Files\IAppData;
35
+use OCP\AppFramework\App;
36
+use OCP\Files\NotPermittedException;
37
+use OCP\Files\Folder;
38
+use OC\Files\Filesystem;
39
+use \ReflectionClass;
40
+
41
+use Phaxio;
42
+use Phaxio\OperationResult;
43
+use Phaxio\Error\AuthenticationException;
44
+use Phaxio\Error\NotFoundException;
45
+use Phaxio\Error\InvalidRequestException;
46
+use Phaxio\Error\RateLimitException;
47
+use Phaxio\Error\APIConnectionException;
48
+use Phaxio\Error\GeneralException;
49
+
50
+
51
+class PaxfaxService {
52
+
53
+      private $connection;
54
+
55
+      private $crypto;
56
+
57
+      public function __construct(IDBConnection $connection, ICrypto $crypto) {
58
+
59
+              $this->connection = $connection;
60
+
61
+              $this->crypto = $crypto;
62
+      }
63
+
64
+
65
+      /**
66
+       * @NoAdminRequired
67
+       */
68
+      public function object_to_array($obj) {
69
+         if(is_object($obj)) $obj = (array)$this->dismount($obj);
70
+         if(is_array($obj)) {
71
+            $new = array();
72
+            foreach($obj as $key => $val) {
73
+                $new[$key] = $this->object_to_array($val);
74
+            }
75
+         }
76
+         else $new = $obj;
77
+         return $new;
78
+      }
79
+
80
+
81
+      /**
82
+       * @NoAdminRequired
83
+       */
84
+      public function dismount($object) {
85
+         $reflectionClass = new ReflectionClass(get_class($object));
86
+         $array = array();
87
+         foreach ($reflectionClass->getProperties() as $property) {
88
+            $property->setAccessible(true);
89
+            $array[$property->getName()] = $property->getValue($object);
90
+            $property->setAccessible(false);
91
+         }
92
+         return $array;
93
+      }
94
+
95
+
96
+      /**
97
+       * @NoAdminRequired
98
+       *
99
+       */
100
+      public function getsettings($userId) {
101
+
102
+          $sql = $this->connection->prepare('
103
+	           SELECT `id`, `user_id`, `api_key`, `api_secret`, `webhook_token`, `receive_url`, `get_notification`, `notification_email` 
104
+                   FROM `*PREFIX*pax_fax`
105
+                   WHERE `user_id` = ?');
106
+	  $result = $sql->execute([$userId]);
107
+          $settingsfromdb = $result->fetch();
108
+          $result->closeCursor();
109
+
110
+          if ($settingsfromdb) {
111
+
112
+              if ($settingsfromdb['api_key'] != '') {
113
+
114
+                  // Send a placeholder to the browser, instead of the real data
115
+                  $settingsfromdb['api_key'] = "%20%20%20%20%20%20%20%20%20%20%20%20%20%20";
116
+              }
117
+              if ($settingsfromdb['api_secret'] != '') {
118
+                  $settingsfromdb['api_secret'] = "%20%20%20%20%20%20%20%20%20%20%20%20%20%20";
119
+              }
120
+              if ($settingsfromdb['webhook_token'] != '') {
121
+                  $settingsfromdb['webhook_token'] = "%20%20%20%20%20%20%20%20%20%20%20";
122
+              }
123
+              if ($settingsfromdb['receive_url'] != '') {
124
+                  $settingsfromdb['receive_url']= "%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20";
125
+              }
126
+
127
+              return $settingsfromdb;
128
+          }
129
+      }
130
+
131
+
132
+      /**
133
+       * @NoAdminRequired
134
+       *
135
+       */
136
+      public function updatesettings($userId, $apiKey, $apiSecret, $webhookToken, $receiveUrl, $getNotification, $notificationEmail) {
137
+
138
+          $sqlsel = $this->connection->prepare('
139
+	             SELECT `id`, `user_id`, `api_key`, `api_secret`, `webhook_token`, `receive_url`, `get_notification`, `notification_email` 
140
+                     FROM `*PREFIX*pax_fax`
141
+                     WHERE `user_id` = ?');
142
+	  $resultsel = $sqlsel->execute([$userId]);
143
+          $row = $resultsel->fetch();
144
+          $resultsel->closeCursor();
145
+
146
+          if ($resultsel && !$row) {
147
+
148
+              if ($apiKey != '') {
149
+                  $apikeystrenc = $this->crypto->encrypt($apiKey);                
150
+              } else { $apikeystrenc = ''; }
151
+
152
+              if ($apiSecret != '') {
153
+                  $apisecretstrenc = $this->crypto->encrypt($apiSecret);                
154
+              } else { $apisecretstrenc = ''; }
155
+
156
+              if ($webhookToken != '') {
157
+                  $webhookTokenenc = $this->crypto->encrypt($webhookToken);               
158
+              } else { $webhookTokenenc = ''; }
159
+
160
+              if ($receiveUrl != '') {
161
+                  $receiveUrlenc = $this->crypto->encrypt($receiveUrl);                
162
+              } else { $receiveUrlenc = ''; }
163
+
164
+              $sqlns = $this->connection->prepare('
165
+				INSERT INTO `*PREFIX*pax_fax`
166
+					(`user_id`, `api_key`, `api_secret`, `webhook_token`, `receive_url`, `get_notification`, `notification_email`)
167
+				VALUES (?, ?, ?, ?, ?, ?, ?)');
168
+	      $sqlns->execute([$userId, $apikeystrenc, $apisecretstrenc, $webhookTokenenc, $receiveUrlenc, $getNotification, $notificationEmail]);
169
+
170
+          } elseif ($resultsel && $row) {  
171
+
172
+              if ($apiKey != '' && $apiKey != "%20%20%20%20%20%20%20%20%20%20%20%20%20%20") {
173
+                  $apikeystrenc = $this->crypto->encrypt($apiKey);                
174
+              } elseif ($apiKey == "%20%20%20%20%20%20%20%20%20%20%20%20%20%20") {
175
+                  $apikeystrenc = $row['api_key'];
176
+              } elseif ($apiKey == '') {
177
+                  $apikeystrenc = '';
178
+              }
179
+
180
+              if ($apiSecret != '' && $apiSecret != "%20%20%20%20%20%20%20%20%20%20%20%20%20%20") {
181
+                  $apisecretstrenc = $this->crypto->encrypt($apiSecret);                
182
+              } elseif ($apiSecret == "%20%20%20%20%20%20%20%20%20%20%20%20%20%20") {
183
+                  $apisecretstrenc = $row['api_secret'];
184
+              } elseif ($apiSecret == '') {
185
+                  $apisecretstrenc = '';
186
+              }
187
+
188
+              if ($webhookToken != '' && $webhookToken != "%20%20%20%20%20%20%20%20%20%20%20") {
189
+                  $webhookTokenenc = $this->crypto->encrypt($webhookToken);                
190
+              } elseif ($webhookToken == "%20%20%20%20%20%20%20%20%20%20%20") {
191
+                  $webhookTokenenc = $row['webhook_token'];
192
+              } elseif ($webhookToken == '') {
193
+                  $webhookTokenenc = '';
194
+              }
195
+
196
+              if ($receiveUrl != '' && $receiveUrl != "%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20") {
197
+                  $receiveUrlenc = $this->crypto->encrypt($receiveUrl);                
198
+              } elseif ($receiveUrl == "%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20") {
199
+                  $receiveUrlenc = $row['receive_url'];
200
+              } elseif ($receiveUrl == '') {
201
+                  $receiveUrlenc = '';
202
+              }
203
+
204
+	      $sqlup = $this->connection->prepare('
205
+			UPDATE `*PREFIX*pax_fax`
206
+			SET `api_key` = ?, `api_secret` = ?, `webhook_token` = ?, `receive_url` = ?, `get_notification` = ?, `notification_email` = ?
207
+                        WHERE `user_id` = ?');
208
+	      $updateRes = $sqlup->execute([$apikeystrenc, $apisecretstrenc, $webhookTokenenc, $receiveUrlenc, $getNotification, $notificationEmail, $userId]);
209
+	      $updateRes->closeCursor();
210
+          }
211
+      }
212
+
213
+      /**
214
+       * @NoAdminRequired
215
+       */
216
+      public function getapicredentials($userId) {
217
+
218
+              $sqlselcr = $this->connection->prepare('
219
+	                    SELECT `id`, `user_id`, `api_key`, `api_secret`, `webhook_token`, `receive_url`, `get_notification`, `notification_email` 
220
+                            FROM `*PREFIX*pax_fax`
221
+                            WHERE `user_id` = ?');
222
+	      $resultselcr = $sqlselcr->execute([$userId]);
223
+              $settingsfrdb = $resultselcr->fetch();
224
+              $resultselcr->closeCursor();
225
+
226
+              if (($settingsfrdb['api_key'] != '') && ($settingsfrdb['api_key'] != 'undefined') && ($settingsfrdb['api_key'] != null)) {
227
+                   $apikeystr = $this->crypto->decrypt($settingsfrdb['api_key']);
228
+              } else { $apikeystr = ''; }
229
+
230
+              if (($settingsfrdb['api_secret'] != '') && ($settingsfrdb['api_secret'] != 'undefined') && ($settingsfrdb['api_secret'] != null)) {              
231
+                   $apisecretstr = $this->crypto->decrypt($settingsfrdb['api_secret']);
232
+              } else { $apisecretstr = ''; }
233
+
234
+              if (($settingsfrdb['webhook_token'] != '') && ($settingsfrdb['webhook_token'] != 'undefined') && ($settingsfrdb['webhook_token'] != null)) {            
235
+                   $webhookToken = $this->crypto->decrypt($settingsfrdb['webhook_token']);
236
+              } else { $webhookToken = ''; }
237
+
238
+              if (($settingsfrdb['receive_url'] != '') && ($settingsfrdb['receive_url'] != 'undefined') && ($settingsfrdb['receive_url'] != null)) {
239
+                   $receiveUrl = $this->crypto->decrypt($settingsfrdb['receive_url']);
240
+              } else { $receiveUrl = ''; }
241
+
242
+              $getnotification = $settingsfrdb['get_notification'];
243
+              $notifyemail = $settingsfrdb['notification_email'];
244
+
245
+              return [$apikeystr, $apisecretstr, $webhookToken, $receiveUrl, $getnotification, $notifyemail];
246
+      }
247
+
248
+}