summaryrefslogtreecommitdiffstats
path: root/src/services
diff options
context:
space:
mode:
authorJohn Molakvoæ (skjnldsv) <skjnldsv@protonmail.com>2019-01-25 09:48:19 +0100
committerJohn Molakvoæ (skjnldsv) <skjnldsv@protonmail.com>2019-01-25 09:48:19 +0100
commitd982fcf753353236cbaa65a8715cbb4097d2e49f (patch)
treed56e3433ec5badd5a013335ca10290314f314306 /src/services
parent9b3d2929add7c1ab045b9bcf1d286fe55b7248f2 (diff)
Properly format displayName and validate fields
Signed-off-by: John Molakvoæ (skjnldsv) <skjnldsv@protonmail.com>
Diffstat (limited to 'src/services')
-rw-r--r--src/services/checks/index.js27
-rw-r--r--src/services/checks/missingFN.js48
-rw-r--r--src/services/parseVcf.js2
-rw-r--r--src/services/validate.js47
4 files changed, 123 insertions, 1 deletions
diff --git a/src/services/checks/index.js b/src/services/checks/index.js
new file mode 100644
index 00000000..4a72ce09
--- /dev/null
+++ b/src/services/checks/index.js
@@ -0,0 +1,27 @@
+/**
+ * @copyright Copyright (c) 2019 John Molakvoæ <skjnldsv@protonmail.com>
+ *
+ * @author John Molakvoæ <skjnldsv@protonmail.com>
+ *
+ * @license GNU AGPL version 3 or any later version
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Affero General Public License as
+ * published by the Free Software Foundation, either version 3 of the
+ * License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU Affero General Public License for more details.
+ *
+ * You should have received a copy of the GNU Affero General Public License
+ * along with this program. If not, see <http://www.gnu.org/licenses/>.
+ *
+ */
+
+import missingFN from './missingFN'
+
+export default [
+ missingFN
+]
diff --git a/src/services/checks/missingFN.js b/src/services/checks/missingFN.js
new file mode 100644
index 00000000..3c7ea9e6
--- /dev/null
+++ b/src/services/checks/missingFN.js
@@ -0,0 +1,48 @@
+/**
+ * @copyright Copyright (c) 2019 John Molakvoæ <skjnldsv@protonmail.com>
+ *
+ * @author John Molakvoæ <skjnldsv@protonmail.com>
+ *
+ * @license GNU AGPL version 3 or any later version
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Affero General Public License as
+ * published by the Free Software Foundation, either version 3 of the
+ * License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU Affero General Public License for more details.
+ *
+ * You should have received a copy of the GNU Affero General Public License
+ * along with this program. If not, see <http://www.gnu.org/licenses/>.
+ *
+ */
+
+/**
+ * the FN field is mandatory. If there is none we need to
+ * create it based on the available data
+ */
+export default {
+ name: 'missing FN',
+ run: contact => {
+ return !contact.vCard.hasProperty('fn')
+ },
+ fix: contact => {
+ if (contact.vCard.hasProperty('n')) {
+ // Stevenson;John;Philip,Paul;Dr.;Jr.,M.D.,A.C.P.
+ // -> John Stevenson
+ const n = contact.vCard.getFirstPropertyValue('n')
+ contact.fullName = n.slice(0, 2).reverse().join(' ')
+ return true
+ } else if (contact.vCard.hasProperty('org')) {
+ const org = contact.vCard.getFirstPropertyValue('org')
+ // ABC, Inc.;North American Division;Marketing
+ // -> ABC, Inc.
+ contact.fullName = org[0]
+ return true
+ }
+ return false
+ }
+}
diff --git a/src/services/parseVcf.js b/src/services/parseVcf.js
index ea733eaa..184c8e76 100644
--- a/src/services/parseVcf.js
+++ b/src/services/parseVcf.js
@@ -28,7 +28,7 @@ export default function parseVcf(data = '', addressbook) {
let vCards = data.match(regexp)
if (!vCards) {
- console.debug('Error during the parsing of the following vcf file: ', data)
+ console.error('Error during the parsing of the following vcf file: ', data)
return []
}
diff --git a/src/services/validate.js b/src/services/validate.js
new file mode 100644
index 00000000..986dd0a2
--- /dev/null
+++ b/src/services/validate.js
@@ -0,0 +1,47 @@
+/**
+ * @copyright Copyright (c) 2019 John Molakvoæ <skjnldsv@protonmail.com>
+ *
+ * @author John Molakvoæ <skjnldsv@protonmail.com>
+ *
+ * @license GNU AGPL version 3 or any later version
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Affero General Public License as
+ * published by the Free Software Foundation, either version 3 of the
+ * License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU Affero General Public License for more details.
+ *
+ * You should have received a copy of the GNU Affero General Public License
+ * along with this program. If not, see <http://www.gnu.org/licenses/>.
+ *
+ */
+
+import Contact from '../models/contact'
+import checks from './checks/'
+
+export default function(contact) {
+ if (contact instanceof Contact) {
+
+ // Going through every checks
+ checks.forEach(check => {
+ if (check.run(contact)) {
+
+ // A fix is needed, running ⏳
+ if (!check.fix(contact)) {
+ // FAILURE 🙅
+ console.warn('The following contact needed a correction that failed', check.name, contact)
+ } else {
+ // SUCCESS 💪
+ console.info('The following contact has been repaired', check.name, contact)
+ }
+ }
+ })
+
+ } else {
+ throw new Error('Invalid contact provided')
+ }
+}