示例#1
0
 def command(self):
     session, config = self.session, self.session.config
     handle, lines = self.args[0], self.args[1:]
     vcard = config.vcards.get_vcard(handle)
     if not vcard:
         return self._error('%s not found: %s' % (self.VCARD, handle))
     config.vcards.deindex_vcard(vcard)
     try:
         for l in lines:
             if '=' in l[:5]:
                 ln, l = l.split('=', 1)
                 vcard.set_line(int(ln.strip()), VCardLine(l.strip()))
             else:
                 vcard.add(VCardLine(l))
         vcard.save()
         return self._success(_("Added %d lines") % len(lines),
                              result=self._vcard_list([vcard],
                                                      simplify=True,
                                                      info={
                                                          'updated': handle,
                                                          'added':
                                                          len(lines)
                                                      }))
     except KeyboardInterrupt:
         raise
     except:
         config.vcards.index_vcard(vcard)
         self._ignore_exception()
         return self._error(_('Error adding lines to %s') % handle)
     finally:
         config.vcards.index_vcard(vcard)
示例#2
0
 def _make_new_vcard(self, handle, name):
     l = [VCardLine(name='fn', value=name),
          VCardLine(name='kind', value=self.KIND)]
     if self.KIND == 'individual':
         return SimpleVCard(VCardLine(name='email', value=handle), *l)
     else:
         return SimpleVCard(VCardLine(name='nickname', value=handle), *l)
示例#3
0
    def command(self):
        session, config = self.session, self.session.config

        if self.args:
            handle, lines = self.args[0], self.args[1:]
        else:
            handle = self.data.get('rid', self.data.get('email', [None]))[0]
            if not handle:
                raise ValueError('Must set rid or email to choose VCard')
            name, value, replace, replace_all = (self.data.get(n, [None])[0]
                                                 for n in ('name', 'value',
                                                           'replace',
                                                           'replace_all'))
            if not name or not value or ':' in name or '=' in name:
                raise ValueError('Must send a line name and line data')
            value = '%s:%s' % (name, value)
            if replace:
                value = '%d=%s:%s' % (replace, value)
            elif replace_all:
                value = '=%s:%s' % (replace, value)
            lines = [value]

        vcard = config.vcards.get_vcard(handle)
        if not vcard:
            return self._error('%s not found: %s' % (self.VCARD, handle))
        config.vcards.deindex_vcard(vcard)
        try:
            for l in lines:
                if l[0] == '=':
                    l = l[1:]
                    name = l.split(':', 1)[0]
                    existing = [ex._line_id for ex in vcard.get_all(name)]
                    vcard.add(VCardLine(l.strip()))
                    vcard.remove(*existing)

                elif '=' in l[:5]:
                    ln, l = l.split('=', 1)
                    vcard.set_line(int(ln.strip()), VCardLine(l.strip()))

                else:
                    vcard.add(VCardLine(l))

            vcard.save()
            return self._success(_("Added %d lines") % len(lines),
                                 result=self._vcard_list([vcard],
                                                         simplify=True,
                                                         info={
                                                             'updated': handle,
                                                             'added':
                                                             len(lines)
                                                         }))
        except KeyboardInterrupt:
            raise
        except:
            config.vcards.index_vcard(vcard)
            self._ignore_exception()
            return self._error(_('Error adding lines to %s') % handle)
        finally:
            config.vcards.index_vcard(vcard)
示例#4
0
 def _make_new_vcard(self, handle, name, kind):
     l = [
         VCardLine(name='fn', value=name),
         VCardLine(name='kind', value=kind)
     ]
     if self.KIND in VCardStore.KINDS_PEOPLE:
         return MailpileVCard(
             VCardLine(name='email', value=handle, type='pref'), *l)
     else:
         return MailpileVCard(VCardLine(name='nickname', value=handle), *l)
示例#5
0
 def _get_or_create_vcard(self, address):
     vcard = self.session.config.vcards.get_vcard(address)
     if not vcard:
         vcard = MailpileVCard(VCardLine(name='email',
                                         value=address,
                                         type='pref'),
                               VCardLine(name='kind', value='individual'),
                               config=self.session.config)
         self.session.config.vcards.add_vcards(vcard)
     return vcard
    def test_vcard_overrides_mail_history(self):
        vcard = self._add_vcard('Encrypter', '*****@*****.**')
        vcard.add(VCardLine(name=VCARD_CRYPTO_POLICY, value='sign'))

        res = self.mp.crypto_policy('*****@*****.**').as_dict()

        self.assertEqual('success', res['status'])
        self.assertEqual('sign', res['result']['crypto-policy'])
示例#7
0
 def _update_vcard(self, vcard, policy):
     if 'default' == policy:
         for line in vcard.get_all(VCARD_CRYPTO_POLICY):
             vcard.remove(line.line_id)
     else:
         if len(vcard.get_all(VCARD_CRYPTO_POLICY)) > 0:
             vcard.get(VCARD_CRYPTO_POLICY).value = policy
         else:
             vcard.add(VCardLine(name=VCARD_CRYPTO_POLICY, value=policy))
示例#8
0
    def get_vcards(self):
        if not self.config.active:
            return []

        def _b64(data):
            return data.encode('base64').replace('\n', '')

        results = []
        for contact in self._want_update():
            email = contact.email
            if not email:
                continue

            if mailpile.util.QUITTING:
                return []

            vcard = MailpileVCard(VCardLine(name=self.VCARD_TS,
                                            value=int(time.time())))
            email, img, gcard, gjson = self.check_libravatar(contact, email)

            if gcard:
                # FIXME: Is this boring?
                # vcard.load(data=gcard)
                pass

            if gjson:
                # FIXME: This is less boring!
                pass

            if img:
                vcard.add(VCardLine(
                    name='photo',
                    value='data:image/jpeg;base64,%s' % _b64(img),
                    mediatype='image/jpeg'
                ))

            if gcard or gjson or img:
                vcard.add(VCardLine(name='email', value=email))
                results.append(vcard)
        return results
示例#9
0
 def command(self):
     session, config = self.session, self.session.config
     handle, var, lines = self.args[0], self.args[1], self.args[2:]
     vcard = config.vcards.get_vcard(handle)
     if not vcard:
         return self._error('%s not found: %s' % (self.VCARD, handle))
     config.vcards.deindex_vcard(vcard)
     try:
         vcard.add(*[VCardLine(l) for l in lines])
         vcard.save()
         return self._vcard_list([vcard], info={
             'updated': handle,
             'added': len(lines)
         })
     except:
         config.vcards.index_vcard(vcard)
         self._ignore_exception()
         return self._error('Error setting %s = %s' % (var, val))
     finally:
         config.vcards.index_vcard(vcard)
示例#10
0
 def _add_vcard(self, full_name, email):
     card = MailpileVCard(VCardLine(name='fn', value=full_name),
                          VCardLine(name='email', value=email))
     self.config.vcards.add_vcards(card)
     return card
示例#11
0
    def test_default_policy_removes_vcard_line(self):
        vcard = self._add_vcard('Test', '*****@*****.**')
        vcard.add(VCardLine(name=VCARD_CRYPTO_POLICY, value='sign'))

        self.mp.crypto_policy_set('*****@*****.**', 'default')
        self.assertEqual(0, len(vcard.get_all(VCARD_CRYPTO_POLICY)))
示例#12
0
 def _add_vcard(self, full_name, email):
     card = SimpleVCard(VCardLine(name='fn', value=full_name),
                        VCardLine(name='email', value=email))
     self.config.vcards.index_vcard(card)
     return card