1/**
2 * Securelogin Dokuwiki Plugin
3 *
4 * @license    GPL 2 (http://www.gnu.org/licenses/gpl.html)
5 * @author     Mikhail I. Izmestev
6 * @maintainer Matt Bagley
7 *
8 * @see also   https://www.dokuwiki.org/plugin:securelogin
9 */
10
11function esc( x ) {
12    return encodeURIComponent(x);
13}
14
15function secure_profile() {
16    var form = jQuery("#dw__register")[0];
17    if(!form || !form.use_securelogin.checked) return true;
18    var newpass = form.newpass;
19    var passchk = form.passchk;
20    var oldpass = form.oldpass;
21    var sectok = form.sectok;
22
23    form.securelogin.value = encrypt("newpass="+esc(newpass.value)+"&passchk="+esc(passchk.value)+"&oldpass="+esc(oldpass.value)+";"+sectok.value);
24    oldpass.value = "******";
25    newpass.value = "******";
26    passchk.value = "******";
27    return true;
28}
29
30function secure_login() {
31    var form = jQuery("#dw__login")[0];
32    if(!form || !form.use_securelogin.checked) return true;
33    var user = form.u;
34    var pass = form.p;
35    var sectok = form.sectok;
36
37    form.securelogin.value = encrypt("p="+esc(pass.value)+";"+sectok.value);
38    pass.value = "******";
39    return true;
40}
41
42function secure_admin() {
43    var el = jQuery("#test__message")[0];
44    if(el)
45        el.value = encrypt(esc(el.value));
46    return true;
47}
48
49function secure_add_user() {
50    var form = securelogin_get_form(jQuery('#add_userid')[0]);
51    if(!form || !form.use_securelogin.checked) return true;
52    var pass = form.add_userpass;
53    var pass2 = form.add_userpass2;
54    var sectok = form.sectok;
55
56    form.securelogin.value = encrypt("userpass="+esc(pass.value)+"&userpass2="+esc(pass2.value)+";"+sectok.value);
57    pass.value = "******";
58    pass2.value = "******";
59    return true;
60}
61
62function secure_modify_user() {
63    var form = securelogin_get_form(jQuery('#modify_userid')[0]);
64    if(!form || !form.use_securelogin.checked) return true;
65    var pass = form.modify_userpass;
66    var pass2 = form.modify_userpass2;
67    var sectok = form.sectok;
68
69    form.securelogin.value = encrypt("userpass="+esc(pass.value)+"&userpass2="+esc(pass2.value)+";"+sectok.value);
70    pass.value = "******";
71    pass2.value = "******";
72    return true;
73}
74
75function ajaxSuccess(data) {
76        if(data === ''){ return; }
77        var jsNode = document.createElement('script');
78        jsNode.setAttribute('type', 'text/javascript');
79        jsNode.text = data;
80        document.getElementsByTagName('head')[0].appendChild(jsNode);
81
82        for(var i = 0; i < securelogin_forms.length; ++i) {
83            var form = securelogin_forms[i][1];
84            switch(securelogin_forms[i][0]) {
85            case 'dw__login':
86            case 'dw__register':
87                var uslNode = document.createElement('label');
88                var button = jQuery(":submit", form)[0];
89                if(!button) button = jQuery("input.button", form)[0];
90                button.parentNode.insertBefore(uslNode, button);
91                uslNode.setAttribute('class', 'simple');
92                uslNode.setAttribute('for', 'use_securelogin');
93                var label;
94                if('dw__login' == securelogin_forms[i][0]) {
95                    jQuery(form).submit(secure_login);
96                    label = securelogin_login_label;
97                }
98                else {
99                    jQuery(form).submit(secure_profile);
100                    label = securelogin_update_label;
101                }
102                uslNode.innerHTML = '<input type="checkbox" id="use_securelogin" name="use_securelogin" value="1" checked="checked"/> <span>'+label+'</span>';
103                break;
104            case 'test__publicKey':
105                jQuery(form).submit(secure_admin);
106                break;
107            case 'add_userid':
108            case 'modify_userid':
109                var uslNode = document.createElement('tbody');
110                var button = jQuery(":submit", form)[0].parentNode.parentNode.parentNode;
111                if(!button) button = jQuery("input.button", form)[0].parentNode.parentNode.parentNode;
112                button.parentNode.insertBefore(uslNode, button);
113                var tr = document.createElement('tr');
114                uslNode.appendChild(tr);
115                var td = document.createElement('td');
116                tr.appendChild(td);
117                td.innerHTML = '<label class="simple" for="use_securelogin">'+securelogin_update_label+'</label>';
118                td = document.createElement('td');
119                tr.appendChild(td);
120                td.innerHTML = '<input type="checkbox" id="use_securelogin" name="use_securelogin" value="1" checked="checked"/>';
121                if('add_userid' == securelogin_forms[i][0])
122                    jQuery(form).submit(secure_add_user);
123                else
124                    jQuery(form).submit(secure_modify_user);
125                break;
126            }
127        }
128}
129
130if(securelogin_forms) {
131    jQuery.post(
132        DOKU_BASE + 'lib/exe/ajax.php',
133        { call: 'securelogin_public_key' },
134        ajaxSuccess
135    );
136}
137