8 years agoRename example configuration file
Jeff Godin [Wed, 21 Aug 2013 20:38:19 +0000 (16:38 -0400)]
Rename example configuration file

Rename the example configuration file, mostly for the benefit of it
having an .ini filename extension for things like syntax hilighting

Signed-off-by: Jeff Godin <>
8 years agoUse profile name for AgencyUserPrivilegeType value
Jeff Godin [Wed, 21 Aug 2013 20:26:25 +0000 (16:26 -0400)]
Use profile name for AgencyUserPrivilegeType value

In the AgencyUserPrivilegeType value, we were returning a
stringified Perl object reference instead of something resembling a
string or integer.

Remove $userprivid (which did not contain the profile id anyway) and
instead return the profile name as the AgencyUserPrivilegeType

Signed-off-by: Jeff Godin <>
8 years agoAdd option to omit patron email from LookupUser
Jeff Godin [Wed, 14 Aug 2013 20:23:17 +0000 (16:23 -0400)]
Add option to omit patron email from LookupUser

Add option to omit the patron email address in a LookupUserResponse

To omit patron email addresses, specify the following in the config

omit_patron_email = yes

The default is to include patron email addresses in the
LookupUserResponse message.

Signed-off-by: Jeff Godin <>
8 years agoAdd option to skip item agency ItemRequested holds
Jeff Godin [Wed, 14 Aug 2013 20:14:42 +0000 (16:14 -0400)]
Add option to skip item agency ItemRequested holds

Add configuration option under "behavior" ini section to disable
holds and copy status changes when we are the item agency receiving
an ItemRequested message.

Useful if you are not relying on Evergreen hold pull lists and just
want to use the paging slips from the DCB client to pull items to
ship to other agencies.

The default behavior remains the same, unless you set
"no_item_agency_holds = yes" under [behavior].

Signed-off-by: Jeff Godin <>
8 years agoHandle "copy not found" scenario
Jeff Godin [Fri, 9 Aug 2013 15:20:53 +0000 (11:20 -0400)]
Handle "copy not found" scenario

Prevent internal server error condition when we receive an
AcceptItem message and the copy in question is not found.

Signed-off-by: Jeff Godin <>
8 years agoMove more things into config file, add comments
Jeff Godin [Fri, 9 Aug 2013 15:16:36 +0000 (11:16 -0400)]
Move more things into config file, add comments

Move more previously-hardcoded values to the config file, remove
CUSTOMIZATION NEEDED markers where appropriate, add a few NOTE and
TODO comments.

Signed-off-by: Jeff Godin <>
8 years agoFix syntax error
Jeff Godin [Fri, 9 Aug 2013 15:14:35 +0000 (11:14 -0400)]
Fix syntax error

Fix syntax error: ~= != =~

Signed-off-by: Jeff Godin <>
8 years agoWhitespace cleanup.
Jeff Godin [Thu, 8 Aug 2013 17:54:01 +0000 (13:54 -0400)]
Whitespace cleanup.

Whitespace cleanup -- replace stray tabs.

Signed-off-by: Jeff Godin <>
8 years agoAdd support for source IP auth behind a proxy
Jeff Godin [Wed, 7 Aug 2013 21:19:32 +0000 (17:19 -0400)]
Add support for source IP auth behind a proxy

When using a proxy in front of your web server(s), the web server
sees the IP address of the proxy, and not the actual IP address of
the client making the requests.

This prevents you from using standard Apache directives to limit
access to a set of specific source IP addresses. While there are
Apache modules available that can help in this situation, we also
have the option of performing the access control within iNCIPit

This commit adds support for relying on the X-Forwarded-For HTTP
header to determine the actual IP of the client.

SECURITY NOTE: Your proxy MUST set/modify the X-Forwarded-For HTTP
header for this feature to work. If your proxy passes the header
unmodified, not only will your authorized clients likely be unable
to access the script, but unauthorized clients can easily spoof the
header to gain access.

To use, in the [access] section of iNCIPit.ini:

- set load_balancer_ip to the IP of your proxy
- set allowed_client_ips to a comma-delimited list of authorized IP

If your proxy speaks to your backend servers via HTTP, you will also
need to set permit_plaintext to "yes" (case insensitive).  You must
then rely on your proxy to enforce the use of HTTPS, or trust your
authorized clients to always use HTTPS.

Signed-off-by: Jeff Godin <>
8 years agoBegin to break config out into ini file
Jeff Godin [Wed, 31 Jul 2013 17:54:06 +0000 (13:54 -0400)]
Begin to break config out into ini file

Begin to migrate from hardcoded variables to a configuration file.

Copy the example iNCIPit.ini-example file to iNCIPit.ini and make
your changes there.

At this point, only the username and password are moved to a config

