::nx::Object ::nx::Object ::nsmcp::FileCredentials ::nsmcp::FileCredentials describe describeUnlocked init load loadAll names prepare publish revoke ::nsmcp::FileCredentials->::nx::Object

Class ::nsmcp::FileCredentials

::nsmcp::FileCredentials[i] create ... \
           [ -authenticator:required authenticator:required ] \
           [ -mutex mutex ] \
           [ -section:required section:required ] \
           [ -store:required store:required ]

Defined in /usr/local/ns/tcl/nsmcp/lib/credentials.tcl

Class Relations

  • class: ::nx::Class[i]
  • superclass: ::nx::Object[i]
::nx::Class create ::nsmcp::FileCredentials \
     -superclass ::nx::Object

Methods (to be applied on instances)

  • describe (scripted, public)

     <instance of nsmcp::FileCredentials[i]> describe

    Testcases:
    No testcase defined.
    ns_mutex lock ${:mutex}
    try {return [:describeUnlocked]} finally {ns_mutex unlock ${:mutex}}
  • load (scripted, public)

     <instance of nsmcp::FileCredentials[i]> load name
    Parameters:
    name (required)

    Testcases:
    No testcase defined.
    ns_mutex lock ${:mutex}
    try {
        if {$name ni [:names]} {error "unknown configured credential name"}
        set prepared [:prepare $name]
        foreach other [nsv_array names ${:store}] {
            if {$other ne $name && [dict get [nsv_get ${:store} $other] digest] eq [dict get $prepared digest]} {
                error "configured credentials must use distinct tokens"
            }
        }
        set previous {}
        if {[nsv_exists ${:store} $name]} {set previous [dict get [nsv_get ${:store} $name] digest]}
        set metadata [:publish $name $prepared]
        if {$previous ne "" && $previous ne [dict get $prepared digest]} {${:authenticator} revoke $previous}
        return $metadata
    } finally {ns_mutex unlock ${:mutex}}
  • loadAll (scripted, public)

     <instance of nsmcp::FileCredentials[i]> loadAll

    Testcases:
    No testcase defined.
    ns_mutex lock ${:mutex}
    try {
        # Validate every file/policy before changing any existing binding.
        set staged {}; set digests {}
        foreach name [:names] {
            set prepared [:prepare $name]
            set digest [dict get $prepared digest]
            if {[dict exists $digests $digest]} {error "configured credentials must use distinct tokens"}
            dict set digests $digest $name
            dict set staged $name $prepared
        }
        foreach name [nsv_array names ${:store}] {
            ${:authenticator} revoke [dict get [nsv_get ${:store} $name] digest]
            nsv_unset ${:store} $name
        }
        dict for {name prepared} $staged {:publish $name $prepared}
        return [:describeUnlocked]
    } finally {ns_mutex unlock ${:mutex}}
  • revoke (scripted, public)

     <instance of nsmcp::FileCredentials[i]> revoke name
    Parameters:
    name (required)

    Testcases:
    No testcase defined.
    ns_mutex lock ${:mutex}
    try {
        if {![nsv_exists ${:store} $name]} {error "unknown loaded credential name"}
        ${:authenticator} revoke [dict get [nsv_get ${:store} $name] digest]
    } finally {ns_mutex unlock ${:mutex}}