mirror of
https://github.com/cytodev/LightDMMock.git
synced 2024-11-24 23:19:49 +01:00
400 lines
73 KiB
JavaScript
400 lines
73 KiB
JavaScript
|
/**
|
||
|
* LightDMMock "class"
|
||
|
*
|
||
|
* @author Roel Walraven <mail@cytodev.io>
|
||
|
*
|
||
|
* A LightDM Mock that is tightly based on the source C code of
|
||
|
* Antergos' lightdm-webkit2-greeter. Please note that the deprecation errors
|
||
|
* are intrusive for a reason.
|
||
|
*
|
||
|
* Usage:
|
||
|
* Include the file in your theme that needs mocking
|
||
|
* <script type="text/javascript" src="mock/LightDMMock.js"></script>
|
||
|
* Create a new instance of LightDMMock
|
||
|
* var lightdm = lightdm || new LightDMMock(autofill, timeout, autoGuest);
|
||
|
*
|
||
|
* @param {boolean} autofill [wether or not the arrays for users, languages,
|
||
|
* layouts, and sessions need to be filled with mock
|
||
|
* data. I advise to test both to make your theme
|
||
|
* less prone to crashing.]
|
||
|
* @param {number} timeout [Value to use for simulated autologin (this value
|
||
|
* is in seconds).]
|
||
|
* @param {boolean} autoGuest [Wether or not to simulate automatic guest login.
|
||
|
* This will also enable a guest account
|
||
|
* in lightdm.has_guest_account]
|
||
|
*/
|
||
|
"use strict";
|
||
|
|
||
|
function LightDMMock(autofill, timeout, autoGuest) {
|
||
|
this.hostname = null;
|
||
|
this.users = null;
|
||
|
this.default_language = window.deprecationNotifier("property", "lightdm.language");
|
||
|
this.language = null;
|
||
|
this.languages = null;
|
||
|
this.default_layout = window.deprecationNotifier("property", "lightdm.layout");
|
||
|
this.layouts = null;
|
||
|
this.layout = null;
|
||
|
this.sessions = null;
|
||
|
this.num_users = 0;
|
||
|
this.default_session = null;
|
||
|
this.timed_login_user = window.deprecationNotifier("property", "lightdm.autologin_user");
|
||
|
this.timed_login_delay = window.deprecationNotifier("property", "lightdm.autologin_timeout");
|
||
|
this.authentication_user = null;
|
||
|
this.in_authentication = false;
|
||
|
this.is_authenticated = false;
|
||
|
this.can_suspend = false;
|
||
|
this.can_hibernate = false;
|
||
|
this.can_restart = false;
|
||
|
this.can_shutdown = false;
|
||
|
this.lock_hint = false;
|
||
|
this.has_guest_account = false;
|
||
|
this.hide_users = false;
|
||
|
this.select_user = null;
|
||
|
this.select_guest = false;
|
||
|
this.autologin_user = null;
|
||
|
this.autologin_guest = false;
|
||
|
this.autologin_timeout = 0;
|
||
|
|
||
|
if(autofill) {
|
||
|
this.users = JSON.parse(atob("W3siZGlzcGxheV9uYW1lIjoiQWxleGFuZGVyIHRoZSBHcmVhdCIsImxhbmd1YWdlIjoiZ3JfR1IiLCJyZWFsX25hbWUiOiJCYXNpbGV1cyIsImxheW91dCI6bnVsbCwiaW1hZ2UiOiJtb2NrL2Jhc2lsZXVzYWxleC8uZmFjZSIsImhvbWVfZGlyZWN0b3J5IjoibW9jay9iYXNpbGV1c2FsZXgiLCJuYW1lIjoiYmFzaWxldXNhbGV4IiwibG9nZ2VkX2luIjpmYWxzZSwic2Vzc2lvbiI6bnVsbH0seyJkaXNwbGF5X25hbWUiOiJOYXBvbGVvbiBCb25hcGFydGUiLCJsYW5ndWFnZSI6ImZyX0ZSIiwicmVhbF9uYW1lIjoiTmFwb2xlb24gQm9uYXBhcnRlIiwibGF5b3V0IjpudWxsLCJpbWFnZSI6Im1vY2svbmFwb2xlb25pYi8uZmFjZSIsImhvbWVfZGlyZWN0b3J5IjoibW9jay9uYXBvbGVvbmliIiwibmFtZSI6Im5hcG9sZW9uaWIiLCJsb2dnZWRfaW4iOmZhbHNlLCJzZXNzaW9uIjpudWxsfSx7ImRpc3BsYXlfbmFtZSI6IkdhaXVzIE9jdGF2aXVzIiwibGFuZ3VhZ2UiOiJpdF9JVCIsInJlYWxfbmFtZSI6IkdhaXVzIE9jdGF2aXVzIiwibGF5b3V0IjpudWxsLCJpbWFnZSI6Im1vY2svaW1wZXJhdG9yYXVndXN0dXMvLmZhY2UiLCJob21lX2RpcmVjdG9yeSI6Im1vY2svaW1wZXJhdG9yYXVndXN0dXMiLCJuYW1lIjoiaW1wZXJhdG9yYXVndXN0dXMiLCJsb2dnZWRfaW4iOmZhbHNlLCJzZXNzaW9uIjpudWxsfSx7ImRpc3BsYXlfbmFtZSI6IlNpciBXaW5zdG9uIExlb25hcmQgU3BlbmNlci1DaHVyY2hpbGwiLCJsYW5ndWFnZSI6ImVuX0dCIiwicmVhbF9uYW1lIjoiU2lyIFdpbnN0b24gTGVvbmFyZCBTcGVuY2VyLUNodXJjaGlsbCIsImxheW91dCI6bnVsbCwiaW1hZ2UiOiJtb2NrL2hvbm91cmFibGV3aW5zdG9uLy5mYWNlIiwiaG9tZV9kaXJlY3RvcnkiOiJtb2NrL2hvbm91cmFibGV3aW5zdG9uIiwibmFtZSI6Imhvbm91cmFibGV3aW5zdG9uIiwibG9nZ2VkX2luIjpmYWxzZSwic2Vzc2lvbiI6bnVsbH0seyJkaXNwbGF5X25hbWUiOiJQZXRlciBBbGVrc2V5ZXZpY2ggUm9tYW5vdiIsImxhbmd1YWdlIjoicnVfUlUiLCJyZWFsX25hbWUiOiJQZXRlciBBbGVrc2V5ZXZpY2ggUm9tYW5vdiIsImxheW91dCI6bnVsbCwiaW1hZ2UiOiJtb2NrL3BldGVyYWxleGV5ZXZpY2gvLmZhY2UiLCJob21lX2RpcmVjdG9yeSI6Im1vY2svcGV0ZXJhbGV4ZXlldmljaCIsIm5hbWUiOiJwZXRlcmFsZXhleWV2aWNoIiwibG9nZ2VkX2luIjpmYWxzZSwic2Vzc2lvbiI6bnVsbH0seyJkaXNwbGF5X25hbWUiOiJKb2huIEZpdHpnZXJhbGQgS2VubmVkeSIsImxhbmd1YWdlIjoiZW5fVVMiLCJyZWFsX25hbWUiOiJKb2huIEZpdHpnZXJhbGQgS2VubmVkeSIsImxheW91dCI6bnVsbCwiaW1hZ2UiOiJtb2NrL2phY2trZW5uZWR5Ly5mYWNlIiwiaG9tZV9kaXJlY3RvcnkiOiJtb2NrL2phY2trZW5uZWR5IiwibmFtZSI6ImphY2trZW5uZWR5IiwibG9nZ2VkX2luIjpmYWxzZSwic2Vzc2lvbiI6bnVsbH0seyJkaXNwbGF5X25hbWUiOiJNdWhhbW1lZCBiaW4gTXVyYWQiLCJsYW5ndWFnZSI6InRyX1RSIiwicmVhbF9uYW1lIjoiTXVoYW1tZWQgYmluIE11cmFkIiwibGF5b3V0IjpudWxsLCJpbWFnZSI6Im1vY2svbWVobWVkaXNhbmkvLmZhY2UiLCJob21lX2RpcmVjdG9yeSI6Im1vY2svbWVobWVkaXNhbmkiLCJuYW1lIjoibWVobWVkaXNhbmkiLCJsb2dnZWRfaW4iOmZhbHNlLCJzZXNzaW9uIjpudWxsfSx7ImRpc3BsYXlfbmFtZSI6Ikd1c3RhdnVzIEFkb2xwaHVzIiwibGFuZ3VhZ2UiOiJzdl9TRSIsInJlYWxfbmFtZSI6Ikd1c3RhdnVzIEFkb2xwaHVzIiwibGF5b3V0IjpudWxsLCJpbWFnZSI6Im1vY2svZ3VzdGF2Mi8uZmFjZSIsImhvbWVfZGlyZWN0b3J5IjoibW9jay9ndXN0YXYyIiwibmFtZSI6Imd1c3RhdjIiLCJsb2dnZWRfaW4iOmZhbHNlLCJzZXNzaW9uIjpudWxsfSx7ImRpc3BsYXlfbmFtZSI6Ik1hbyBaZWRvbmciLCJsYW5ndWFnZSI6InRyX1RSIiwicmVhbF9uYW1lIjoiTWFvIFplZG9uZyIsImxheW91dCI6bnVsbCwiaW1hZ2UiOiJtb2NrL2NoYWlybWFuemVkb25nLy5mYWNlIiwiaG9tZV9kaXJlY3RvcnkiOiJtb2NrL2NoYWlybWFuemVkb25nIiwibmFtZSI6ImNoYWlybWFuemVkb25nIiwibG9nZ2VkX2luIjpmYWxzZSwic2Vzc2lvbiI6bnVsbH0seyJkaXNwbGF5X25hbWUiOiJFcmlrIFRob3J2YWxkc3NvbiIsImxhbmd1YWdlIjoibm9fTk8iLCJyZWFsX25hbWUiOiJFcmlrIFRob3J2YWxkc3NvbiIsImxheW91dCI6bnVsbCwiaW1hZ2UiOiJtb2NrL3JlZHRob3J2YWxkLy5mYWNlIiwiaG9tZV9kaXJlY3RvcnkiOiJtb2NrL3JlZHRob3J2YWxkIiwibmFtZSI6InJlZHRob3J2YWxkIiwibG9nZ2VkX2luIjpmYWxzZSwic2Vzc2lvbiI6bnVsbH0seyJkaXNwbGF5X25hbWUiOiJDcmlzdG9mb3JvIENvbG9tYm8iLCJsYW5ndWFnZSI6Iml0X0lUIiwicmVhbF9uYW1lIjoiQ3Jpc3RvZm9ybyBDb2xvbWJvIiwibGF5b3V0IjpudWxsLCJpbWFnZSI6Im1vY2svY3Jpc3RvY29sb21iby8uZmFjZSIsImhvbWVfZGlyZWN0b3J5IjoibW9jay9jcmlzdG9jb2xvbWJvIiwibmFtZSI6ImNyaXN0b2NvbG9tYm8iLCJsb2dnZWRfaW4iOmZhbHNlLCJzZXNzaW9uIjpudWxsfSx7ImRpc3BsYXlfbmFtZSI6IldpbGxlbSB2YW4gT3JhbmplIiwibGFuZ3VhZ2UiOiJubF9OTCIsInJlYWxfbmFtZSI6IldpbGxlbSB2YW4gT3JhbmplIiwibGF5b3V0IjpudWxsLCJpbWFnZSI6Im1vY2svc2lsZW50d2lsbC8uZmFjZSIsImhvbWVfZGlyZWN0b3J5IjoibW9jay9zaWxlbnR3aWxsIiwibmFtZSI6InNpbGVudHdpbGwiLCJsb2dnZWRfaW4iOmZhbHNlLCJzZXNzaW9uIjpudWxsfSx7ImRpc3BsYXlfbmFtZSI6IlRlbfxqaW4iLCJsYW5ndWFnZSI6Im1uX01OIiwicmVhbF9uYW1lIjoiVGVt"));
|
||
|
this.languages = JSON.parse(atob("W3sibmFtZSI6IkVuZ2xpc2giLCJjb2RlIjoiZW4iLCJ0ZXJyaXRvcnkiOm51bGx9XQ=="));
|
||
|
this.layouts = JSON.parse(atob("W3sibmFtZSI6InVzIiwic2hvcnRfZGVzY3JpcHRpb24iOiJlbiIsImRlc2NyaXB0aW9uIjoiRW5nbGlzaCAoVVMpIn0seyJuYW1lIjoidXNcdGNociIsInNob3J0X2Rlc2NyaXB0aW9uIjoiY2hyIiwiZGVzY3JpcHRpb24iOiJDaGVyb2tlZSJ9LHsibmFtZSI6InVzXHRldXJvIiwic2hvcnRfZGVzY3JpcHRpb24iOiIiLCJkZXNjcmlwdGlvbiI6IkVuZ2xpc2ggKFVTLCB3aXRoIGV1cm8gb24gNSkifSx7Im5hbWUiOiJ1c1x0aW50bCIsInNob3J0X2Rlc2NyaXB0aW9uIjoiIiwiZGVzY3JpcHRpb24iOiJFbmdsaXNoIChVUywgaW50ZXJuYXRpb25hbCB3aXRoIGRlYWQga2V5cykifSx7Im5hbWUiOiJ1c1x0YWx0LWludGwiLCJzaG9ydF9kZXNjcmlwdGlvbiI6IiIsImRlc2NyaXB0aW9uIjoiRW5nbGlzaCAoVVMsIGFsdGVybmF0aXZlIGludGVybmF0aW9uYWwpIn0seyJuYW1lIjoidXNcdGNvbGVtYWsiLCJzaG9ydF9kZXNjcmlwdGlvbiI6IiIsImRlc2NyaXB0aW9uIjoiRW5nbGlzaCAoQ29sZW1haykifSx7Im5hbWUiOiJ1c1x0ZHZvcmFrIiwic2hvcnRfZGVzY3JpcHRpb24iOiIiLCJkZXNjcmlwdGlvbiI6IkVuZ2xpc2ggKER2b3JhaykifSx7Im5hbWUiOiJ1c1x0ZHZvcmFrLWludGwiLCJzaG9ydF9kZXNjcmlwdGlvbiI6IiIsImRlc2NyaXB0aW9uIjoiRW5nbGlzaCAoRHZvcmFrLCBpbnRlcm5hdGlvbmFsIHdpdGggZGVhZCBrZXlzKSJ9LHsibmFtZSI6InVzXHRkdm9yYWstYWx0LWludGwiLCJzaG9ydF9kZXNjcmlwdGlvbiI6IiIsImRlc2NyaXB0aW9uIjoiRW5nbGlzaCAoRHZvcmFrIGFsdGVybmF0aXZlIGludGVybmF0aW9uYWwgbm8gZGVhZCBrZXlzKSJ9LHsibmFtZSI6InVzXHRkdm9yYWstbCIsInNob3J0X2Rlc2NyaXB0aW9uIjoiIiwiZGVzY3JpcHRpb24iOiJFbmdsaXNoIChsZWZ0IGhhbmRlZCBEdm9yYWspIn0seyJuYW1lIjoidXNcdGR2b3Jhay1yIiwic2hvcnRfZGVzY3JpcHRpb24iOiIiLCJkZXNjcmlwdGlvbiI6IkVuZ2xpc2ggKHJpZ2h0IGhhbmRlZCBEdm9yYWspIn0seyJuYW1lIjoidXNcdGR2b3Jhay1jbGFzc2ljIiwic2hvcnRfZGVzY3JpcHRpb24iOiIiLCJkZXNjcmlwdGlvbiI6IkVuZ2xpc2ggKGNsYXNzaWMgRHZvcmFrKSJ9LHsibmFtZSI6InVzXHRkdnAiLCJzaG9ydF9kZXNjcmlwdGlvbiI6IiIsImRlc2NyaXB0aW9uIjoiRW5nbGlzaCAocHJvZ3JhbW1lciBEdm9yYWspIn0seyJuYW1lIjoidXNcdHJ1cyIsInNob3J0X2Rlc2NyaXB0aW9uIjoicnUiLCJkZXNjcmlwdGlvbiI6IlJ1c3NpYW4gKFVTLCBwaG9uZXRpYykifSx7Im5hbWUiOiJ1c1x0bWFjIiwic2hvcnRfZGVzY3JpcHRpb24iOiIiLCJkZXNjcmlwdGlvbiI6IkVuZ2xpc2ggKE1hY2ludG9zaCkifSx7Im5hbWUiOiJ1c1x0YWx0Z3ItaW50bCIsInNob3J0X2Rlc2NyaXB0aW9uIjoiIiwiZGVzY3JpcHRpb24iOiJFbmdsaXNoIChpbnRlcm5hdGlvbmFsIEFsdEdyIGRlYWQga2V5cykifSx7Im5hbWUiOiJ1c1x0b2xwYzIiLCJzaG9ydF9kZXNjcmlwdGlvbiI6IiIsImRlc2NyaXB0aW9uIjoiRW5nbGlzaCAodGhlIGRpdmlkZS9tdWx0aXBseSBrZXlzIHRvZ2dsZSB0aGUgbGF5b3V0KSJ9LHsibmFtZSI6InVzXHRoYnMiLCJzaG9ydF9kZXNjcmlwdGlvbiI6IiIsImRlc2NyaXB0aW9uIjoiU2VyYm8tQ3JvYXRpYW4gKFVTKSJ9LHsibmFtZSI6InVzXHR3b3JrbWFuIiwic2hvcnRfZGVzY3JpcHRpb24iOiIiLCJkZXNjcmlwdGlvbiI6IkVuZ2xpc2ggKFdvcmttYW4pIn0seyJuYW1lIjoidXNcdHdvcmttYW4taW50bCIsInNob3J0X2Rlc2NyaXB0aW9uIjoiIiwiZGVzY3JpcHRpb24iOiJFbmdsaXNoIChXb3JrbWFuLCBpbnRlcm5hdGlvbmFsIHdpdGggZGVhZCBrZXlzKSJ9LHsibmFtZSI6ImFmIiwic2hvcnRfZGVzY3JpcHRpb24iOiJmYSIsImRlc2NyaXB0aW9uIjoiQWZnaGFuaSJ9LHsibmFtZSI6ImFmXHRwcyIsInNob3J0X2Rlc2NyaXB0aW9uIjoicHMiLCJkZXNjcmlwdGlvbiI6IlBhc2h0byJ9LHsibmFtZSI6ImFmXHR1eiIsInNob3J0X2Rlc2NyaXB0aW9uIjoidXoiLCJkZXNjcmlwdGlvbiI6IlV6YmVrIChBZmdoYW5pc3RhbikifSx7Im5hbWUiOiJhZlx0b2xwYy1wcyIsInNob3J0X2Rlc2NyaXB0aW9uIjoicHMiLCJkZXNjcmlwdGlvbiI6IlBhc2h0byAoQWZnaGFuaXN0YW4sIE9MUEMpIn0seyJuYW1lIjoiYWZcdGZhLW9scGMiLCJzaG9ydF9kZXNjcmlwdGlvbiI6ImZhIiwiZGVzY3JpcHRpb24iOiJQZXJzaWFuIChBZmdoYW5pc3RhbiwgRGFyaSBPTFBDKSJ9LHsibmFtZSI6ImFmXHR1ei1vbHBjIiwic2hvcnRfZGVzY3JpcHRpb24iOiJ1eiIsImRlc2NyaXB0aW9uIjoiVXpiZWsgKEFmZ2hhbmlzdGFuLCBPTFBDKSJ9LHsibmFtZSI6ImFyYSIsInNob3J0X2Rlc2NyaXB0aW9uIjoiYXIiLCJkZXNjcmlwdGlvbiI6IkFyYWJpYyJ9LHsibmFtZSI6ImFyYVx0YXplcnR5Iiwic2hvcnRfZGVzY3JpcHRpb24iOiIiLCJkZXNjcmlwdGlvbiI6IkFyYWJpYyAoYXplcnR5KSJ9LHsibmFtZSI6ImFyYVx0YXplcnR5X2RpZ2l0cyIsInNob3J0X2Rlc2NyaXB0aW9uIjoiIiwiZGVzY3JpcHRpb24iOiJBcmFiaWMgKGF6ZXJ0eS9kaWdpdHMpIn0seyJuYW1lIjoiYXJhXHRkaWdpdHMiLCJzaG9ydF9kZXNjcmlwdGlvbiI6IiIsImRlc2NyaXB0aW9uIjoiQXJhYmljIChkaWdpdHMpIn0seyJuYW1lIjoiYXJhXHRxd2VydHkiLCJzaG9ydF9kZXNjcmlwdGlvbiI6IiIsImRlc2NyaXB0aW9uIjoiQXJhYmljIChxd2VydHkpIn0seyJuYW1lIjoiYXJhXHRxd2VydHlfZGlnaXRzIiwic2hvcnRfZGVzY3JpcHRpb24iOiIiLCJkZXNjcmlwdGlvbiI6IkFyYWJpYyAocXdlcnR5L2RpZ2l0cykifSx7Im5hbWUiOiJhcmFcdGJ1Y2t3YWx0ZXIiLCJzaG9ydF9kZXNjcmlwdGlvbiI6IiIsImRlc2NyaXB0aW9uIjoiQXJhYmljIChCdWNrd2FsdGVyKSJ9LHsibmFtZSI6ImFsIiwic2hvcnRfZGVzY3JpcHRpb24iOiJzcSIsImRlc2NyaXB0aW9uIjoiQWxiYW5pYW4ifSx7Im5hbWUiOiJhbSIsInNob3J0X2Rlc2NyaXB0aW9uIjoiaHkiLCJkZXNjcmlwdGlvbiI6IkFybWVuaWFuIn0seyJuYW1lIjo
|
||
|
this.sessions = JSON.parse(atob("W3sibmFtZSI6IkxYREUiLCJrZXkiOiJMWERFIiwiY29tbWVudCI6IkxYREUgLSBMaWdodHdlaWdodCBYMTEgZGVza3RvcCBlbnZpcm9ubWVudCJ9LHsibmFtZSI6Ik9wZW5ib3giLCJrZXkiOiJvcGVuYm94IiwiY29tbWVudCI6IkxvZyBpbiB1c2luZyB0aGUgT3BlbmJveCB3aW5kb3cgbWFuYWdlciAod2l0aG91dCBhIHNlc3Npb24gbWFuYWdlcikifSx7Im5hbWUiOiJUV00iLCJrZXkiOiJ0d20iLCJjb21tZW50IjoiVGhlIFRhYiBXaW5kb3cgTWFuYWdlciJ9LHsibmFtZSI6IlRpbnl3bSIsImtleSI6InRpbnl3bSIsImNvbW1lbnQiOiJSaWRpY3Vsb3VzbHkgdGlueSB3aW5kb3cgbWFuYWdlciJ9XQ"));
|
||
|
this.language = this.languages[0].name;
|
||
|
this.layout = this.layouts[0].name;
|
||
|
this.default_session = this.sessions[0].name;
|
||
|
this.layout = this.layouts[0].name;
|
||
|
this.num_users = this.users.length;
|
||
|
|
||
|
if(typeof timeout === "number" && timeout > 0) {
|
||
|
this.autologin_user = (!autoGuest) ? this.users[0].name : null;
|
||
|
this.autologin_guest = autoGuest;
|
||
|
this.autologin_timeout = timeout * 1000;
|
||
|
|
||
|
setTimeout(function() {
|
||
|
if(autoGuest || this.autologin_user !== null)
|
||
|
window.autologin_timer_expired();
|
||
|
}.bind(this), this.timed_login_delay);
|
||
|
}
|
||
|
|
||
|
for(var i = 0; i <= this.users; i++) {
|
||
|
this.users[i].logged_in = Boolean(Math.floor(Math.random() * 2));
|
||
|
this.users[i].session = this.sessions[Math.floor((Math.random() * this.sessions.length))].name;
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
|
||
|
// var lightdm = new LightDMMock();
|
||
|
|
||
|
/**
|
||
|
* Deprecated method.
|
||
|
*/
|
||
|
LightDMMock.prototype.cancel_timed_login = window.deprecationNotifier("method", "lightdm.cancel_autologin()");
|
||
|
|
||
|
/**
|
||
|
* Cancels the authentication of the autologin user. The older function
|
||
|
* lightdm.cancel_timed_login() has been deprecated.
|
||
|
*/
|
||
|
LightDMMock.prototype.cancel_autologin = function() {
|
||
|
window.checkArguments(arguments, 0, []);
|
||
|
|
||
|
this.autologin_user = null;
|
||
|
this.autologin_guest = false;
|
||
|
this.autologin_timeout = 0;
|
||
|
};
|
||
|
|
||
|
/**
|
||
|
* Deprecated method.
|
||
|
*/
|
||
|
LightDMMock.prototype.start_authentication = window.deprecationNotifier("method", "lightdm.authenticate(username)");
|
||
|
|
||
|
/**
|
||
|
* Specifies the username of the user we'd like to start authenticating as.
|
||
|
* Note that if you call lightdm.authenticate with no argument, LightDM
|
||
|
* (via PAM) will issue a show_prompt() call to ask for the username. The
|
||
|
* older function lightdm.start_authentication() has been deprecated.
|
||
|
*
|
||
|
* @param {String} username [username to authenticate]
|
||
|
*/
|
||
|
LightDMMock.prototype.authenticate = function(username) {
|
||
|
window.checkArguments(arguments, 1, ["string"]);
|
||
|
|
||
|
if(this.in_authentication) {
|
||
|
window.show_message("Already authenticating " + this.authentication_user, "error");
|
||
|
return;
|
||
|
}
|
||
|
|
||
|
var exists = false;
|
||
|
|
||
|
for(var i = 0; i <= this.users.length; i++) {
|
||
|
if(this.users.name === username)
|
||
|
exists = true;
|
||
|
}
|
||
|
|
||
|
if(!exists) {
|
||
|
window.show_message("Invalid username", "error");
|
||
|
return;
|
||
|
}
|
||
|
|
||
|
this.authentication_user = username;
|
||
|
this.in_authentication = true;
|
||
|
|
||
|
window.show_prompt("Password:", "password");
|
||
|
};
|
||
|
|
||
|
/**
|
||
|
* Authenticates as the guest user.
|
||
|
*/
|
||
|
LightDMMock.prototype.authenticate_as_guest = function() {
|
||
|
window.checkArguments(arguments, 0, []);
|
||
|
|
||
|
if(!this.has_guest_account)
|
||
|
throw new IlligalUsageException("Guest accounts are turned off. Make sure you check the value of 'lightdm.has_guest_account' before calling this function.");
|
||
|
|
||
|
if(this.in_authentication) {
|
||
|
window.show_message("Already authenticating" + this.authentication_user, "error");
|
||
|
return;
|
||
|
}
|
||
|
|
||
|
this.authentication_user = "guest";
|
||
|
this.in_authentication = true;
|
||
|
};
|
||
|
|
||
|
/**
|
||
|
* When LightDM has prompted for input, provide the response to LightDM. The
|
||
|
* deprecated function was "provide_secret". This is still available for
|
||
|
* backwards compatibility, but authors of greeters should move
|
||
|
* to using lightdm.respond().
|
||
|
*
|
||
|
* @param {String} text [the response to the challange, usually a password]
|
||
|
*/
|
||
|
LightDMMock.prototype.respond = function(text) {
|
||
|
window.checkArguments(arguments, 1, ["string"]);
|
||
|
|
||
|
if(!this.in_authentication)
|
||
|
throw new IlligalUsageException("LightDM is currently not in the authentication phase. Make sure to call 'lightdm.authenticate(username)' before calling this function.");
|
||
|
|
||
|
if(text === "password") {
|
||
|
this.is_authenticated = true;
|
||
|
window.authentication_complete();
|
||
|
} else {
|
||
|
window.show_message("Invalid password", "error");
|
||
|
}
|
||
|
};
|
||
|
|
||
|
/**
|
||
|
* Deprecated method.
|
||
|
*/
|
||
|
LightDMMock.prototype.provide_secret = window.deprecationNotifier("method", "lightdm.respond(text)");
|
||
|
|
||
|
/**
|
||
|
* Cancels the authentication of any user currently in the
|
||
|
* process of authenticating.
|
||
|
*/
|
||
|
LightDMMock.prototype.cancel_authentication = function() {
|
||
|
window.checkArguments(arguments, 0, []);
|
||
|
|
||
|
this.authentication_user = null;
|
||
|
this.in_authentication = false;
|
||
|
};
|
||
|
|
||
|
/**
|
||
|
* Suspends the system, if the greeter has the authority to do so.
|
||
|
*/
|
||
|
LightDMMock.prototype.suspend = function() {
|
||
|
window.checkArguments(arguments, 0, []);
|
||
|
|
||
|
if(!this.can_suspend)
|
||
|
throw new IlligalUsageException("LightDM cannot suspend the system. Make sure you check the value of 'lightdm.can_suspend' before calling this function.");
|
||
|
|
||
|
window.alert("System suspended.");
|
||
|
document.location.reload(true);
|
||
|
};
|
||
|
|
||
|
/**
|
||
|
* Hibernates the system, if the greeter has the authority to do so.
|
||
|
*/
|
||
|
LightDMMock.prototype.hibernate = function() {
|
||
|
window.checkArguments(arguments, 0, []);
|
||
|
|
||
|
if(!this.can_hibernate)
|
||
|
throw new IlligalUsageException("LightDM cannot hibernate the system. Make sure you check the value of 'lightdm.can_hibernate' before calling this function.");
|
||
|
|
||
|
window.alert("System hibernated.");
|
||
|
document.location.reload(true);
|
||
|
};
|
||
|
|
||
|
/**
|
||
|
* Shuts down the system, if the greeter has the authority to do so.
|
||
|
*/
|
||
|
LightDMMock.prototype.shutdown = function() {
|
||
|
window.checkArguments(arguments, 0, []);
|
||
|
|
||
|
if(!this.can_shutdown)
|
||
|
throw new IlligalUsageException("LightDM cannot shut down the system. Make sure you check the value of 'lightdm.can_shutdown' before calling this function.");
|
||
|
|
||
|
window.alert("System shut down.");
|
||
|
document.location.reload(true);
|
||
|
};
|
||
|
|
||
|
/**
|
||
|
* Restarts the system, if the greeter has the authority to do so.
|
||
|
*/
|
||
|
LightDMMock.prototype.restart = function() {
|
||
|
window.checkArguments(arguments, 0, []);
|
||
|
|
||
|
if(!this.can_restart)
|
||
|
throw new IlligalUsageException("LightDM cannot restart the system. Make sure you check the value of 'lightdm.can_restart' before calling this function.");
|
||
|
|
||
|
window.alert("System restarted.");
|
||
|
document.location.reload(true);
|
||
|
};
|
||
|
|
||
|
/**
|
||
|
* Will set the language for the current LightDM session.
|
||
|
*
|
||
|
* @param {String} lang [the language to change to]
|
||
|
*/
|
||
|
LightDMMock.prototype.set_language = function(lang) {
|
||
|
window.checkArguments(arguments, 1, ["string"]);
|
||
|
|
||
|
this.language = lang;
|
||
|
};
|
||
|
|
||
|
/**
|
||
|
* Deprecated method.
|
||
|
*/
|
||
|
LightDMMock.prototype.login = window.deprecationNotifier("method", "lightdm.start_session_sync(session)");
|
||
|
|
||
|
/**
|
||
|
* Once LightDM has successfully authenticated the user, start the user's
|
||
|
* session by calling this function. "session" is the authenticated user's
|
||
|
* session. If no session is passed, start the authenticated user with the
|
||
|
* system default session. The older function lightdm.login(user, session)
|
||
|
* has been deprecated.
|
||
|
*
|
||
|
* @param {String} session [the session name to start]
|
||
|
*/
|
||
|
LightDMMock.prototype.start_session_sync = function(session) {
|
||
|
window.checkArguments(arguments, 1, ["string"]);
|
||
|
|
||
|
if(!this.in_authentication)
|
||
|
throw new IlligalUsageException("LightDM is currently not in the authentication phase. Make sure to call 'lightdm.authenticate(username)' before calling this function.");
|
||
|
|
||
|
if(!this.is_authenticated)
|
||
|
throw new IlligalUsageException("LightDM has no authenticated users to log in. Make sure to call 'lightdm.respond()' before calling this function.");
|
||
|
|
||
|
window.alert("LightDM has started a " + session + " session for " + this.authentication_user);
|
||
|
};
|
||
|
|
||
|
/**
|
||
|
* Returns the value of a named hint provided by LightDM.
|
||
|
*
|
||
|
* @param {String} hint_name [name of the hint to show]
|
||
|
*/
|
||
|
LightDMMock.prototype.get_hint = function(hint_name) {
|
||
|
window.checkArguments(arguments, 1, ["string"]);
|
||
|
|
||
|
// @fixme: I have no clue how to simulate this...
|
||
|
};
|
||
|
|
||
|
|
||
|
/******************************************************************************
|
||
|
* Throwables *
|
||
|
*******************************************************************************/
|
||
|
|
||
|
/**
|
||
|
* Throwable IlligalUsageException
|
||
|
*
|
||
|
* @param {string} message [description of illigal usage]
|
||
|
*/
|
||
|
function IlligalUsageException(message) {
|
||
|
this.name = "IlligalUsageException";
|
||
|
this.message = message;
|
||
|
this.toString = function() {
|
||
|
return "[" + this.name + "] " + this.message;
|
||
|
};
|
||
|
}
|
||
|
|
||
|
/**
|
||
|
* Throwable DeprecationException
|
||
|
*
|
||
|
* @param {String} type [method||property]
|
||
|
* @param {String} alternative [alternative method or property to use]
|
||
|
*/
|
||
|
function DeprecationException(type, alternative) {
|
||
|
this.name = "DeprecationException";
|
||
|
this.message = "This " + type + " is deprecated. Consider using '" + alternative + "' instead.";
|
||
|
this.toString = function() {
|
||
|
return "[" + this.name + "] " + this.message;
|
||
|
};
|
||
|
}
|
||
|
|
||
|
/**
|
||
|
* Throwable IncompatibleArgumentCountException
|
||
|
*
|
||
|
* @param {Number} expected [expected length of arguments]
|
||
|
* @param {Number} received [found length of arguments]
|
||
|
*/
|
||
|
function IncompatibleArgumentCountException(expected, received) {
|
||
|
this.name = "IncompatibleArgumentCountException";
|
||
|
this.message = "Incorrect number of arguments in function call. Expected " + expected + ", found " + received;
|
||
|
this.toString = function() {
|
||
|
return "[" + this.name + "] " + this.message;
|
||
|
};
|
||
|
}
|
||
|
|
||
|
/**
|
||
|
* Throwable IncompatibleArgumentTypesException
|
||
|
*
|
||
|
* @param {Number} type [argument number (non-zero)]
|
||
|
* @param {String} expected [expected type]
|
||
|
* @param {String} received [found type]
|
||
|
*/
|
||
|
function IncompatibleArgumentTypesException(number, expected, received) {
|
||
|
this.name = "IncompatibleArgumentTypesException";
|
||
|
this.message = "Argument " + number + " is of a wrong type. Expected '" + expected + "', found '" + received + "'";
|
||
|
this.toString = function() {
|
||
|
return "[" + this.name + "] " + this.message;
|
||
|
};
|
||
|
}
|
||
|
|
||
|
|
||
|
/******************************************************************************
|
||
|
* Helpers *
|
||
|
*******************************************************************************/
|
||
|
|
||
|
/**
|
||
|
* global helper deprecationNotifier
|
||
|
* throws ~balls~ errors at users who use deprecated methods and properties.
|
||
|
*
|
||
|
* @param {String} type [method||property]
|
||
|
* @param {String} alternative [alternative method or property to use]
|
||
|
*
|
||
|
* @throws {DeprecationException}
|
||
|
*/
|
||
|
window.deprecationNotifier = function(type, alternative) {
|
||
|
throw new DeprecationException(type, alternative);
|
||
|
};
|
||
|
|
||
|
/**
|
||
|
* global helper checkArguments
|
||
|
* throws ~tables~ errors at users who call methods
|
||
|
* with erroneous arguments.
|
||
|
*
|
||
|
* @param {Array} args [the arguments passed to the original method]
|
||
|
* @param {Number} length [the expected amount of arguments]
|
||
|
* @param {Arrray} types [the expected types of the arguments]
|
||
|
*
|
||
|
* @throws {IncompatibleArgumentTypesException}
|
||
|
*/
|
||
|
window.checkArguments = function(args, length, types) {
|
||
|
if(args.length -1 !== length)
|
||
|
throw new IncompatibleArgumentCountException(length, args.length -1);
|
||
|
|
||
|
for(var i = 1; i <= types.length; i++) {
|
||
|
if(typeof args[i] !== types[i-1])
|
||
|
throw new IncompatibleArgumentTypesException(i, types[i-1], typeof args[i]);
|
||
|
}
|
||
|
};
|