summaryrefslogtreecommitdiff
path: root/docs/design-api
blob: 0af6862e0257667e7563d796760478ce2ecee99a (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
                            Wallet Server API

Introduction

    Here is the specification for the API that components of the wallet
    server will implement.  There are two pluggable components in the
    wallet server: the implementation of a particular object type (which
    amounts mostly to storage and retrieval), and the ACL implementation.

Object API

  new(NAME, DBH)

    Creates a new object with the given object name.  Takes a database
    handle, which should be stored with the object and used for any
    further operations.  This method should inherit from the generic
    Wallet::Object object, which implements the following methods:

        new(NAME, DBH)
        create(NAME, DBH)
        owner([ACL-ID])
        acl(TYPE [, ACL-ID])
        expires([DATETIME])
        get(PRINCIPAL, HOSTNAME [, DATETIME])
        store(DATA, PRINCIPAL, HOSTNAME [, DATETIME])
        show()
        error()

    that manipulate the basic object data.  Generally all this function
    needs to do is call the parent new() constructor, but if there are
    additional database tables used by this object type, it may load
    additional data.

  create(NAME, DBH, PRINCIPAL, HOSTNAME [, DATETIME])

    Like new(), but instead creates a new entry in the database with the
    given name.  As with new(), the generic function will normally do all
    of the work.  Takes some additional information to put into the
    created fields in the database.

  get(PRINCIPAL, HOSTNAME [, DATETIME])

    Applied to a returned object, retrieves the data contained in the
    object in question.  Takes the information about who is doing the
    retrieval so that the database metadata can be updated.  The result is
    either the relevant data or undef in the event of an error.  On error,
    the caller should call error() to get the error text.

  store(DATA, PRINCIPAL, HOSTNAME [, DATETIME])

    Store user-supplied data into the given object.  This may not be
    supported by all backends (for instance, backends that automatically
    generate the data will not support this).  Takes the information about
    who is doing the store so that the database metadata can be updated.
    The result is true on success and false on failure.  On error, the
    caller should call error() to get the error text.

  show()

    Returns a formatted text description of the object suitable for human
    display, or undef on error.  On error, the caller should call error()
    to get the error text.

  default_check(PRINCIPAL)

    Applies the default authorization rules for this object type, if any,
    and returns 1 if those default authorization rules allow access.  If
    there are no authorization rules or if they don't allow access,
    returns 0.  On error, returns undef; the caller should call error() to
    get the error text.

  error()

    Returns the error text from the last failed get(), store(), show(), or
    default_check() call.

ACL API

  new()

    Creates a persistant ACL verifier for the given ACL type.  This may do
    nothing, but some ACL verifiers require some persistant data, like a
    persistant LDAP connection.

  check(PRINCIPAL, ACL)

    Checks whether the given PRINCIPAL should be allowed access given ACL.
    Returns 1 if access is granted, 0 if access is declined, and undef on
    error.  On error, the caller should call error() to get the error text
    but generally should continue with checking other ACLs.

  error()

    Returns the error text of the last error.