def create(self): identity = {} identity_name = self.args.identity_name self._ensure( not identity_name in self.config.get_all_identities_names(), "identity_name {} already exists".format(identity_name)) identity_type = self.args.identity_type identity["identity_type"] = identity_type for kw, is_secret in get_kws_for_identity_type(identity_type): value = getattr(self.args, kw) if value is None and is_secret: kw_prompt = "{}: ".format(" ".join(kw.capitalize().split("_"))) value = getpass.getpass(kw_prompt) or None self._ensure( value is not None, "--{} is required for identity_type {}".format( kw, identity_type)) identity[kw] = value if (self.args.network): identity["network"] = self.args.network identity["default_wallet_index"] = self.args.wallet_index self.config.add_identity(identity_name, identity, self.out_f)
def list(self): for identity_section in filter(lambda x: x.startswith("identity."), self.config.sections()): identity = self.config[identity_section] key_is_secret_lookup = {} identity_type = self.config.get(identity_section, 'identity_type') for kw, is_secret in get_kws_for_identity_type(identity_type): key_is_secret_lookup[kw] = is_secret self._pprint({ identity_section[len("identity."):]: { k: (v if not key_is_secret_lookup.get(k, False) else "xxxxxx") for k, v in identity.items() } })
def init(self): self._printout( "Create your first identity. This will be used to authenticate and sign requests pertaining\n" "to the blockchain.\n" "\n" "The available identity types are:\n" " - 'rpc' (yields to a required ethereum json-rpc endpoint for signing using a given wallet\n" " index)\n" " - 'mnemonic' (uses a required bip39 mnemonic for HDWallet/account derivation and signing\n" " using a given wallet index)\n" " - 'key' (uses a required hex-encoded private key for signing)\n" " - 'ledger' (yields to a required ledger nano s device for signing using a given wallet\n" " index)\n" " - 'trezor' (yields to a required trezor device for signing using a given wallet index)\n" " Note that trezor devices currently implement a message signing scheme that is at\n" " odds with all other available tools. As such, trezor-based identities are currently\n" " only partially-functional with the snet cli (they cannot be used to call services\n" " using 'snet client')." "\n" "Create additional identities by running 'snet identity create', and switch identities by \n" "running 'snet identity <identity_name>'.\n") create_identity_kwargs = {} identity_name = input( "Choose a name for your first identity: \n") or None self._ensure(identity_name is not None, "identity name is required") create_identity_kwargs["identity_name"] = identity_name identity_type = input( "Select an identity type for your first identity (choose from {}): \n" .format(get_identity_types())) or None self._ensure( identity_type in get_identity_types(), "identity type {} not in {}".format(identity_type, get_identity_types())) create_identity_kwargs["identity_type"] = identity_type for kw, is_secret in get_kws_for_identity_type(identity_type): kw_prompt = "{}: \n".format(" ".join(kw.capitalize().split("_"))) if is_secret: value = getpass.getpass(kw_prompt) or None else: value = input(kw_prompt) or None self._ensure(value is not None, "{} is required".format(kw.split("_"))) create_identity_kwargs[kw] = value IdentityCommand(self.config, DefaultAttributeObject(**create_identity_kwargs), self.err_f, self.err_f).create() self._set_key("identity_name", identity_name, out_f=self.err_f)
def create(self): identity = {} identity_name = self.args.identity_name self._ensure(not identity_name in self.config.get_all_identities_names(), "identity_name {} already exists".format(identity_name)) identity_type = self.args.identity_type identity["identity_type"] = identity_type for kw, is_secret in get_kws_for_identity_type(identity_type): value = getattr(self.args, kw) if value is None and is_secret: kw_prompt = "{}: ".format(" ".join(kw.capitalize().split("_"))) value = getpass.getpass(kw_prompt) or None self._ensure(value is not None, "--{} is required for identity_type {}".format(kw, identity_type)) identity[kw] = value if (self.args.network): identity["network"] = self.args.network identity["default_wallet_index"] = self.args.wallet_index self.config.add_identity(identity_name, identity, self.out_f)
def create(self): identity = {} identity_name = self.args.identity_name self._ensure( not self.config.has_section("identity.{}".format(identity_name)), "identity_name {} already in use".format(identity_name)) identity_type = self.args.identity_type identity["identity_type"] = identity_type for kw, is_secret in get_kws_for_identity_type(identity_type): value = getattr(self.args, kw) if value is None and is_secret: kw_prompt = "{}: ".format(" ".join(kw.capitalize().split("_"))) value = getpass.getpass(kw_prompt) or None self._ensure( value is not None, "--{} is required for identity_type {}".format( kw, identity_type)) identity[kw] = value self.config["identity.{}".format(identity_name)] = identity self.config.persist()