Add replace argument to gam signature/vacation to allow replacement in data read from file

This commit is contained in:
Ross Scroggs
2016-06-28 18:05:11 -07:00
parent 734413266b
commit 7f67a3043a
3 changed files with 56 additions and 12 deletions

View File

@ -379,6 +379,32 @@ def getCharSet(i):
return (i, GC_Values.get(GC_CHARSET, GM_Globals[GM_SYS_ENCODING]))
return (i+2, sys.argv[i+1])
def getREPattern(i):
if i < len(sys.argv):
patstr = sys.argv[i]
if patstr:
try:
pattern = re.compile(patstr)
return pattern
except re.error as e:
print u'ERROR: "{0}" is not a valid RE pattern: {1}'.format(patstr, e)
sys.exit(2)
print u'ERROR: expected an <REPattern>'
sys.exit(2)
def getString(i, item, emptyOK=False, optional=False):
if i < len(sys.argv):
argstr = sys.argv[i]
if argstr:
return argstr
if emptyOK or optional:
return u''
print u'ERROR: expected a Non-empty <{0}>'.format(item)
sys.exit(2)
elif optional:
return u''
print u'ERROR: expected a <{0}>'.format(item)
sys.exit(2)
#
# Open a file
#
@ -5062,19 +5088,24 @@ def getForward(users):
pass
def doSignature(users):
import cgi
i = 4
if sys.argv[i].lower() == u'file':
filename = sys.argv[i+1]
i += 2
i, encoding = getCharSet(i)
signature = readFile(filename, encoding=encoding).replace(u'\\n', u'&#xA;').replace(u'\n', u'<br/>')
signature = readFile(filename, encoding=encoding).replace(u'\\n', u'<br/>').replace(u'\n', u'<br/>')
else:
signature = cgi.escape(sys.argv[i]).replace(u'\\n', u'&#xA;').replace(u'"', u"'")
xmlsig = u'''<?xml version="1.0" encoding="utf-8"?>
<atom:entry xmlns:atom="http://www.w3.org/2005/Atom" xmlns:apps="http://schemas.google.com/apps/2006">
<apps:property name="signature" value="%s" />
</atom:entry>''' % signature
signature = getString(i, u'String', emptyOK=True).replace(u'\\n', u'<br/>').replace(u'\n', u'<br/>')
i += 1
while i < len(sys.argv):
if sys.argv[i].lower() == u'replace':
matchPattern = getREPattern(i+1)
matchReplacement = getString(i+2, u'String', emptyOK=True)
signature = matchPattern.sub(matchReplacement, signature)
i += 3
else:
print u'ERROR: %s is not a valid argument for "gam <users> signature"' % sys.argv[i]
sys.exit(2)
emailsettings = getEmailSettingsObject()
count = len(users)
i = 1
@ -5085,9 +5116,8 @@ def doSignature(users):
else:
emailsettings.domain = GC_Values[GC_DOMAIN] #make sure it's back at default domain
print u"Setting Signature for %s (%s of %s)" % (user+u'@'+emailsettings.domain, i, count)
uri = u'https://apps-apis.google.com/a/feeds/emailsettings/2.0/%s/%s/signature' % (emailsettings.domain, user)
i += 1
callGData(emailsettings, u'Put', soft_errors=True, data=xmlsig, uri=uri)
callGData(emailsettings, u'UpdateSignature', soft_errors=True, username=user, signature=signature)
def getSignature(users):
emailsettings = getEmailSettingsObject()
@ -5161,6 +5191,11 @@ def doVacation(users):
i += 2
i, encoding = getCharSet(i)
message = readFile(filename, encoding=encoding)
elif sys.argv[i].lower() == u'replace':
matchPattern = getREPattern(i+1)
matchReplacement = getString(i+2, u'String', emptyOK=True)
message = matchPattern.sub(matchReplacement, message)
i += 3
else:
print u'ERROR: %s is not a valid argument for "gam <users> vacation"' % sys.argv[i]
sys.exit(2)