This commit introduces a new dependency on Config::Tiny

You will want to take steps to protect your configuration file, and
ensure that it is NOT accessible via the web server.

Signed-off-by: Jeff Godin <>
8 years agouse strict;
Jeff Godin [Tue, 30 Jul 2013 18:02:18 +0000 (14:02 -0400)]
use strict;

Having eliminated a number of issues with nonexistent variables being
referenced, we can now enable the "use strict" pragma.

Signed-off-by: Jeff Godin <>
8 years agoFix nonexistent variables in ItemReceivedResponse
Jeff Godin [Tue, 30 Jul 2013 17:46:31 +0000 (13:46 -0400)]
Fix nonexistent variables in ItemReceivedResponse

When creating an NCIP ItemReceivedResponse message, nonexistent
variables were being referenced, resulting in warnings and empty
values for the following elements in ResponseHeader:


This commit populates the variables $faidScheme, $taidScheme, and
$taidValie in a manner similar to other locations in the code,
silencing the warnings and causing the elements in question to
contain data.

Signed-off-by: Jeff Godin <>
8 years agoFix ref. to nonexistent $visid, clarify terms
Jeff Godin [Tue, 30 Jul 2013 17:37:44 +0000 (13:37 -0400)]
Fix ref. to nonexistent $visid, clarify terms

The XML for NCIP message RenewItemResponse was being constructed
with a nonexistent variable $visid, resulting in warnings and no
content in the ItemIdentifierValue element.

When processing a RenewItem message in renew_item(), we are
referencing the item by its UniqueItemId, so in addition to fixing
the nonexistent variable issue, this commit adjusts the variable
names for clarity.

Log output is also changed.

Signed-off-by: Jeff Godin <>
8 years agoAvoid referencing nonexistent AgencyId vars
Jeff Godin [Tue, 30 Jul 2013 17:00:08 +0000 (13:00 -0400)]
Avoid referencing nonexistent AgencyId vars

In fail() and do_user_lookup_error_stanza(), we were attempting to
call staff_log() with values for FromAgencyId and ToAgencyId using
variables which did not exist.

Also, in fail() we were attempting to use those same variables in
the creation of an XML NCIP response.

The above issues would result in "Use of uninitialized value"
warnings, as well preventing use of "use strict".

This commit removes the references to the nonexistent variables,
resulting in the same log and xml output.

A future commit may provide a means for these functions to log the
FromAgencyId and ToAgencyId.

Signed-off-by: Jeff Godin <>
8 years agoRemove duplicate request detection
Jeff Godin [Tue, 30 Jul 2013 15:04:53 +0000 (11:04 -0400)]
Remove duplicate request detection

Per MeLCat staff 2013-07-26, duplicate request detection is no
longer needed, and can cause its own problems. It should be removed.

This commit removes the duplicate NCIP message detection.

Signed-off-by: Jeff Godin <>
8 years agoMerge pull request #3 from Dyrcona/last_post
Hekman Library Technology Team [Mon, 25 Mar 2013 14:26:25 +0000 (07:26 -0700)]
Merge pull request #3 from Dyrcona/last_post

A little defensive coding around last_post.txt.

8 years agoA little defensive coding around last_post.txt.
Jason Stephenson [Thu, 21 Mar 2013 13:24:30 +0000 (09:24 -0400)]
A little defensive coding around last_post.txt.

If the file doesn't exist, rather than die, try to create it.  Only
die if we fail to create it.

Signed-off-by: Jason Stephenson <>
8 years agoMore customization markers, and general cleanup
Dan Wells [Tue, 12 Mar 2013 15:17:12 +0000 (11:17 -0400)]
More customization markers, and general cleanup

First, add more CUSTOMIZATION markers wherever a value likely needs
per-system configuration.

Second, clean up and clarify the code in a few places.  This includes
standardizing some variable names.  In particular, $visid and
$barcode were both used interchangeably, and this commit standardizes
on $visid for anything which isn't an actual local item barcode (i.e.
it is a fake or external system "barcode" value).

Signed-off-by: Dan Wells <>
8 years agoRemove force-to-available code from check_in_item
Dan Wells [Tue, 12 Mar 2013 15:12:14 +0000 (11:12 -0400)]
Remove force-to-available code from check_in_item

check_in_item() currently tries to force the checked-in copy to the
"Available" status.  This seems unnecessary, and possibly damaging.

Instead, let the EG check in process set the status as it sees fit
(most often to "Reshelving").

Signed-off-by: Dan Wells <>
8 years agoClarify item_request(), add missing $U
Dan Wells [Tue, 12 Mar 2013 15:07:48 +0000 (11:07 -0400)]
Clarify item_request(), add missing $U

