Added the handler of the macro password (thanks to denis mourier <denis.mourier2@gmail.com>). Advanced to version 0.8.

This commit is contained in:
依瑪貓 2017-05-15 11:40:44 +08:00
parent 548a5f538b
commit ffbff69f2b
2 changed files with 29 additions and 4 deletions

View File

@ -102,6 +102,7 @@ LIBRARY The name of the Basic library. Default to the same
from __future__ import print_function from __future__ import print_function
import argparse import argparse
import getpass
import os import os
import sys import sys
import time import time
@ -220,7 +221,7 @@ def parse_args():
" an \"Untitied 1\" (in your language) if it is a new" " an \"Untitied 1\" (in your language) if it is a new"
" file.")) " file."))
parser.add_argument( parser.add_argument(
"-v", "--version", action="version", version="%(prog)s 0.7") "-v", "--version", action="version", version="%(prog)s 0.8")
args = parser.parse_args() args = parser.parse_args()
# Obtain the absolute path # Obtain the absolute path
@ -304,8 +305,8 @@ def find_doc(oo, target):
if target is None: if target is None:
if len(opened) == 1: if len(opened) == 1:
return opened[0] return opened[0]
print("ERROR: There are more than one opened documens." print("ERROR: There are more than one opened documens. "
" Please specify the file path.", "Please specify the file path.",
file=sys.stderr) file=sys.stderr)
for path in get_doc_paths(opened, file_content_provider): for path in get_doc_paths(opened, file_content_provider):
print("* %s" % path, file=sys.stderr) print("* %s" % path, file=sys.stderr)
@ -443,6 +444,7 @@ def read_basic_modules(storage, libname):
modules = {} modules = {}
if not storage.libs.hasByName(libname): if not storage.libs.hasByName(libname):
return modules return modules
verify_library_password(storage, libname)
storage.libs.loadLibrary(libname) storage.libs.loadLibrary(libname)
library = storage.libs.getByName(libname) library = storage.libs.getByName(libname)
for modname in library.getElementNames(): for modname in library.getElementNames():
@ -464,11 +466,13 @@ def update_basic_modules(storage, libname, modules):
storage.libs.createLibrary(libname) storage.libs.createLibrary(libname)
print("Script library %s created." % libname, file=sys.stderr) print("Script library %s created." % libname, file=sys.stderr)
create_dialog_library(storage, libname) create_dialog_library(storage, libname)
verify_library_password(storage, libname)
library = storage.libs.getByName(libname) library = storage.libs.getByName(libname)
for modname in sorted(modules.keys()): for modname in sorted(modules.keys()):
library.insertByName(modname, modules[modname]) library.insertByName(modname, modules[modname])
print("Module %s added." % modname, file=sys.stderr) print("Module %s added." % modname, file=sys.stderr)
else: else:
verify_library_password(storage, libname)
storage.libs.loadLibrary(libname) storage.libs.loadLibrary(libname)
library = storage.libs.getByName(libname) library = storage.libs.getByName(libname)
# As of OpenOffice 4.1.3, when there is no modules in the # As of OpenOffice 4.1.3, when there is no modules in the
@ -514,6 +518,27 @@ def create_dialog_library(storage, libname):
libraries.storeLibraries() libraries.storeLibraries()
def verify_library_password(storage, libname):
"""Verify the password for the library.
Arguments:
storage: The Basic macro storage, as a Storage object.
libname: The name of the dialog library.
password: The password for the library.
"""
if not storage.libs.isLibraryPasswordProtected(libname):
return
if storage.libs.isLibraryPasswordVerified(libname):
return
while True:
password = getpass.getpass("Password: ")
if storage.libs.verifyLibraryPassword(libname, password):
return
print("ERROR: Failed password for library %s." % libname,
file=sys.stderr)
return
def run_macro(storage, libname, macro): def run_macro(storage, libname, macro):
"""Run a Basic macro. """Run a Basic macro.

View File

@ -29,7 +29,7 @@ if os.path.basename(sys.executable) == "python.bin":
os.path.dirname(sys.executable), "python") os.path.dirname(sys.executable), "python")
setup(name="obasync", setup(name="obasync",
version="0.7", version="0.8",
description="Office Basic macro source synchronizer", description="Office Basic macro source synchronizer",
url="https://pypi.python.org/pypi/obasync", url="https://pypi.python.org/pypi/obasync",
author="imacat", author="imacat",