KFNS#40810: AiAi - self_register FAC_AUDIT wordt gemuteerd en mag niet door trigger/functie. svn path=/Website/branches/v2017.1/; revision=34167
154 lines
6.7 KiB
Plaintext
154 lines
6.7 KiB
Plaintext
<%@language = "javascript" %>
|
|
<% /*
|
|
$Revision$
|
|
$Id$
|
|
*/
|
|
ANONYMOUS_Allowed = 1;
|
|
var JSON_Result = true;
|
|
%>
|
|
<!--#include file="../Shared/common.inc"-->
|
|
<% settings.overrule_setting("multi_language_option", 0); %>
|
|
<!-- #include file="../Shared/save2db.inc" -->
|
|
<!-- #include file="../Shared/send_mail.inc"-->
|
|
<!-- #include file="../Shared/json2.js" -->
|
|
<!-- #include file="../Shared/login.inc" -->
|
|
<%
|
|
|
|
if (S("self_register") != 1)
|
|
shared.simpel_page(L("lcl_no_auth"));
|
|
|
|
var result = { rsuccess: 1, warning: "" };
|
|
|
|
var email = getFParam("prs_email", "");
|
|
email = email.replace(/^\s+|\s+$/g,""); // trim spaces
|
|
|
|
var password = getFParam("password1");
|
|
|
|
if ( password != getFParam("password2") )
|
|
abort_with_warning(L("lcl_pwd_mismatch"));
|
|
|
|
if (S("prs_password_validation") && !new RegExp(S("prs_password_validation")).test(password))
|
|
abort_with_warning(L("lcl_invalid_pwd_format"));
|
|
|
|
// Uberhaupt syntactisch geldige e-mail?
|
|
if (!new RegExp(S("email_regexp_single"), "ig").test(email))
|
|
abort_with_warning(L("lcl_invalid_email"));
|
|
|
|
// En valt het ook binnen onze eventuele white-list?
|
|
if (S("self_register_email_whitelist") && !new RegExp(S("self_register_email_whitelist"), "ig").test(email))
|
|
abort_with_warning(L("lcl_self_register_email_wrong")); // Email niet geaccepteerd
|
|
|
|
var sql = "SELECT prs_perslid_key, "
|
|
+ " prs_perslid_aanmaak, "
|
|
+ " prs_perslid_flags"
|
|
+ " FROM prs_v_aanwezigperslid"
|
|
+ " WHERE (UPPER(prs_perslid_email) =" + safe.quoted_sql_upper(email) + " OR "
|
|
+ " UPPER(prs_perslid_oslogin) = " + safe.quoted_sql_upper(email, 30) + ")";
|
|
oRs = Oracle.Execute(sql);
|
|
if (!oRs.eof)
|
|
{
|
|
if (oRs("prs_perslid_flags").Value & 2) // Unapproved
|
|
{
|
|
var aanmaak = new Date(oRs("prs_perslid_aanmaak").Value);
|
|
var expire = new Date();
|
|
expire.setMinutes(expire.getMinutes() - S("self_register_expire"));
|
|
if (expire > aanmaak)
|
|
{
|
|
// Referenties in tabellen naar deze pers_perslid_key moeten eerst verwijderd worden.
|
|
// Door cascade verwijderen van deze record onstaan audits op die tabellen die audit tracking hebben.
|
|
// Daardoor onstaan "ORA-04091:table VLKC.FAC_AUDIT is mutating, trigger/function may not see it" foutmeldingen
|
|
// op de delete van de prs_perslid_key uit de prs_perslid tabel.
|
|
// De tabellen prs_kostenplaats, prs_kostenplaatsgrp, prs_perslidkostenplaats en fac_gebruikersgroep hebben een prs_perslid_key referentie en audit tracking.
|
|
// Hier alleen regel uit fac_gebruikersgroep verwijderen omdat deze is aangemaakt. Regels uit de andere tabellen kunnen nog niet aangemaakt zijn.
|
|
var prs_key = oRs("prs_perslid_key").Value;
|
|
Oracle.Execute("DELETE FROM fac_gebruikersgroep WHERE prs_perslid_key = " + prs_key);
|
|
|
|
var sql = "DELETE prs_v_aanwezigperslid"
|
|
+ " WHERE prs_perslid_key = " + prs_key;
|
|
Oracle.Execute(sql); // Cascadeert ook de bookmark weg trouwens
|
|
}
|
|
else
|
|
abort_with_warning(L("lcl_self_register_active")); // Er loopt nog een aanvraag
|
|
}
|
|
else
|
|
abort_with_warning(L("lcl_self_register_duplicate"));
|
|
}
|
|
|
|
var fields = [ { dbs: "prs_perslid_naam", typ: "varchar", frm: "prs_naam" },
|
|
{ dbs: "prs_perslid_voornaam", typ: "varchar", frm: "prs_vrnaam" },
|
|
{ dbs: "prs_perslid_telefoonnr", typ: "varchar", frm: "prs_telnr" },
|
|
{ dbs: "prs_perslid_email", typ: "varchar", val: email },
|
|
{ dbs: "prs_perslid_mobiel", typ: "varchar", frm: "prs_mobiel" },
|
|
{ dbs: "prs_afdeling_key", typ: "key", val: S("self_register_afdeling_key") },
|
|
{ dbs: "prs_srtperslid_key", typ: "key", val: S("self_register_srtperslid_key") },
|
|
{ dbs: "prs_perslid_ingids", typ: "sql", val: "NULL" },
|
|
{ dbs: "prs_perslid_flags", typ: "number", val: 0x0002 }, // 2 = yet unapproved user
|
|
{ dbs: "prs_perslid_key", typ: "key", seq: "prs_s_prs_alluitvoerende_keys" } ];
|
|
var regIns = buildInsert("prs_perslid", fields);
|
|
var prs_key = regIns.sequences["prs_perslid_key"];
|
|
sql = regIns.sql;
|
|
var err = Oracle.Execute(sql, true);
|
|
if (err.friendlyMsg)
|
|
abort_with_warning(err.friendlyMsg);
|
|
|
|
// S("self_register_groep_keys") heeft prioriteit over S("self_register_groep_key")
|
|
if (S("self_register_groep_keys").length)
|
|
{
|
|
var fac_groep_key = getFParamInt("fac_groep_key", S("self_register_groep_keys")[0]);
|
|
|
|
if (!inArray(fac_groep_key, S("self_register_groep_keys")))
|
|
abort_with_warning(L("lcl_self_register_group_invalid"));
|
|
|
|
sql = "INSERT INTO fac_gebruikersgroep"
|
|
+ " (fac_groep_key, prs_perslid_key)"
|
|
+ " VALUES (" + fac_groep_key + ", " + prs_key + ")";
|
|
|
|
Oracle.Execute(sql);
|
|
}
|
|
// else komt die _DEFAULT groep wel zodra we prs_perslid_oslogin zetten
|
|
|
|
sql = "UPDATE prs_perslid"
|
|
+ " SET prs_perslid_oslogin = " + safe.quoted_sql(email, 30)
|
|
+ " WHERE prs_perslid_key = " + prs_key;
|
|
var err = Oracle.Execute(sql, true);
|
|
if (err.friendlyMsg)
|
|
abort_with_warning(err.friendlyMsg);
|
|
|
|
// Geen doLogin hier want dat is te gemakkelijk te misbruiken. Wel even voor
|
|
// de rest van *dit* bestand user_key en user zetten zodat we kunnen tracken
|
|
user_key = prs_key;
|
|
user = new Perslid(user_key);
|
|
shared.trackaction("PRSNEW", prs_key);
|
|
|
|
bookmarkId = shared.random(32); //
|
|
sql = "INSERT INTO fac_bookmark ( "
|
|
+ " fac_bookmark_id, "
|
|
+ " prs_perslid_key, "
|
|
+ " fac_bookmark_naam, "
|
|
+ " fac_bookmark_path, "
|
|
+ " fac_bookmark_query, "
|
|
+ " fac_bookmark_flags, "
|
|
+ " fac_bookmark_expire ) "
|
|
+ " VALUES ( "
|
|
+ safe.quoted_sql(bookmarkId) + ", "
|
|
+ prs_key + ", "
|
|
+ " 'Self-registration', "
|
|
+ " 'appl/prs/self_register_confirm.asp', "
|
|
+ safe.quoted_sql("user_key=" + prs_key) + ", " // is straks beschermd met HMAC
|
|
+ "0," // Zelfs onzichtbaar voor PRSSYS
|
|
+ " sysdate+("+S("self_register_expire")+"/24/60) )"
|
|
Oracle.Execute(sql);
|
|
|
|
setpassword(prs_key, password);
|
|
|
|
// Pas er op met de afzender: als het e-mail adres niet bestaat of incorrect is
|
|
// krijgt de afzender de gebouncte e-mail en zou daar zo maar kunnen klikken.
|
|
fac_send_bookmark(bookmarkId, email, L("lcl_self_register_subject"), L("lcl_self_register_body"),
|
|
{ FromAddress: S("self_fromaddress"), ReplyAddress: S("self_replyaddress") });
|
|
|
|
var result = { success: true, message: L("lcl_self_register_email_sent").format(email) };
|
|
|
|
Response.Write(JSON.stringify(result));
|
|
Response.End;
|
|
%>
|