---
name: "Net::OpenID::Yadis"
section: "3pm"
platform: "linux"
package: "libnet-openid-common-perl"
version: "1.20-2"
release: "Debian 13 (Trixie)"
platforms: ["linux"]
url: "https://new.carta.tech/Net::OpenID::Yadis"
---

# Net::OpenID::Yadis(3pm)

Perform Yadis discovery on URLs

## NAME

Net::OpenID::Yadis - Perform Yadis discovery on URLs

## VERSION

version 1.20

## SYNOPSIS

```
  use Net::OpenID::Yadis;
  my $disc = Net::OpenID::Yadis->new(
      consumer => $consumer, # Net::OpenID::Consumer object
  );
  my $xrd = $disc->discover("http://id.example.com/") or Carp::croak($disc->err);
  print $disc->identity_url;       # Yadis URL (Final URL if redirected)
  print $disc->xrd_url;            # Yadis Resourse Descriptor URL
  foreach my $srv (@$xrd) {        # Loop for Each Service in Yadis Resourse Descriptor
    print $srv->priority;          # Service priority (sorted)
    print $srv->Type;              # Identifier of some version of some service (scalar, array or array ref)
    print $srv->URI;               # URI that resolves to a resource providing the service (scalar, array or array ref)
    print $srv->extra_field("Delegate","http://openid.net/xmlns/1.0");
                                   # Extra field of some service
  }
  # If you are interested only in OpenID. (either 1.1 or 2.0)
  my $xrd = $self->services(
    'http://specs.openid.net/auth/2.0/signon',
    'http://specs.openid.net/auth/2.0/server',
    'http://openid.net/signon/1.1',
  );
  # If you want to choose random server by code-ref.
  my $xrd = $self->services(sub{($_[int(rand(@_))])});
```

## DESCRIPTION

This module provides an implementation of the Yadis protocol, which does XRDS-based service discovery on URLs.

This module was originally developed by OHTSUKA Ko-hei as Net::Yadis::Discovery, but was forked and simplified for inclusion in the core OpenID Consumer package.

This simplified version is tailored for the needs of Net::OpenID::Consumer; for other uses, Net::Yadis::Discovery is probably a better choice.

## CONSTRUCTOR

- "new"

  my `$disc` = Net::OpenID::Yadis-\>new(\[ `%opts` \]);

  You can set the `"consumer"` in the constructor.  See the corresponding method description below.

## EXPORT

This module exports three constant values to use with discover method.

- "YR\_GET"

  If you set this, module check Yadis URL start from HTTP GET request. This is the default.

- "YR\_XRDS"

  If you set this, this module consider Yadis URL as Yadis Resource Descriptor URL. If not so, an error is returned.

## METHODS

- $disc-\>**consumer**($consumer)

  - $disc-\>**consumer**

  Get or set the Net::OpenID::Consumer object that this object is associated with.

- $disc-\>**discover**($url,\[$request\_method\])

  Given a user-entered `$url` (which could be missing http://, or have extra whitespace, etc), returns either array/array ref of Net::OpenID::Yadis::Service objects, or undef on failure.

  `$request_method` is optional, and if set this, you can change the HTTP request method of fetching Yadis URL. See EXPORT to know the value you can set, and default is YR\_HEAD.

  If this method returns undef, you can rely on the following errors codes (from `$csr`-\>**errcode**) to decide what to present to the user:

  - xrd\_parse\_error

    - xrd\_format\_error

    - too\_many\_hops

    - no\_yadis\_document

    - url\_fetch\_err

    - empty\_url

    - url\_gone

    - $disc-\>**xrd\_objects**

  Returns array/array ref of Net::OpenID::Yadis objects. It is same what could be got by discover method.

- $disc-\>**identity\_url**

  Returns Yadis URL. If not redirected, it is same with the argument of discover method.

- $disc-\>**xrd\_url**

  Returns Yadis Resource Descriptor URL.

- $disc-\>**servers**($protocol,$protocol,...)

  - $disc-\>**servers**($protocol=\>\[$version1,$version2\],...)

  - $disc-\>**servers**($protocol,....,$code\_ref);

  Filter method of xrd\_objects.

  If no option is defined, returns same result with xrd\_objects method.

  protocol names or Type URLs are given, filter only given protocol. Two or more protocols are given, return and results of filtering.

  Sample:\
     `$disc`-\>servers("openid","http://lid.netmesh.org/sso/1.0");

  If reference of version numbers array is given after protocol names, filter only given version of protocol.

  Sample:\
     `$disc`-\>servers("openid"=\>\['1.0','1.1'\],"lid"=\>\['1.0'\]);

  If you want to use version numbers limitation with type URL, you can use \\ver as place holder of version number.

  Sample:\
     `$disc`-\>servers("http://lid.netmesh.org/sso/\\ver"=\>\['1.0','2.0'\]);

  If code reference is given as argument , you can make your own filter rule. code reference is executed at the last of filtering logic, like this:

  ```
    @results = $code_ref->(@temporary_results)
  ```

  Sample: If you want to filter OpenID server and get only first one:\
     ($openid\_server) = `$disc`-\>servers("openid",sub{$\_\[0\]});

- $disc-\>**err**

  Returns the last error, in form "errcode: errtext"

- $disc-\>**errcode**

  Returns the last error code.

- $disc-\>**errtext**

  Returns the last error text.

## COPYRIGHT

This module is Copyright (c) 2006 OHTSUKA Ko-hei. All rights reserved.

You may distribute under the terms of either the GNU General Public License or the Artistic License, as specified in the Perl README file.

## WARRANTY

This is free software. IT COMES WITHOUT WARRANTY OF ANY KIND.

## SEE ALSO

Yadis website:  \<http://yadis.org/\>

Net::OpenID::Yadis::Service

Net::OpenID::Consumer

## AUTHORS

Based on Net::Yadis::Discovery by OHTSUKA Ko-hei \<nene@kokogiko.net\>

Martin Atkins \<mart@degeneration.co.uk\>
