parent
1dc6043061
commit
e8923e1ab8
4 ha cambiato i file con 94 aggiunte e 6 eliminazioni
@ -0,0 +1,86 @@ |
||||
import appdirs |
||||
import argparse |
||||
import logging |
||||
import os |
||||
import pathlib |
||||
import sys |
||||
|
||||
from configparser import ConfigParser |
||||
from getpass import getpass |
||||
|
||||
from api import StandardNotesAPI |
||||
|
||||
OFFICIAL_SERVER_URL = 'https://sync.standardnotes.org' |
||||
APP_NAME = 'standardnotes-fs' |
||||
logging.basicConfig(level=logging.DEBUG) |
||||
|
||||
# path settings |
||||
cfg_env = os.environ.get('SN_FS_CONFIG_PATH') |
||||
CONFIG_PATH = cfg_env if cfg_env else appdirs.user_config_dir(APP_NAME) |
||||
CONFIG_FILE = os.path.join(CONFIG_PATH, APP_NAME + '.conf') |
||||
CONFIG_FILE = pathlib.PurePath(CONFIG_PATH, APP_NAME + '.conf') |
||||
|
||||
def parse_options(): |
||||
parser = argparse.ArgumentParser(formatter_class=argparse.RawTextHelpFormatter) |
||||
parser.add_argument('--username', |
||||
help='Standard Notes username to log in with') |
||||
parser.add_argument('--password', |
||||
help='Standard Notes password to log in with\n' |
||||
'NOTE: It is NOT recommended to use this! The\n' |
||||
' password may be stored in history, so\n' |
||||
' use the password prompt instead.') |
||||
parser.add_argument('--sync-url', |
||||
help='URL of Standard File sync server. Defaults to:\n' |
||||
''+OFFICIAL_SERVER_URL) |
||||
parser.add_argument('--no-config-file', action='store_true', |
||||
help='Don\'t load or create a config file') |
||||
parser.add_argument('--config', |
||||
help='Specify a config file location. Defaults to:\n' |
||||
''+str(CONFIG_FILE)) |
||||
return parser.parse_args() |
||||
|
||||
def main(): |
||||
args = parse_options() |
||||
config = ConfigParser() |
||||
config['DEFAULT'] = {} |
||||
keys = {} |
||||
|
||||
if not args.no_config_file: |
||||
config_file = args.config if args.config else CONFIG_FILE |
||||
config_file = pathlib.Path(config_file) |
||||
|
||||
try: |
||||
config_file.parent.mkdir(mode=0o0700, parents=True, exist_ok=True) |
||||
except OSError: |
||||
err_msg = 'Error creating directory "%s".' |
||||
logging.critical(err_msg % str(config_file.parent)) |
||||
sys.exit(1) |
||||
|
||||
try: |
||||
with config_file.open() as f: |
||||
config.read_file(f) |
||||
except OSError: |
||||
err_msg = 'Config file "%s" not found.' |
||||
logging.debug(err_msg % str(config_file)) |
||||
|
||||
if config.has_option('user', 'sync_url'): |
||||
sync_url = config.get('user', 'sync_url') |
||||
else: |
||||
sync_url = args.sync_url if args.sync_url else OFFICIAL_SERVER_URL |
||||
|
||||
if config.has_option('user', 'username') and config.has_section('keys'): |
||||
username = config.get('user', 'username') |
||||
keys = dict(config.items('keys')) |
||||
else: |
||||
username = args.username if args.username else \ |
||||
input('Please enter your Standard Notes username: ') |
||||
password = args.password if args.password else \ |
||||
getpass('Please enter your password (hidden): ') |
||||
|
||||
sn_api = StandardNotesAPI(sync_url, username) |
||||
if not keys: |
||||
keys = sn_api.genKeys(password) |
||||
sn_api.signIn(keys) |
||||
|
||||
if __name__ == '__main__': |
||||
main() |
Caricamento…
Reference in new issue