<%args> $workflow_id => undef $workflow_type => undef $role => undef $profile => undef $subject_style => undef $keygen => undef $subject => undef $subject_alt_name => undef $info => undef $spkac => undef $pkcs10 => undef $key => undef $keysettings => undef $password_gen => undef $password => undef $verify_password => undef <%init> use OpenXPKI::Debug 'service/create_csr/index.html'; # why doesn't this work? $OpenXPKI::Debug::LEVEL{'service/create_csr/index.html'} = 100; ##! 16: 'bla' my %params = (CONFIG => $CONFIG); ## which workflow type $params{workflow_type} = $m->comp ('/service/create_csr/get_workflow_type.mhtml', %params, 'workflow_type' => $workflow_type); return if (not defined $params{workflow_type}); ## which role $params{role} = $m->comp ('/service/create_csr/get_role.mhtml', %params, 'role' => $role); return if (not defined $params{role} or not length ($params{role})); ## which profile $params{profile} = $m->comp ('/service/create_csr/get_profile.mhtml', %params, 'profile' => $profile); return if (not defined $params{profile} or not length ($params{profile})); ## which subject style $params{subject_style} = $m->comp ('/service/create_csr/get_subject_style.mhtml', %params, 'subject_style' => $subject_style); return if (not defined $params{subject_style}); ## which key generation ## this is necessary in this phase ## because PKCS#10 parsing must before subject reading $params{keygen} = $m->comp ('/service/create_csr/get_keygen.mhtml', %params, 'keygen' => $keygen); return if (not defined $params{keygen}); ## get PKCS#10 if available if ($params{keygen} eq "PKCS10") { ## get the CSR ($params{pkcs10}, $subject) = $m->comp ('/service/create_csr/get_pkcs10.mhtml', %params, 'pkcs10' => $pkcs10, 'subject' => $subject); return if (not $params{pkcs10}); } ## get subject $params{subject} = $m->comp ('/service/create_csr/get_subject.mhtml', %params, 'subject' => $subject); return if (not $params{subject}); ## get subject alt name $params{subject_alt_name} = $m->comp ('/service/create_csr/get_subject_alt_name.mhtml', %params, 'subject_alt_name' => $subject_alt_name); return if (not $params{subject_alt_name}); ## get additional_infos $params{info} = $m->comp ('/service/create_csr/get_info.mhtml', %params, 'info' => $info); return if (not $params{info}); ## get generated request my $msg = undef; if ($params{keygen} eq "SPKAC") { $msg = $m->comp ('/service/create_csr/get_spkac.mhtml', %params, 'spkac' => $spkac); } elsif ($params{keygen} eq "SERVERSIDE" && ! defined $workflow_id) { $m->comp('/lib/debug.mhtml', 'level' => 1, 'msg' => 'serverside', ); ## serverside $msg = $m->comp ('/service/create_csr/store_serverside.mhtml', %params); $workflow_id = $msg->{PARAMS}->{WORKFLOW}->{ID}; } elsif ($params{keygen} eq 'IE') { $params{pkcs10} = $m->comp ('/service/create_csr/get_ie_pkcs10.mhtml', %params, 'pkcs10' => $pkcs10); return if (not $params{pkcs10}); $msg = $m->comp ('/service/create_csr/store_pkcs10.mhtml', %params); } return if (! defined $msg && ! defined $workflow_id); ## if we reach this point then the workflow is already created ## store and display CSR if ($params{'keygen'} ne 'SERVERSIDE') { $m->comp ('/service/workflow/show_instance.html', 'msg' => $msg); } else { # continue here with selection of key parameters and # password entry/verification if (!defined $keysettings) { $m->comp ('/service/create_csr/get_keysettings.mhtml', %params, 'workflow_id' => $workflow_id, ); } if (defined $keysettings && !defined $password) { $m->comp ('/service/create_csr/get_password.mhtml', 'password_gen' => $password_gen, 'workflow_id' => $workflow_id, 'keysettings' => $keysettings, %params, ); } elsif (defined $keysettings && defined $password) { $m->comp('/lib/debug.mhtml', 'level' => 1, 'msg' => 'keysettings: ' . $keysettings, ); if (defined $verify_password && $password ne $verify_password) { $m->comp ('/service/create_csr/get_password.mhtml', 'password_gen' => $password_gen, 'workflow_id' => $workflow_id, 'keysettings' => $keysettings, %params, ); } else { # create key using password my $exec_msg = $context->{client}->send_receive_command_msg( 'execute_workflow_activity', { WORKFLOW => $workflow_type, ID => $workflow_id, ACTIVITY => 'generate_key', PARAMS => { '_key_type' => $keysettings, '_password' => $password, }, }, ); #$m->comp('/lib/debug.mhtml', # 'level' => 1, # 'msg' => 'exec_msg: ' . Dumper $exec_msg, #); if (exists $exec_msg->{SERVICE_MSG} && $exec_msg->{SERVICE_MSG} eq 'ERROR' && $exec_msg->{LIST}->[0]->{LABEL} eq 'I18N_OPENXPKI_SERVER_WORKFLOW_VALIDATOR_PASSWORD_QUALITY_BAD_PASSWORD') { $m->comp ('/service/create_csr/get_password.mhtml', 'password_gen' => $password_gen, 'workflow_id' => $workflow_id, 'keysettings' => $keysettings, 'password_bad' => 1, %params, ); } else { # get workflow_info my $i_msg = $context->{client}->send_receive_command_msg( 'get_workflow_info', { WORKFLOW => $workflow_type, ID => $workflow_id, }, ); # TODO - check for more errors # we are done, show instance $m->comp ('/service/workflow/show_instance.html', 'msg' => $i_msg); } } } } <%once> my $CONFIG = { "ou_style" => { ROLE => [ "User", "RA Operator" ], KEY_GENERATION => ["SPKAC", "IE", "SERVERSIDE", "AUTO"], SUBJECT => [ [ ## 1.RDN { NAME => "uid", LABEL => "I18N_OPENXPKI_HTML_UID", DESCRIPTION => "I18N_OPENXPKI_HTML_UID_DESCRIPTION", MAXIMUM => "8", MINIMUM => "4", TYPE => "ascii", DEFAULT => "I18N_OPENXPKI_HTML_DEFAULT_UID" }, { NAME => "cn", LABEL => "I18N_OPENXPKI_HTML_COMMON_NAME", DESCRIPTION => "I18N_OPENXPKI_HTML_COMMON_NAME_DESCRIPTION", MAXIMUM => "64", MINIMUM => "2", TYPE => "utf8", DEFAULT => "I18N_OPENXPKI_HTML_DEFAULT_CN" }, ], [ ## 2.RDN { NAME => "ou", LABEL => "I18N_OPENXPKI_HTML_OU", DESCRIPTION => "I18N_OPENXPKI_HTML_OU_DESCRIPTION", MAXIMUM => "64", MINIMUM => "1", TYPE => "utf8", DEFAULT => ["IT Service"], SELECT => [{LABEL => "Sales", VALUE => "Sales"}, {LABEL => "Marketing", VALUE => "Marketing"}, {LABEL => "IT Service", VALUE => "IT Service"}] } ], [ ## 3.RDN { NAME => "o", LABEL => "I18N_OPENXPKI_HTML_ORGANIZATION", DESCRIPTION => "I18N_OPENXPKI_HTML_ORGANIZATION_DESCRIPTION", VALUE => "OpenXPKI" } ], [ ## 4.RDN { NAME => "c", LABEL => "I18N_OPENXPKI_HTML_COUNTRY", DESCRIPTION => "I18N_OPENXPKI_HTML_COUNTRY_DESCRIPTION", VALUE => "DE" } ], ], SUBJECT_ALT_NAME => ["email", "email", "UPN", "GUID", "DNS", "IP", "IP", "URI", "RID", "DirName"], INFOS => [ {NAME => "telephoneNumber", LABEL => "I18N_OPENXPKI_HTML_TELEPHONE_NUMBER", DESCRIPTION => "I18N_OPENXPKI_HTML_TELEPHONE_NUMBER_DESCRIPTION", TYPE => "text"}, {NAME => "faxNumber", LABEL => "I18N_OPENXPKI_HTML_FAX_NUMBER", DESCRIPTION => "I18N_OPENXPKI_HTML_FAX_NUMBER_DESCRIPTION", TYPE => "text"}, {NAME => "comment", LABEL => "I18N_OPENXPKI_HTML_COMMENT", DESCRIPTION => "I18N_OPENXPKI_HTML_COMMENT_DESCRIPTION", TYPE => "textarea"} ] }, "dc_style" => { ROLE => [ "User", "RA Operator" ], KEY_GENERATION => ["SPKAC", "IE", "SERVERSIDE", "PKCS10", "AUTO"], SUBJECT => [ [ ## 1.RDN { NAME => "uid", LABEL => "I18N_OPENXPKI_HTML_UID", DESCRIPTION => "I18N_OPENXPKI_HTML_UID_DESCRIPTION", MAXIMUM => "8", MINIMUM => "4", TYPE => "ascii", DEFAULT => "I18N_OPENXPKI_HTML_DEFAULT_UID" }, { NAME => "cn", LABEL => "I18N_OPENXPKI_HTML_COMMON_NAME", DESCRIPTION => "I18N_OPENXPKI_HTML_COMMON_NAME_DESCRIPTION", MAXIMUM => "64", MINIMUM => "2", TYPE => "utf8", DEFAULT => "I18N_OPENXPKI_HTML_DEFAULT_CN" }, ], [ ## 2.RDN { NAME => "ou", LABEL => "I18N_OPENXPKI_HTML_OU", DESCRIPTION => "I18N_OPENXPKI_HTML_OU_DESCRIPTION", MAXIMUM => "64", MINIMUM => "1", TYPE => "utf8", DEFAULT => ["Development"], SELECT => [{LABEL => "Development", VALUE => "Development"}, {LABEL => "Marketing", VALUE => "Marketing"}, {LABEL => "Support", VALUE => "Support"}, {LABEL => "Customers", VALUE => "Customers"}] } ], [ ## 3.RDN { NAME => "dc", LABEL => "I18N_OPENXPKI_HTML_ORGANIZATION", DESCRIPTION => "I18N_OPENXPKI_HTML_ORGANIZATION_DESCRIPTION", VALUE => "OpenXPKI" } ], [ ## 4.RDN { NAME => "dc", LABEL => "I18N_OPENXPKI_HTML_DOMAIN_COMPONENT", DESCRIPTION => "I18N_OPENXPKI_HTML_DOMAIN_COMPONENT_DESCRIPTION", VALUE => "org" } ], ], SUBJECT_ALT_NAME => ["email", "email", "UPN", "GUID", "DNS", "IP", "IP", "URI", "RID", "DirName"], INFOS => [ {NAME => "telephoneNumber", LABEL => "I18N_OPENXPKI_HTML_TELEPHONE_NUMBER", DESCRIPTION => "I18N_OPENXPKI_HTML_TELEPHONE_NUMBER_DESCRIPTION", TYPE => "text"}, {NAME => "faxNumber", LABEL => "I18N_OPENXPKI_HTML_FAX_NUMBER", DESCRIPTION => "I18N_OPENXPKI_HTML_FAX_NUMBER_DESCRIPTION", TYPE => "text"}, {NAME => "comment", LABEL => "I18N_OPENXPKI_HTML_COMMENT", DESCRIPTION => "I18N_OPENXPKI_HTML_COMMENT_DESCRIPTION", TYPE => "textarea"} ] }, };