microid.php 2.4 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495969798
  1. <?php
  2. /**
  3. * StatusNet, the distributed open-source microblogging tool
  4. *
  5. * Microid class
  6. *
  7. * PHP version 5
  8. *
  9. * LICENCE: This program is free software: you can redistribute it and/or modify
  10. * it under the terms of the GNU Affero General Public License as published by
  11. * the Free Software Foundation, either version 3 of the License, or
  12. * (at your option) any later version.
  13. *
  14. * This program is distributed in the hope that it will be useful,
  15. * but WITHOUT ANY WARRANTY; without even the implied warranty of
  16. * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
  17. * GNU Affero General Public License for more details.
  18. *
  19. * You should have received a copy of the GNU Affero General Public License
  20. * along with this program. If not, see <http://www.gnu.org/licenses/>.
  21. *
  22. * @category ID
  23. * @package StatusNet
  24. * @author Evan Prodromou <evan@status.net>
  25. * @copyright 2008 StatusNet, Inc.
  26. * @license http://www.fsf.org/licensing/licenses/agpl-3.0.html GNU Affero General Public License version 3.0
  27. * @link http://status.net/
  28. */
  29. if (!defined('STATUSNET') && !defined('LACONICA')) {
  30. exit(1);
  31. }
  32. /**
  33. * A class for microids
  34. *
  35. * @category ID
  36. * @package StatusNet
  37. * @author Evan Prodromou <evan@status.net>
  38. * @license http://www.fsf.org/licensing/licenses/agpl-3.0.html GNU Affero General Public License version 3.0
  39. * @link http://status.net/
  40. * @see http://microid.org/
  41. */
  42. class Microid
  43. {
  44. /** Agent part of the ID. */
  45. var $agent = null;
  46. /** Resource part of the ID. */
  47. var $resource = null;
  48. /**
  49. * Constructor
  50. *
  51. * @param string $agent Agent of the ID
  52. * @param string $resource Resource part
  53. */
  54. function __construct($agent, $resource)
  55. {
  56. $this->agent = $agent;
  57. $this->resource = $resource;
  58. }
  59. /**
  60. * Generate a MicroID string
  61. *
  62. * @return string MicroID for agent and resource
  63. */
  64. function toString()
  65. {
  66. $agent_proto = $this->_getProto($this->agent);
  67. $resource_proto = $this->_getProto($this->resource);
  68. return $agent_proto.'+'.$resource_proto.':sha1:'.
  69. sha1(sha1($this->agent).sha1($this->resource));
  70. }
  71. /**
  72. * Utility for getting the protocol part of a URI
  73. *
  74. * @param string $uri URI to parse
  75. *
  76. * @return string scheme part of the URI
  77. */
  78. function _getProto($uri)
  79. {
  80. $colon = strpos($uri, ':');
  81. return substr($uri, 0, $colon);
  82. }
  83. }