First, we clarify the item_request() sub by:
 - adding customization notes
 - making sure we retain our custom status after hold placement
 - identifying Item vs User Agency code branches

Second, we add the common $U AppUtils variable which was missing from
the last commit.

Signed-off-by: Dan Wells <>
8 years agoUpdate and fix place_simple_hold()
Dan Wells [Tue, 12 Mar 2013 14:52:55 +0000 (10:52 -0400)]
Update and fix place_simple_hold()

This commit makes the following changes to the place_simple_hold()
 - clarify that the patron parameter is an ID
 - use a more typical default location for the file
 - use a Fieldmapper object rather than raw JSON to construct the
hold request
 - add freeze/thaw to hold process to prevent custom status issues
 - add comments where customization is likely needed

We should probably revisit the freeze/thaw process in the future,
but this at least gets us to a working state.

Signed-off-by: Dan Wells <>
8 years agoComment out incomplete, unused subs
Dan Wells [Tue, 12 Mar 2013 14:30:11 +0000 (10:30 -0400)]
Comment out incomplete, unused subs

Signed-off-by: Dan Wells <>
8 years agoWhitespace revision, take II
Dan Wells [Mon, 11 Mar 2013 22:11:42 +0000 (18:11 -0400)]
Whitespace revision, take II

perltidy can result in code formatting which is a little extreme
when left at the 80-characters-wide default, so rejoin the split
$doc->findvalue() calls which were negatively affecting

Also, Evergreen code standards is for using four spaces, not tabs,
so correct for that small mixup as well.

Signed-off-by: Dan Wells <>
8 years agocleaning up service detection block by way of including code from atz fork
Jon Scott [Mon, 11 Mar 2013 20:22:37 +0000 (13:22 -0700)]
cleaning up service detection block by way of including code from atz fork

8 years agoattempt to clean up whitespace and get standardized with eg code formatting asap :
Jon Scott [Mon, 11 Mar 2013 19:57:04 +0000 (12:57 -0700)]
attempt to clean up whitespace and get standardized with eg code formatting asap :
perltidy cuddled else and 's/ {4}/\t/g' version

8 years agoadded comments for removing local customizations / reading ini file going forward
Jon Scott [Mon, 11 Mar 2013 19:10:47 +0000 (12:10 -0700)]
added comments for removing local customizations / reading ini file going forward

9 years agoAdded NCIPmsgs : ItemCheckedIn, RenewItem, ItemShipped, ItemRequested, ItemRequestCan...
Jon Scott [Wed, 12 Sep 2012 00:25:02 +0000 (17:25 -0700)]
Added NCIPmsgs : ItemCheckedIn, RenewItem, ItemShipped, ItemRequested, ItemRequestCancelled, ItemRenewed, ItemReceived, ItemCheckedOut, CheckOutItem, CheckInItem and AcceptItem

9 years agolatest version
Jon Scott [Tue, 11 Sep 2012 21:06:29 +0000 (14:06 -0700)]
latest version

9 years agoUpdate README
Jon Scott [Fri, 11 May 2012 21:10:17 +0000 (14:10 -0700)]

9 years agowanted the ncip ItemRenewed to be able to override std.limits on renewals so ...
Jon Scott [Fri, 11 May 2012 21:05:05 +0000 (14:05 -0700)]
wanted the ncip ItemRenewed to be able to override std.limits on renewals so ...

9 years agoUpdate README
Jon Scott [Fri, 11 May 2012 14:14:26 +0000 (07:14 -0700)]

9 years agoStanding Penalties Added - Want to return blocking info to NCIP request
Jon Scott [Fri, 11 May 2012 13:55:07 +0000 (06:55 -0700)]
Standing Penalties Added - Want to return blocking info to NCIP request

9 years agoNCIPmsgs/LookupUser.ncip demo added
Jon Scott [Thu, 26 Apr 2012 19:29:04 +0000 (12:29 -0700)]
NCIPmsgs/LookupUser.ncip demo added

9 years agoUpdate iNCIPit.cgi
Jon Scott [Thu, 26 Apr 2012 17:31:28 +0000 (10:31 -0700)]
Update iNCIPit.cgi

9 years agoUpdate README
Jon Scott [Thu, 26 Apr 2012 17:22:20 +0000 (10:22 -0700)]

9 years agoUpdate README
Jon Scott [Thu, 26 Apr 2012 14:37:29 +0000 (07:37 -0700)]

9 years agoUpdate README
Jon Scott [Thu, 26 Apr 2012 12:50:52 +0000 (05:50 -0700)]

9 years agoUpdate README
Wolf Halton [Thu, 26 Apr 2012 12:44:50 +0000 (05:44 -0700)]

9 years agofirst commit
Jon Scott [Wed, 25 Apr 2012 14:22:45 +0000 (07:22 -0700)]
first commit