def join(options): fields = options.invite_code.split(INVITE_SEPARATOR) if len(fields) != 2: raise usage.UsageError("Invalid invite code.") magic_readonly_cap, dmd_write_cap = fields maybe_upgrade_magic_folders(options["node-directory"]) existing_folders = load_magic_folders(options["node-directory"]) if options['name'] in existing_folders: print("This client already has a magic-folder named '{}'".format( options['name']), file=options.stderr) return 1 db_fname = os.path.join( options["node-directory"], u"private", u"magicfolder_{}.sqlite".format(options['name']), ) if os.path.exists(db_fname): print("Database '{}' already exists; not overwriting".format(db_fname), file=options.stderr) return 1 folder = { u"directory": options.local_dir.encode('utf-8'), u"collective_dircap": magic_readonly_cap, u"upload_dircap": dmd_write_cap, u"poll_interval": options["poll-interval"], } existing_folders[options["name"]] = folder save_magic_folders(options["node-directory"], existing_folders) return 0
def join(options): fields = options.invite_code.split(INVITE_SEPARATOR) if len(fields) != 2: raise usage.UsageError("Invalid invite code.") magic_readonly_cap, dmd_write_cap = fields maybe_upgrade_magic_folders(options["node-directory"]) existing_folders = load_magic_folders(options["node-directory"]) if options['name'] in existing_folders: print("This client already has a magic-folder named '{}'".format(options['name']), file=options.stderr) return 1 db_fname = os.path.join( options["node-directory"], u"private", u"magicfolder_{}.sqlite".format(options['name']), ) if os.path.exists(db_fname): print("Database '{}' already exists; not overwriting".format(db_fname), file=options.stderr) return 1 folder = { u"directory": options.local_dir.encode('utf-8'), u"collective_dircap": magic_readonly_cap, u"upload_dircap": dmd_write_cap, u"poll_interval": options["poll-interval"], } existing_folders[options["name"]] = folder save_magic_folders(options["node-directory"], existing_folders) return 0
def create(options): precondition(isinstance(options.alias, unicode), alias=options.alias) precondition(isinstance(options.nickname, (unicode, NoneType)), nickname=options.nickname) precondition(isinstance(options.local_dir, (unicode, NoneType)), local_dir=options.local_dir) # make sure we don't already have a magic-folder with this name before we create the alias maybe_upgrade_magic_folders(options["node-directory"]) folders = load_magic_folders(options["node-directory"]) if options['name'] in folders: print >> options.stderr, "Already have a magic-folder named '{}'".format( options['name']) return 1 # create an alias; this basically just remembers the cap for the # master directory from allmydata.scripts import tahoe_add_alias create_alias_options = _delegate_options(options, CreateAliasOptions()) create_alias_options.alias = options.alias rc = tahoe_add_alias.create_alias(create_alias_options) if rc != 0: print >> options.stderr, create_alias_options.stderr.getvalue() return rc print >> options.stdout, create_alias_options.stdout.getvalue() if options.nickname is not None: print >> options.stdout, u"Inviting myself as client '{}':".format( options.nickname) invite_options = _delegate_options(options, InviteOptions()) invite_options.alias = options.alias invite_options.nickname = options.nickname invite_options['name'] = options['name'] rc = invite(invite_options) if rc != 0: print >> options.stderr, u"magic-folder: failed to invite after create\n" print >> options.stderr, invite_options.stderr.getvalue() return rc invite_code = invite_options.stdout.getvalue().strip() print >> options.stdout, u" created invite code" join_options = _delegate_options(options, JoinOptions()) join_options['poll-interval'] = options['poll-interval'] join_options.nickname = options.nickname join_options.local_dir = options.local_dir join_options.invite_code = invite_code rc = join(join_options) if rc != 0: print >> options.stderr, u"magic-folder: failed to join after create\n" print >> options.stderr, join_options.stderr.getvalue() return rc print >> options.stdout, u" joined new magic-folder" print >> options.stdout, ( u"Successfully created magic-folder '{}' with alias '{}:' " u"and client '{}'\nYou must re-start your node before the " u"magic-folder will be active.").format(options['name'], options.alias, options.nickname) return 0
def create(options): precondition(isinstance(options.alias, unicode), alias=options.alias) precondition(isinstance(options.nickname, (unicode, NoneType)), nickname=options.nickname) precondition(isinstance(options.local_dir, (unicode, NoneType)), local_dir=options.local_dir) # make sure we don't already have a magic-folder with this name before we create the alias maybe_upgrade_magic_folders(options["node-directory"]) folders = load_magic_folders(options["node-directory"]) if options['name'] in folders: print("Already have a magic-folder named '{}'".format(options['name']), file=options.stderr) return 1 # create an alias; this basically just remembers the cap for the # master directory from allmydata.scripts import tahoe_add_alias create_alias_options = _delegate_options(options, CreateAliasOptions()) create_alias_options.alias = options.alias rc = tahoe_add_alias.create_alias(create_alias_options) if rc != 0: print(create_alias_options.stderr.getvalue(), file=options.stderr) return rc print(create_alias_options.stdout.getvalue(), file=options.stdout) if options.nickname is not None: print(u"Inviting myself as client '{}':".format(options.nickname), file=options.stdout) invite_options = _delegate_options(options, InviteOptions()) invite_options.alias = options.alias invite_options.nickname = options.nickname invite_options['name'] = options['name'] rc = invite(invite_options) if rc != 0: print(u"magic-folder: failed to invite after create\n", file=options.stderr) print(invite_options.stderr.getvalue(), file=options.stderr) return rc invite_code = invite_options.stdout.getvalue().strip() print(u" created invite code", file=options.stdout) join_options = _delegate_options(options, JoinOptions()) join_options['poll-interval'] = options['poll-interval'] join_options.nickname = options.nickname join_options.local_dir = options.local_dir join_options.invite_code = invite_code rc = join(join_options) if rc != 0: print(u"magic-folder: failed to join after create\n", file=options.stderr) print(join_options.stderr.getvalue(), file=options.stderr) return rc print(u" joined new magic-folder", file=options.stdout) print( u"Successfully created magic-folder '{}' with alias '{}:' " u"and client '{}'\nYou must re-start your node before the " u"magic-folder will be active." .format(options['name'], options.alias, options.nickname), file=options.stdout) return 0