IPP Software Navigation Tools IPP Links Communication Pan-STARRS Links

Changeset 38134


Ignore:
Timestamp:
Apr 16, 2015, 2:01:54 PM (11 years ago)
Author:
bills
Message:

Add functions to extract the contents of 3 new tables
pstampUser pstampUserDomain and pstampAccessLevel.

pstampUserDomain sets integer accessLevel value for users with email addresses from
the specified domain. For example ifa.hawaii.edu

pstampUser may be used to override the domains values for specific users. For example
mops@…

pstampAccessLevel has primary key(proj_id, accessLevel) and a set of date limits mjd_min and
mjd_max. We can use this to look up the range of dates that a user with a given accessLevel
may access for the given project. (gpc1, gpc2, etc)

Location:
trunk/ippTools
Files:
1 added
4 edited

Legend:

Unmodified
Added
Removed
  • trunk/ippTools/share/Makefile.am

    r38080 r38134  
    347347        pstamptool_listjob.sql \
    348348        pstamptool_listfile.sql \
     349        pstamptool_listuser.sql \
    349350        pstamptool_pendingcleanup.sql \
    350351        pstamptool_pendingdependent.sql \
  • trunk/ippTools/src/pstamptool.c

    r38009 r38134  
    6060static bool listfileMode(pxConfig *config);
    6161static bool deletefileMode(pxConfig *config);
     62
     63static bool listdomainMode(pxConfig *config);
     64static bool listuserMode(pxConfig * config);
    6265
    6366# define MODECASE(caseName, func) \
     
    110113        MODECASE(PSTAMPTOOL_MODE_LISTFILE, listfileMode);
    111114        MODECASE(PSTAMPTOOL_MODE_DELETEFILE, deletefileMode);
     115
     116        MODECASE(PSTAMPTOOL_MODE_LISTDOMAIN, listdomainMode);
     117        MODECASE(PSTAMPTOOL_MODE_LISTUSER, listuserMode);
    112118
    113119        default:
     
    17021708    return true;
    17031709}
     1710
     1711static bool listdomainMode(pxConfig *config)
     1712{
     1713    PS_ASSERT_PTR_NON_NULL(config, false);
     1714
     1715    psMetadata *where = psMetadataAlloc();
     1716    PXOPT_COPY_STR(config->args, where, "-domain", "domainName", "=");
     1717    PXOPT_COPY_S32(config->args, where, "-access_level", "accessLevel", "=");
     1718
     1719    PXOPT_LOOKUP_BOOL(simple, config->args, "-simple", false);
     1720    PXOPT_LOOKUP_U64(limit, config->args, "-limit", false, false);
     1721
     1722    psString query = psStringCopy("SELECT * from pstampUserDomain");
     1723
     1724    if (psListLength(where->list)) {
     1725        psString whereClause = psDBGenerateWhereConditionSQL(where, NULL);
     1726        psStringAppend(&query, " WHERE %s", whereClause);
     1727        psFree(whereClause);
     1728    }
     1729    psFree(where);
     1730
     1731    // treat limit == 0 as "no limit"
     1732    if (limit) {
     1733        psString limitString = psDBGenerateLimitSQL(limit);
     1734        psStringAppend(&query, " %s", limitString);
     1735        psFree(limitString);
     1736    }
     1737
     1738    if (!p_psDBRunQuery(config->dbh, query)) {
     1739        psError(PS_ERR_UNKNOWN, false, "database error");
     1740        psFree(query);
     1741        return false;
     1742    }
     1743    psFree(query);
     1744
     1745    psArray *output = p_psDBFetchResult(config->dbh);
     1746    if (!output) {
     1747        psError(PS_ERR_UNKNOWN, false, "database error");
     1748        return false;
     1749    }
     1750    if (!psArrayLength(output)) {
     1751        psFree(output);
     1752        return true;
     1753    }
     1754
     1755    // negative simple so the default is true
     1756    if (!ippdbPrintMetadatas(stdout, output, "pstampUserDomain", !simple)) {
     1757        psError(PS_ERR_UNKNOWN, false, "failed to print array");
     1758        psFree(output);
     1759        return false;
     1760    }
     1761
     1762    psFree(output);
     1763
     1764    return true;
     1765}
     1766static bool listuserMode(pxConfig *config)
     1767{
     1768    PS_ASSERT_PTR_NON_NULL(config, false);
     1769
     1770    psMetadata *where = psMetadataAlloc();
     1771    PXOPT_COPY_STR(config->args, where, "-user", "userName", "=");
     1772    PXOPT_COPY_STR(config->args, where, "-domain", "domainName", "=");
     1773    PXOPT_COPY_S32(config->args, where, "-access_level", "pstampUser.accessLevel", "=");
     1774    PXOPT_LOOKUP_BOOL(simple, config->args, "-simple", false);
     1775    PXOPT_LOOKUP_U64(limit, config->args, "-limit", false, false);
     1776
     1777    if (!psListLength(where->list)) {
     1778        psError(PS_ERR_UNKNOWN, true, "search paramters are required");
     1779        return false;
     1780    }
     1781
     1782    psString query = pxDataGet("pstamptool_listuser.sql");
     1783
     1784    psString whereClause = psDBGenerateWhereConditionSQL(where, NULL);
     1785    psStringAppend(&query, " WHERE %s", whereClause);
     1786    psFree(whereClause);
     1787    psFree(where);
     1788
     1789    // treat limit == 0 as "no limit"
     1790    if (limit) {
     1791        psString limitString = psDBGenerateLimitSQL(limit);
     1792        psStringAppend(&query, " %s", limitString);
     1793        psFree(limitString);
     1794    }
     1795
     1796    if (!p_psDBRunQuery(config->dbh, query)) {
     1797        psError(PS_ERR_UNKNOWN, false, "database error");
     1798        psFree(query);
     1799        return false;
     1800    }
     1801    psFree(query);
     1802
     1803    psArray *output = p_psDBFetchResult(config->dbh);
     1804    if (!output) {
     1805        psError(PS_ERR_UNKNOWN, false, "database error");
     1806        return false;
     1807    }
     1808    if (!psArrayLength(output)) {
     1809        psFree(output);
     1810        return true;
     1811    }
     1812
     1813    // negative simple so the default is true
     1814    if (!ippdbPrintMetadatas(stdout, output, "pstampUser", !simple)) {
     1815        psError(PS_ERR_UNKNOWN, false, "failed to print array");
     1816        psFree(output);
     1817        return false;
     1818    }
     1819
     1820    psFree(output);
     1821
     1822    return true;
     1823}
    17041824# endif
  • trunk/ippTools/src/pstamptool.h

    r32786 r38134  
    5353    PSTAMPTOOL_MODE_LISTFILE,
    5454    PSTAMPTOOL_MODE_DELETEFILE,
     55
     56    PSTAMPTOOL_MODE_ADDUSER,
     57    PSTAMPTOOL_MODE_UPDATEUSER,
     58    PSTAMPTOOL_MODE_LISTUSER,
     59//    PSTAMPTOOL_MODE_GETUSERINFO,
     60
     61    PSTAMPTOOL_MODE_ADDDOMAIN,
     62    PSTAMPTOOL_MODE_UPDATEDOMAIN,
     63    PSTAMPTOOL_MODE_LISTDOMAIN,
     64
     65    PSTAMPTOOL_MODE_ADDACCESSLEVEL,
     66    PSTAMPTOOL_MODE_UPDATEACCESSLEVEL,
     67    PSTAMPTOOL_MODE_LISTACCCESSLEVEL,
    5568} pstamptoolMode;
    5669
  • trunk/ippTools/src/pstamptoolConfig.c

    r35673 r38134  
    303303    psMetadataAddS64(deletefileArgs, PS_LIST_TAIL, "-job_id",      0, "select by job ID (required)", 0);
    304304
     305    // -adduserdomain
     306    psMetadata *adduserdomainArgs = psMetadataAlloc();
     307    psMetadataAddStr(adduserdomainArgs, PS_LIST_TAIL, "-domain",   0, "define domain name (required)", NULL);
     308    psMetadataAddS32(adduserdomainArgs, PS_LIST_TAIL, "-access_level", 0, "define default access level for users in this domain (required)", 0);
     309    psMetadataAddStr(adduserdomainArgs, PS_LIST_TAIL, "-default_product",      0, "define default data store product for users in this domain", NULL);
     310    psMetadataAddStr(adduserdomainArgs, PS_LIST_TAIL, "-default_label",      0, "define default label for requests from users in this domain", NULL);
     311
     312    // -listdomain
     313    psMetadata *listdomainArgs = psMetadataAlloc();
     314    psMetadataAddStr(listdomainArgs, PS_LIST_TAIL, "-domain",   0, "define domain name", NULL);
     315    psMetadataAddS32(listdomainArgs, PS_LIST_TAIL, "-access_level", 0, "select by  access level", 0);
     316    psMetadataAddU64(listdomainArgs, PS_LIST_TAIL, "-limit",       0, "limit result set to N items", 0);
     317    psMetadataAddBool(listdomainArgs, PS_LIST_TAIL, "-simple",     0, "use the simple output format", false);
     318
     319    // -adduser
     320    psMetadata *adduserArgs = psMetadataAlloc();
     321    psMetadataAddStr(adduserArgs, PS_LIST_TAIL, "-user",   0, "define user name (required)", NULL);
     322    psMetadataAddStr(adduserArgs, PS_LIST_TAIL, "-domain",   0, "define user's domain name (required)", NULL);
     323    psMetadataAddS32(adduserArgs, PS_LIST_TAIL, "-access_level", 0, "define maximum access level for this user (required)", 0);
     324    psMetadataAddStr(adduserArgs, PS_LIST_TAIL, "-default_product",      0, "define default data store product for this user", NULL);
     325    psMetadataAddStr(adduserArgs, PS_LIST_TAIL, "-default_label",      0, "define default label for requests from this user", NULL);
     326
     327    // -listuser
     328    psMetadata *listuserArgs = psMetadataAlloc();
     329    psMetadataAddStr(listuserArgs, PS_LIST_TAIL, "-user",   0, "select by user name", NULL);
     330    psMetadataAddStr(listuserArgs, PS_LIST_TAIL, "-domain",   0, "select by user's domain name", NULL);
     331    psMetadataAddS32(listuserArgs, PS_LIST_TAIL, "-access_level", 0, "select by maximum access level", 0);
     332    psMetadataAddU64(listuserArgs, PS_LIST_TAIL, "-limit",       0, "limit result set to N items", 0);
     333    psMetadataAddBool(listuserArgs, PS_LIST_TAIL, "-simple",     0, "use the simple output format", false);
     334
    305335    PXOPT_ADD_MODE("-addreq",          "", PSTAMPTOOL_MODE_ADDREQ,       addreqArgs);
    306336    PXOPT_ADD_MODE("-pendingreq",      "", PSTAMPTOOL_MODE_PENDINGREQ,   pendingreqArgs);
     
    334364    PXOPT_ADD_MODE("-listfile",        "", PSTAMPTOOL_MODE_LISTFILE,   listfileArgs);
    335365    PXOPT_ADD_MODE("-deletefile",      "", PSTAMPTOOL_MODE_DELETEFILE,   deletefileArgs);
     366
     367    PXOPT_ADD_MODE("-listdomain",      "", PSTAMPTOOL_MODE_LISTDOMAIN, listdomainArgs);
     368    PXOPT_ADD_MODE("-listuser",        "", PSTAMPTOOL_MODE_LISTUSER, listuserArgs);
    336369
    337370    if (!pxGetOptions(stderr, argc, argv, config, modes, argSets)) {
Note: See TracChangeset for help on using the changeset viewer.