<?xml version='1.0'?>
<!DOCTYPE refentry PUBLIC "-//OASIS//DTD DocBook XML V4.2//EN"
        "http://www.oasis-open.org/docbook/xml/4.2/docbookx.dtd">

<refentry id="secret-tool">

	<refentryinfo>
		<title>secret-tool</title>
		<productname>XDG</productname>

		<authorgroup>
			<author>
				<contrib>Maintainer</contrib>
				<firstname>Stef</firstname>
				<surname>Walter</surname>
				<email>stefw@gnome.org</email>
			</author>
		</authorgroup>
	</refentryinfo>

	<refmeta>
		<refentrytitle>secret-tool</refentrytitle>
		<manvolnum>1</manvolnum>
		<refmiscinfo class="manual">User Commands</refmiscinfo>
	</refmeta>

	<refnamediv>
		<refname>secret-tool</refname>
		<refpurpose>Store and retrieve passwords</refpurpose>
	</refnamediv>

	<refsynopsisdiv>
		<cmdsynopsis>
			<command>secret-tool store <arg choice="plain">--label='Label'</arg> <arg choice="req">attribute</arg> <arg choice="req">value</arg> ...</command>
		</cmdsynopsis>
		<cmdsynopsis>
			<command>secret-tool lookup <arg choice="req">attribute</arg> <arg choice="req">value</arg> ...</command>
		</cmdsynopsis>
		<cmdsynopsis>
			<command>secret-tool clear <arg choice="req">attribute</arg> <arg choice="req">value</arg> ...</command>
		</cmdsynopsis>
		<cmdsynopsis>
			<command>secret-tool search <arg choice="opt">--all</arg><arg choice="req">attribute</arg> <arg choice="req">value</arg> ...</command>
		</cmdsynopsis>
	</refsynopsisdiv>

	<refsect1>
		<title>Description</title>

		<para><command>secret-tool</command> is a command line tool that
		can be used to store and retrieve passwords.</para>

		<para>Each password is stored in an item. Items are uniquely
		identified by a set of attribute keys and values. When storing
		a password you must specify unique pairs of attributes names
		and values, and when looking up a password you provide the same
		attribute name and value pairs.</para>

	</refsect1>

	<refsect1>
		<title>Store</title>

		<para>To store a password run <command>secret-tool</command>
		with the <arg choice="plain">store</arg> argument. You must
		also specify a label for the password with the
		<arg choice="plain">--label</arg> argument. This label will be
		displayed in the password manager.</para>

		<para>Make sure to pass a unique set of attributes names and
		values when storing a password. If the attributes match an
		already existing item, it will be updated instead of creating
		a new item.</para>

		<para>If invoked from a terminal or tty, then the password to store
		will be prompted for and only one line will be accepted.</para>

		<para>A password to store can also be piped in via stdin. The
		password will be the contents of stdin until EOF. If you provide
		a newline via stdin it will be stored as part of the password.</para>
	</refsect1>

	<refsect1>
		<title>Lookup</title>

		<para>To lookup a password run <command>secret-tool</command>
		with the <arg choice="plain">lookup</arg> argument. Specify the
		same same attribute names and value pairs that you passed when
		storing the password.</para>

		<para>If multiple items match the attribute provided, then the
		first password that is already unlocked will be returned. If
		necessary an item will be unlocked.</para>

		<para>When printing the password to a terminal or tty, an extra
		newline will be added after the password.</para>
	</refsect1>

	<refsect1>
		<title>Clear</title>

		<para>To remove a password run <command>secret-tool</command>
		with the <arg choice="plain">clear</arg> argument. Specify the
		same attribute name and value pairs that you passed when
		storing the password.</para>

		<para>All unlocked items that match the attributes will be
		removed.</para>
	</refsect1>

	<refsect1>
		<title>Search</title>

		<para>This command searches for and prints details on matching
		items in secret service. Specify the same attribute and value
		pairs that you passed in when storing the password. You can use the
		following options:</para>

		<variablelist>
		<varlistentry>
			<term><option>--all</option></term>
			<listitem><para>Return all matching results, rather than
			just the one of the matches. Without this option, the
			first unlocked match returned from the service will
			be printed.</para></listitem>
		</varlistentry>
		<varlistentry>
			<term><option>--unlock</option></term>
			<listitem><para>Unlock items that are locked and then
			print out their details. Without this option, locked items
			are skipped.</para></listitem>
		</varlistentry>
		</variablelist>
	</refsect1>

	<refsect1>
		<title>Exit status</title>

		<para>On success 0 is returned, a non-zero failure code otherwise.</para>
	</refsect1>

	<refsect1>
		<title>Examples</title>
		<example>
			<title>Storing, retrieving, and clearing a password</title>
<programlisting>
$ secret-tool store --label='My password' key1 value1 key2 value2
Password: My password
</programlisting>
<programlisting>
$ secret-tool lookup key1 value1 key2 value2
My password
</programlisting>
<programlisting>
$ secret-tool clear key1 value1 key2 value2
</programlisting>
		</example>
	</refsect1>

</refentry>
