summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorIvan Kohler <ivan@freeside.biz>2013-12-01 17:25:22 -0800
committerIvan Kohler <ivan@freeside.biz>2013-12-01 17:25:22 -0800
commit281d78519501a96934a500270810d4af5b4aaa73 (patch)
treed42fa9388d51643e842616321d7d1257fb8b0731
parent4ed0a352b2319c2fc14ee7af09a21caf727e7b12 (diff)
new customer_short opens a session, RT#24968
-rw-r--r--FS/FS/ClientAPI/Signup.pm18
1 files changed, 18 insertions, 0 deletions
diff --git a/FS/FS/ClientAPI/Signup.pm b/FS/FS/ClientAPI/Signup.pm
index 593c426b5..957945c76 100644
--- a/FS/FS/ClientAPI/Signup.pm
+++ b/FS/FS/ClientAPI/Signup.pm
@@ -4,6 +4,7 @@ use strict;
use vars qw( $DEBUG $me );
use Data::Dumper;
use Tie::RefHash;
+use Digest::SHA qw(sha512_hex);
use FS::Conf;
use FS::Record qw(qsearch qsearchs dbdef);
use FS::CGI qw(popurl);
@@ -996,9 +997,19 @@ sub new_customer_minimal {
);
return { 'error' => $error } if $error;
+ my $session = { 'custnum' => $cust_main->custnum };
+
+ my $session_id;
+ do {
+ $session_id = sha1_hex(time(). {}. rand(). $$)
+ } until ( ! defined _myaccount_cache->get($session_id) ); #just in case
+
+ _cache->set( $session_id, $session, '1 hour' ); # 1 hour?
+
my %return = ( 'error' => '',
'signup_service' => $svc_x,
'custnum' => $cust_main->custnum,
+ 'session_id' => $session_id,
);
if ( $svc[0] ) {
@@ -1023,6 +1034,13 @@ sub new_customer_minimal {
}
+use vars qw( $myaccount_cache );
+sub _myaccount_cache {
+ $myaccount_cache ||= new FS::ClientAPI_SessionCache( {
+ 'namespace' => 'FS::ClientAPI::MyAccount',
+ } );
+}
+
sub capture_payment {
my $packet = shift;