mirror of
https://github.com/evennia/evennia.git
synced 2026-04-01 05:27:17 +02:00
458 lines
No EOL
49 KiB
HTML
458 lines
No EOL
49 KiB
HTML
|
|
<!DOCTYPE html>
|
|
|
|
<html>
|
|
<head>
|
|
<meta charset="utf-8" />
|
|
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
|
<title>evennia.accounts.admin — Evennia 1.0-dev documentation</title>
|
|
<link rel="stylesheet" href="../../../_static/nature.css" type="text/css" />
|
|
<link rel="stylesheet" href="../../../_static/pygments.css" type="text/css" />
|
|
<script id="documentation_options" data-url_root="../../../" src="../../../_static/documentation_options.js"></script>
|
|
<script src="../../../_static/jquery.js"></script>
|
|
<script src="../../../_static/underscore.js"></script>
|
|
<script src="../../../_static/doctools.js"></script>
|
|
<script src="../../../_static/language_data.js"></script>
|
|
<link rel="shortcut icon" href="../../../_static/favicon.ico"/>
|
|
<link rel="index" title="Index" href="../../../genindex.html" />
|
|
<link rel="search" title="Search" href="../../../search.html" />
|
|
</head><body>
|
|
<div class="related" role="navigation" aria-label="related navigation">
|
|
<h3>Navigation</h3>
|
|
<ul>
|
|
<li class="right" style="margin-right: 10px">
|
|
<a href="../../../genindex.html" title="General Index"
|
|
accesskey="I">index</a></li>
|
|
<li class="right" >
|
|
<a href="../../../py-modindex.html" title="Python Module Index"
|
|
>modules</a> |</li>
|
|
<li class="nav-item nav-item-0"><a href="../../../index.html">Evennia 1.0-dev</a> »</li>
|
|
<li class="nav-item nav-item-1"><a href="../../index.html" >Module code</a> »</li>
|
|
<li class="nav-item nav-item-2"><a href="../../evennia.html" accesskey="U">evennia</a> »</li>
|
|
<li class="nav-item nav-item-this"><a href="">evennia.accounts.admin</a></li>
|
|
</ul>
|
|
</div>
|
|
|
|
<div class="document">
|
|
<div class="documentwrapper">
|
|
<div class="bodywrapper">
|
|
<div class="body" role="main">
|
|
|
|
<h1>Source code for evennia.accounts.admin</h1><div class="highlight"><pre>
|
|
<span></span><span class="c1">#</span>
|
|
<span class="c1"># This sets up how models are displayed</span>
|
|
<span class="c1"># in the web admin interface.</span>
|
|
<span class="c1">#</span>
|
|
<span class="kn">from</span> <span class="nn">django</span> <span class="k">import</span> <span class="n">forms</span>
|
|
<span class="kn">from</span> <span class="nn">django.conf</span> <span class="k">import</span> <span class="n">settings</span>
|
|
<span class="kn">from</span> <span class="nn">django.contrib</span> <span class="k">import</span> <span class="n">admin</span><span class="p">,</span> <span class="n">messages</span>
|
|
<span class="kn">from</span> <span class="nn">django.contrib.admin.options</span> <span class="k">import</span> <span class="n">IS_POPUP_VAR</span>
|
|
<span class="kn">from</span> <span class="nn">django.contrib.auth.admin</span> <span class="k">import</span> <span class="n">UserAdmin</span> <span class="k">as</span> <span class="n">BaseUserAdmin</span>
|
|
<span class="kn">from</span> <span class="nn">django.contrib.auth.forms</span> <span class="k">import</span> <span class="n">UserChangeForm</span><span class="p">,</span> <span class="n">UserCreationForm</span>
|
|
<span class="kn">from</span> <span class="nn">django.contrib.admin.utils</span> <span class="k">import</span> <span class="n">unquote</span>
|
|
<span class="kn">from</span> <span class="nn">django.template.response</span> <span class="k">import</span> <span class="n">TemplateResponse</span>
|
|
<span class="kn">from</span> <span class="nn">django.http</span> <span class="k">import</span> <span class="n">Http404</span><span class="p">,</span> <span class="n">HttpResponseRedirect</span>
|
|
<span class="kn">from</span> <span class="nn">django.core.exceptions</span> <span class="k">import</span> <span class="n">PermissionDenied</span>
|
|
<span class="kn">from</span> <span class="nn">django.views.decorators.debug</span> <span class="k">import</span> <span class="n">sensitive_post_parameters</span>
|
|
<span class="kn">from</span> <span class="nn">django.utils.decorators</span> <span class="k">import</span> <span class="n">method_decorator</span>
|
|
<span class="kn">from</span> <span class="nn">django.utils.html</span> <span class="k">import</span> <span class="n">escape</span>
|
|
<span class="kn">from</span> <span class="nn">django.urls</span> <span class="k">import</span> <span class="n">path</span><span class="p">,</span> <span class="n">reverse</span>
|
|
<span class="kn">from</span> <span class="nn">django.contrib.auth</span> <span class="k">import</span> <span class="n">update_session_auth_hash</span>
|
|
|
|
<span class="kn">from</span> <span class="nn">evennia.accounts.models</span> <span class="k">import</span> <span class="n">AccountDB</span>
|
|
<span class="kn">from</span> <span class="nn">evennia.typeclasses.admin</span> <span class="k">import</span> <span class="n">AttributeInline</span><span class="p">,</span> <span class="n">TagInline</span>
|
|
<span class="kn">from</span> <span class="nn">evennia.utils</span> <span class="k">import</span> <span class="n">create</span>
|
|
|
|
<span class="n">sensitive_post_parameters_m</span> <span class="o">=</span> <span class="n">method_decorator</span><span class="p">(</span><span class="n">sensitive_post_parameters</span><span class="p">())</span>
|
|
|
|
|
|
<span class="c1"># handle the custom User editor</span>
|
|
<div class="viewcode-block" id="AccountDBChangeForm"><a class="viewcode-back" href="../../../api/evennia.accounts.admin.html#evennia.accounts.admin.AccountDBChangeForm">[docs]</a><span class="k">class</span> <span class="nc">AccountDBChangeForm</span><span class="p">(</span><span class="n">UserChangeForm</span><span class="p">):</span>
|
|
<span class="sd">"""</span>
|
|
<span class="sd"> Modify the accountdb class.</span>
|
|
|
|
<span class="sd"> """</span>
|
|
|
|
<div class="viewcode-block" id="AccountDBChangeForm.Meta"><a class="viewcode-back" href="../../../api/evennia.accounts.admin.html#evennia.accounts.admin.AccountDBChangeForm.Meta">[docs]</a> <span class="k">class</span> <span class="nc">Meta</span><span class="p">(</span><span class="nb">object</span><span class="p">):</span>
|
|
<span class="n">model</span> <span class="o">=</span> <span class="n">AccountDB</span>
|
|
<span class="n">fields</span> <span class="o">=</span> <span class="s2">"__all__"</span></div>
|
|
|
|
<span class="n">username</span> <span class="o">=</span> <span class="n">forms</span><span class="o">.</span><span class="n">RegexField</span><span class="p">(</span>
|
|
<span class="n">label</span><span class="o">=</span><span class="s2">"Username"</span><span class="p">,</span>
|
|
<span class="n">max_length</span><span class="o">=</span><span class="mi">30</span><span class="p">,</span>
|
|
<span class="n">regex</span><span class="o">=</span><span class="sa">r</span><span class="s2">"^[\w. @+-]+$"</span><span class="p">,</span>
|
|
<span class="n">widget</span><span class="o">=</span><span class="n">forms</span><span class="o">.</span><span class="n">TextInput</span><span class="p">(</span><span class="n">attrs</span><span class="o">=</span><span class="p">{</span><span class="s2">"size"</span><span class="p">:</span> <span class="s2">"30"</span><span class="p">}),</span>
|
|
<span class="n">error_messages</span><span class="o">=</span><span class="p">{</span>
|
|
<span class="s2">"invalid"</span><span class="p">:</span> <span class="s2">"This value may contain only letters, spaces, numbers "</span>
|
|
<span class="s2">"and @/./+/-/_ characters."</span>
|
|
<span class="p">},</span>
|
|
<span class="n">help_text</span><span class="o">=</span><span class="s2">"30 characters or fewer. Letters, spaces, digits and "</span> <span class="s2">"@/./+/-/_ only."</span><span class="p">,</span>
|
|
<span class="p">)</span>
|
|
|
|
<div class="viewcode-block" id="AccountDBChangeForm.clean_username"><a class="viewcode-back" href="../../../api/evennia.accounts.admin.html#evennia.accounts.admin.AccountDBChangeForm.clean_username">[docs]</a> <span class="k">def</span> <span class="nf">clean_username</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
|
|
<span class="sd">"""</span>
|
|
<span class="sd"> Clean the username and check its existence.</span>
|
|
|
|
<span class="sd"> """</span>
|
|
<span class="n">username</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">cleaned_data</span><span class="p">[</span><span class="s2">"username"</span><span class="p">]</span>
|
|
<span class="k">if</span> <span class="n">username</span><span class="o">.</span><span class="n">upper</span><span class="p">()</span> <span class="o">==</span> <span class="bp">self</span><span class="o">.</span><span class="n">instance</span><span class="o">.</span><span class="n">username</span><span class="o">.</span><span class="n">upper</span><span class="p">():</span>
|
|
<span class="k">return</span> <span class="n">username</span>
|
|
<span class="k">elif</span> <span class="n">AccountDB</span><span class="o">.</span><span class="n">objects</span><span class="o">.</span><span class="n">filter</span><span class="p">(</span><span class="n">username__iexact</span><span class="o">=</span><span class="n">username</span><span class="p">):</span>
|
|
<span class="k">raise</span> <span class="n">forms</span><span class="o">.</span><span class="n">ValidationError</span><span class="p">(</span><span class="s2">"An account with that name "</span> <span class="s2">"already exists."</span><span class="p">)</span>
|
|
<span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">cleaned_data</span><span class="p">[</span><span class="s2">"username"</span><span class="p">]</span></div></div>
|
|
|
|
|
|
<div class="viewcode-block" id="AccountDBCreationForm"><a class="viewcode-back" href="../../../api/evennia.accounts.admin.html#evennia.accounts.admin.AccountDBCreationForm">[docs]</a><span class="k">class</span> <span class="nc">AccountDBCreationForm</span><span class="p">(</span><span class="n">UserCreationForm</span><span class="p">):</span>
|
|
<span class="sd">"""</span>
|
|
<span class="sd"> Create a new AccountDB instance.</span>
|
|
<span class="sd"> """</span>
|
|
|
|
<div class="viewcode-block" id="AccountDBCreationForm.Meta"><a class="viewcode-back" href="../../../api/evennia.accounts.admin.html#evennia.accounts.admin.AccountDBCreationForm.Meta">[docs]</a> <span class="k">class</span> <span class="nc">Meta</span><span class="p">(</span><span class="nb">object</span><span class="p">):</span>
|
|
<span class="n">model</span> <span class="o">=</span> <span class="n">AccountDB</span>
|
|
<span class="n">fields</span> <span class="o">=</span> <span class="s2">"__all__"</span></div>
|
|
|
|
<span class="n">username</span> <span class="o">=</span> <span class="n">forms</span><span class="o">.</span><span class="n">RegexField</span><span class="p">(</span>
|
|
<span class="n">label</span><span class="o">=</span><span class="s2">"Username"</span><span class="p">,</span>
|
|
<span class="n">max_length</span><span class="o">=</span><span class="mi">30</span><span class="p">,</span>
|
|
<span class="n">regex</span><span class="o">=</span><span class="sa">r</span><span class="s2">"^[\w. @+-]+$"</span><span class="p">,</span>
|
|
<span class="n">widget</span><span class="o">=</span><span class="n">forms</span><span class="o">.</span><span class="n">TextInput</span><span class="p">(</span><span class="n">attrs</span><span class="o">=</span><span class="p">{</span><span class="s2">"size"</span><span class="p">:</span> <span class="s2">"30"</span><span class="p">}),</span>
|
|
<span class="n">error_messages</span><span class="o">=</span><span class="p">{</span>
|
|
<span class="s2">"invalid"</span><span class="p">:</span> <span class="s2">"This value may contain only letters, spaces, numbers "</span>
|
|
<span class="s2">"and @/./+/-/_ characters."</span>
|
|
<span class="p">},</span>
|
|
<span class="n">help_text</span><span class="o">=</span><span class="s2">"30 characters or fewer. Letters, spaces, digits and "</span> <span class="s2">"@/./+/-/_ only."</span><span class="p">,</span>
|
|
<span class="p">)</span>
|
|
|
|
<div class="viewcode-block" id="AccountDBCreationForm.clean_username"><a class="viewcode-back" href="../../../api/evennia.accounts.admin.html#evennia.accounts.admin.AccountDBCreationForm.clean_username">[docs]</a> <span class="k">def</span> <span class="nf">clean_username</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
|
|
<span class="sd">"""</span>
|
|
<span class="sd"> Cleanup username.</span>
|
|
<span class="sd"> """</span>
|
|
<span class="n">username</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">cleaned_data</span><span class="p">[</span><span class="s2">"username"</span><span class="p">]</span>
|
|
<span class="k">if</span> <span class="n">AccountDB</span><span class="o">.</span><span class="n">objects</span><span class="o">.</span><span class="n">filter</span><span class="p">(</span><span class="n">username__iexact</span><span class="o">=</span><span class="n">username</span><span class="p">):</span>
|
|
<span class="k">raise</span> <span class="n">forms</span><span class="o">.</span><span class="n">ValidationError</span><span class="p">(</span><span class="s2">"An account with that name already "</span> <span class="s2">"exists."</span><span class="p">)</span>
|
|
<span class="k">return</span> <span class="n">username</span></div></div>
|
|
|
|
|
|
<div class="viewcode-block" id="AccountForm"><a class="viewcode-back" href="../../../api/evennia.accounts.admin.html#evennia.accounts.admin.AccountForm">[docs]</a><span class="k">class</span> <span class="nc">AccountForm</span><span class="p">(</span><span class="n">forms</span><span class="o">.</span><span class="n">ModelForm</span><span class="p">):</span>
|
|
<span class="sd">"""</span>
|
|
<span class="sd"> Defines how to display Accounts</span>
|
|
|
|
<span class="sd"> """</span>
|
|
|
|
<div class="viewcode-block" id="AccountForm.Meta"><a class="viewcode-back" href="../../../api/evennia.accounts.admin.html#evennia.accounts.admin.AccountForm.Meta">[docs]</a> <span class="k">class</span> <span class="nc">Meta</span><span class="p">(</span><span class="nb">object</span><span class="p">):</span>
|
|
<span class="n">model</span> <span class="o">=</span> <span class="n">AccountDB</span>
|
|
<span class="n">fields</span> <span class="o">=</span> <span class="s2">"__all__"</span>
|
|
<span class="n">app_label</span> <span class="o">=</span> <span class="s2">"accounts"</span></div>
|
|
|
|
<span class="n">db_key</span> <span class="o">=</span> <span class="n">forms</span><span class="o">.</span><span class="n">RegexField</span><span class="p">(</span>
|
|
<span class="n">label</span><span class="o">=</span><span class="s2">"Username"</span><span class="p">,</span>
|
|
<span class="n">initial</span><span class="o">=</span><span class="s2">"AccountDummy"</span><span class="p">,</span>
|
|
<span class="n">max_length</span><span class="o">=</span><span class="mi">30</span><span class="p">,</span>
|
|
<span class="n">regex</span><span class="o">=</span><span class="sa">r</span><span class="s2">"^[\w. @+-]+$"</span><span class="p">,</span>
|
|
<span class="n">required</span><span class="o">=</span><span class="kc">False</span><span class="p">,</span>
|
|
<span class="n">widget</span><span class="o">=</span><span class="n">forms</span><span class="o">.</span><span class="n">TextInput</span><span class="p">(</span><span class="n">attrs</span><span class="o">=</span><span class="p">{</span><span class="s2">"size"</span><span class="p">:</span> <span class="s2">"30"</span><span class="p">}),</span>
|
|
<span class="n">error_messages</span><span class="o">=</span><span class="p">{</span>
|
|
<span class="s2">"invalid"</span><span class="p">:</span> <span class="s2">"This value may contain only letters, spaces, numbers"</span>
|
|
<span class="s2">" and @/./+/-/_ characters."</span>
|
|
<span class="p">},</span>
|
|
<span class="n">help_text</span><span class="o">=</span><span class="s2">"This should be the same as the connected Account's key "</span>
|
|
<span class="s2">"name. 30 characters or fewer. Letters, spaces, digits and "</span>
|
|
<span class="s2">"@/./+/-/_ only."</span><span class="p">,</span>
|
|
<span class="p">)</span>
|
|
|
|
<span class="n">db_typeclass_path</span> <span class="o">=</span> <span class="n">forms</span><span class="o">.</span><span class="n">CharField</span><span class="p">(</span>
|
|
<span class="n">label</span><span class="o">=</span><span class="s2">"Typeclass"</span><span class="p">,</span>
|
|
<span class="n">initial</span><span class="o">=</span><span class="n">settings</span><span class="o">.</span><span class="n">BASE_ACCOUNT_TYPECLASS</span><span class="p">,</span>
|
|
<span class="n">widget</span><span class="o">=</span><span class="n">forms</span><span class="o">.</span><span class="n">TextInput</span><span class="p">(</span><span class="n">attrs</span><span class="o">=</span><span class="p">{</span><span class="s2">"size"</span><span class="p">:</span> <span class="s2">"78"</span><span class="p">}),</span>
|
|
<span class="n">help_text</span><span class="o">=</span><span class="s2">"Required. Defines what 'type' of entity this is. This "</span>
|
|
<span class="s2">"variable holds a Python path to a module with a valid "</span>
|
|
<span class="s2">"Evennia Typeclass. Defaults to "</span>
|
|
<span class="s2">"settings.BASE_ACCOUNT_TYPECLASS."</span><span class="p">,</span>
|
|
<span class="p">)</span>
|
|
|
|
<span class="n">db_permissions</span> <span class="o">=</span> <span class="n">forms</span><span class="o">.</span><span class="n">CharField</span><span class="p">(</span>
|
|
<span class="n">label</span><span class="o">=</span><span class="s2">"Permissions"</span><span class="p">,</span>
|
|
<span class="n">initial</span><span class="o">=</span><span class="n">settings</span><span class="o">.</span><span class="n">PERMISSION_ACCOUNT_DEFAULT</span><span class="p">,</span>
|
|
<span class="n">required</span><span class="o">=</span><span class="kc">False</span><span class="p">,</span>
|
|
<span class="n">widget</span><span class="o">=</span><span class="n">forms</span><span class="o">.</span><span class="n">TextInput</span><span class="p">(</span><span class="n">attrs</span><span class="o">=</span><span class="p">{</span><span class="s2">"size"</span><span class="p">:</span> <span class="s2">"78"</span><span class="p">}),</span>
|
|
<span class="n">help_text</span><span class="o">=</span><span class="s2">"In-game permissions. A comma-separated list of text "</span>
|
|
<span class="s2">"strings checked by certain locks. They are often used for "</span>
|
|
<span class="s2">"hierarchies, such as letting an Account have permission "</span>
|
|
<span class="s2">"'Admin', 'Builder' etc. An Account permission can be "</span>
|
|
<span class="s2">"overloaded by the permissions of a controlled Character. "</span>
|
|
<span class="s2">"Normal accounts use 'Accounts' by default."</span><span class="p">,</span>
|
|
<span class="p">)</span>
|
|
|
|
<span class="n">db_lock_storage</span> <span class="o">=</span> <span class="n">forms</span><span class="o">.</span><span class="n">CharField</span><span class="p">(</span>
|
|
<span class="n">label</span><span class="o">=</span><span class="s2">"Locks"</span><span class="p">,</span>
|
|
<span class="n">widget</span><span class="o">=</span><span class="n">forms</span><span class="o">.</span><span class="n">Textarea</span><span class="p">(</span><span class="n">attrs</span><span class="o">=</span><span class="p">{</span><span class="s2">"cols"</span><span class="p">:</span> <span class="s2">"100"</span><span class="p">,</span> <span class="s2">"rows"</span><span class="p">:</span> <span class="s2">"2"</span><span class="p">}),</span>
|
|
<span class="n">required</span><span class="o">=</span><span class="kc">False</span><span class="p">,</span>
|
|
<span class="n">help_text</span><span class="o">=</span><span class="s2">"In-game lock definition string. If not given, defaults "</span>
|
|
<span class="s2">"will be used. This string should be on the form "</span>
|
|
<span class="s2">"<i>type:lockfunction(args);type2:lockfunction2(args);..."</span><span class="p">,</span>
|
|
<span class="p">)</span>
|
|
<span class="n">db_cmdset_storage</span> <span class="o">=</span> <span class="n">forms</span><span class="o">.</span><span class="n">CharField</span><span class="p">(</span>
|
|
<span class="n">label</span><span class="o">=</span><span class="s2">"cmdset"</span><span class="p">,</span>
|
|
<span class="n">initial</span><span class="o">=</span><span class="n">settings</span><span class="o">.</span><span class="n">CMDSET_ACCOUNT</span><span class="p">,</span>
|
|
<span class="n">widget</span><span class="o">=</span><span class="n">forms</span><span class="o">.</span><span class="n">TextInput</span><span class="p">(</span><span class="n">attrs</span><span class="o">=</span><span class="p">{</span><span class="s2">"size"</span><span class="p">:</span> <span class="s2">"78"</span><span class="p">}),</span>
|
|
<span class="n">required</span><span class="o">=</span><span class="kc">False</span><span class="p">,</span>
|
|
<span class="n">help_text</span><span class="o">=</span><span class="s2">"python path to account cmdset class (set in "</span>
|
|
<span class="s2">"settings.CMDSET_ACCOUNT by default)"</span><span class="p">,</span>
|
|
<span class="p">)</span></div>
|
|
|
|
|
|
<div class="viewcode-block" id="AccountInline"><a class="viewcode-back" href="../../../api/evennia.accounts.admin.html#evennia.accounts.admin.AccountInline">[docs]</a><span class="k">class</span> <span class="nc">AccountInline</span><span class="p">(</span><span class="n">admin</span><span class="o">.</span><span class="n">StackedInline</span><span class="p">):</span>
|
|
<span class="sd">"""</span>
|
|
<span class="sd"> Inline creation of Account</span>
|
|
|
|
<span class="sd"> """</span>
|
|
|
|
<span class="n">model</span> <span class="o">=</span> <span class="n">AccountDB</span>
|
|
<span class="n">template</span> <span class="o">=</span> <span class="s2">"admin/accounts/stacked.html"</span>
|
|
<span class="n">form</span> <span class="o">=</span> <span class="n">AccountForm</span>
|
|
<span class="n">fieldsets</span> <span class="o">=</span> <span class="p">(</span>
|
|
<span class="p">(</span>
|
|
<span class="s2">"In-game Permissions and Locks"</span><span class="p">,</span>
|
|
<span class="p">{</span>
|
|
<span class="s2">"fields"</span><span class="p">:</span> <span class="p">(</span><span class="s2">"db_lock_storage"</span><span class="p">,),</span>
|
|
<span class="c1"># {'fields': ('db_permissions', 'db_lock_storage'),</span>
|
|
<span class="s2">"description"</span><span class="p">:</span> <span class="s2">"<i>These are permissions/locks for in-game use. "</span>
|
|
<span class="s2">"They are unrelated to website access rights.</i>"</span><span class="p">,</span>
|
|
<span class="p">},</span>
|
|
<span class="p">),</span>
|
|
<span class="p">(</span>
|
|
<span class="s2">"In-game Account data"</span><span class="p">,</span>
|
|
<span class="p">{</span>
|
|
<span class="s2">"fields"</span><span class="p">:</span> <span class="p">(</span><span class="s2">"db_typeclass_path"</span><span class="p">,</span> <span class="s2">"db_cmdset_storage"</span><span class="p">),</span>
|
|
<span class="s2">"description"</span><span class="p">:</span> <span class="s2">"<i>These fields define in-game-specific properties "</span>
|
|
<span class="s2">"for the Account object in-game.</i>"</span><span class="p">,</span>
|
|
<span class="p">},</span>
|
|
<span class="p">),</span>
|
|
<span class="p">)</span>
|
|
|
|
<span class="n">extra</span> <span class="o">=</span> <span class="mi">1</span>
|
|
<span class="n">max_num</span> <span class="o">=</span> <span class="mi">1</span></div>
|
|
|
|
|
|
<div class="viewcode-block" id="AccountTagInline"><a class="viewcode-back" href="../../../api/evennia.accounts.admin.html#evennia.accounts.admin.AccountTagInline">[docs]</a><span class="k">class</span> <span class="nc">AccountTagInline</span><span class="p">(</span><span class="n">TagInline</span><span class="p">):</span>
|
|
<span class="sd">"""</span>
|
|
<span class="sd"> Inline Account Tags.</span>
|
|
|
|
<span class="sd"> """</span>
|
|
|
|
<span class="n">model</span> <span class="o">=</span> <span class="n">AccountDB</span><span class="o">.</span><span class="n">db_tags</span><span class="o">.</span><span class="n">through</span>
|
|
<span class="n">related_field</span> <span class="o">=</span> <span class="s2">"accountdb"</span></div>
|
|
|
|
|
|
<div class="viewcode-block" id="AccountAttributeInline"><a class="viewcode-back" href="../../../api/evennia.accounts.admin.html#evennia.accounts.admin.AccountAttributeInline">[docs]</a><span class="k">class</span> <span class="nc">AccountAttributeInline</span><span class="p">(</span><span class="n">AttributeInline</span><span class="p">):</span>
|
|
<span class="sd">"""</span>
|
|
<span class="sd"> Inline Account Attributes.</span>
|
|
|
|
<span class="sd"> """</span>
|
|
|
|
<span class="n">model</span> <span class="o">=</span> <span class="n">AccountDB</span><span class="o">.</span><span class="n">db_attributes</span><span class="o">.</span><span class="n">through</span>
|
|
<span class="n">related_field</span> <span class="o">=</span> <span class="s2">"accountdb"</span></div>
|
|
|
|
|
|
<div class="viewcode-block" id="AccountDBAdmin"><a class="viewcode-back" href="../../../api/evennia.accounts.admin.html#evennia.accounts.admin.AccountDBAdmin">[docs]</a><span class="k">class</span> <span class="nc">AccountDBAdmin</span><span class="p">(</span><span class="n">BaseUserAdmin</span><span class="p">):</span>
|
|
<span class="sd">"""</span>
|
|
<span class="sd"> This is the main creation screen for Users/accounts</span>
|
|
|
|
<span class="sd"> """</span>
|
|
|
|
<span class="n">list_display</span> <span class="o">=</span> <span class="p">(</span><span class="s2">"username"</span><span class="p">,</span> <span class="s2">"email"</span><span class="p">,</span> <span class="s2">"is_staff"</span><span class="p">,</span> <span class="s2">"is_superuser"</span><span class="p">)</span>
|
|
<span class="n">form</span> <span class="o">=</span> <span class="n">AccountDBChangeForm</span>
|
|
<span class="n">add_form</span> <span class="o">=</span> <span class="n">AccountDBCreationForm</span>
|
|
<span class="n">inlines</span> <span class="o">=</span> <span class="p">[</span><span class="n">AccountTagInline</span><span class="p">,</span> <span class="n">AccountAttributeInline</span><span class="p">]</span>
|
|
<span class="n">fieldsets</span> <span class="o">=</span> <span class="p">(</span>
|
|
<span class="p">(</span><span class="kc">None</span><span class="p">,</span> <span class="p">{</span><span class="s2">"fields"</span><span class="p">:</span> <span class="p">(</span><span class="s2">"username"</span><span class="p">,</span> <span class="s2">"password"</span><span class="p">,</span> <span class="s2">"email"</span><span class="p">)}),</span>
|
|
<span class="p">(</span>
|
|
<span class="s2">"Website profile"</span><span class="p">,</span>
|
|
<span class="p">{</span>
|
|
<span class="s2">"fields"</span><span class="p">:</span> <span class="p">(</span><span class="s2">"first_name"</span><span class="p">,</span> <span class="s2">"last_name"</span><span class="p">),</span>
|
|
<span class="s2">"description"</span><span class="p">:</span> <span class="s2">"<i>These are not used "</span> <span class="s2">"in the default system.</i>"</span><span class="p">,</span>
|
|
<span class="p">},</span>
|
|
<span class="p">),</span>
|
|
<span class="p">(</span>
|
|
<span class="s2">"Website dates"</span><span class="p">,</span>
|
|
<span class="p">{</span>
|
|
<span class="s2">"fields"</span><span class="p">:</span> <span class="p">(</span><span class="s2">"last_login"</span><span class="p">,</span> <span class="s2">"date_joined"</span><span class="p">),</span>
|
|
<span class="s2">"description"</span><span class="p">:</span> <span class="s2">"<i>Relevant only to the website.</i>"</span><span class="p">,</span>
|
|
<span class="p">},</span>
|
|
<span class="p">),</span>
|
|
<span class="p">(</span>
|
|
<span class="s2">"Website Permissions"</span><span class="p">,</span>
|
|
<span class="p">{</span>
|
|
<span class="s2">"fields"</span><span class="p">:</span> <span class="p">(</span><span class="s2">"is_active"</span><span class="p">,</span> <span class="s2">"is_staff"</span><span class="p">,</span> <span class="s2">"is_superuser"</span><span class="p">,</span> <span class="s2">"user_permissions"</span><span class="p">,</span> <span class="s2">"groups"</span><span class="p">),</span>
|
|
<span class="s2">"description"</span><span class="p">:</span> <span class="s2">"<i>These are permissions/permission groups for "</span>
|
|
<span class="s2">"accessing the admin site. They are unrelated to "</span>
|
|
<span class="s2">"in-game access rights.</i>"</span><span class="p">,</span>
|
|
<span class="p">},</span>
|
|
<span class="p">),</span>
|
|
<span class="p">(</span>
|
|
<span class="s2">"Game Options"</span><span class="p">,</span>
|
|
<span class="p">{</span>
|
|
<span class="s2">"fields"</span><span class="p">:</span> <span class="p">(</span><span class="s2">"db_typeclass_path"</span><span class="p">,</span> <span class="s2">"db_cmdset_storage"</span><span class="p">,</span> <span class="s2">"db_lock_storage"</span><span class="p">),</span>
|
|
<span class="s2">"description"</span><span class="p">:</span> <span class="s2">"<i>These are attributes that are more relevant "</span> <span class="s2">"to gameplay.</i>"</span><span class="p">,</span>
|
|
<span class="p">},</span>
|
|
<span class="p">),</span>
|
|
<span class="p">)</span>
|
|
<span class="c1"># ('Game Options', {'fields': (</span>
|
|
<span class="c1"># 'db_typeclass_path', 'db_cmdset_storage',</span>
|
|
<span class="c1"># 'db_permissions', 'db_lock_storage'),</span>
|
|
<span class="c1"># 'description': '<i>These are attributes that are '</span>
|
|
<span class="c1"># 'more relevant to gameplay.</i>'}))</span>
|
|
|
|
<span class="n">add_fieldsets</span> <span class="o">=</span> <span class="p">(</span>
|
|
<span class="p">(</span>
|
|
<span class="kc">None</span><span class="p">,</span>
|
|
<span class="p">{</span>
|
|
<span class="s2">"fields"</span><span class="p">:</span> <span class="p">(</span><span class="s2">"username"</span><span class="p">,</span> <span class="s2">"password1"</span><span class="p">,</span> <span class="s2">"password2"</span><span class="p">,</span> <span class="s2">"email"</span><span class="p">),</span>
|
|
<span class="s2">"description"</span><span class="p">:</span> <span class="s2">"<i>These account details are shared by the admin "</span>
|
|
<span class="s2">"system and the game.</i>"</span><span class="p">,</span>
|
|
<span class="p">},</span>
|
|
<span class="p">),</span>
|
|
<span class="p">)</span>
|
|
|
|
<div class="viewcode-block" id="AccountDBAdmin.user_change_password"><a class="viewcode-back" href="../../../api/evennia.accounts.admin.html#evennia.accounts.admin.AccountDBAdmin.user_change_password">[docs]</a> <span class="nd">@sensitive_post_parameters_m</span>
|
|
<span class="k">def</span> <span class="nf">user_change_password</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">request</span><span class="p">,</span> <span class="nb">id</span><span class="p">,</span> <span class="n">form_url</span><span class="o">=</span><span class="s2">""</span><span class="p">):</span>
|
|
<span class="n">user</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">get_object</span><span class="p">(</span><span class="n">request</span><span class="p">,</span> <span class="n">unquote</span><span class="p">(</span><span class="nb">id</span><span class="p">))</span>
|
|
<span class="k">if</span> <span class="ow">not</span> <span class="bp">self</span><span class="o">.</span><span class="n">has_change_permission</span><span class="p">(</span><span class="n">request</span><span class="p">,</span> <span class="n">user</span><span class="p">):</span>
|
|
<span class="k">raise</span> <span class="n">PermissionDenied</span>
|
|
<span class="k">if</span> <span class="n">user</span> <span class="ow">is</span> <span class="kc">None</span><span class="p">:</span>
|
|
<span class="k">raise</span> <span class="n">Http404</span><span class="p">(</span><span class="s2">"</span><span class="si">%(name)s</span><span class="s2"> object with primary key </span><span class="si">%(key)r</span><span class="s2"> does not exist."</span><span class="p">)</span> <span class="o">%</span> <span class="p">{</span>
|
|
<span class="s2">"name"</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">model</span><span class="o">.</span><span class="n">_meta</span><span class="o">.</span><span class="n">verbose_name</span><span class="p">,</span>
|
|
<span class="s2">"key"</span><span class="p">:</span> <span class="n">escape</span><span class="p">(</span><span class="nb">id</span><span class="p">),</span>
|
|
<span class="p">}</span>
|
|
<span class="k">if</span> <span class="n">request</span><span class="o">.</span><span class="n">method</span> <span class="o">==</span> <span class="s2">"POST"</span><span class="p">:</span>
|
|
<span class="n">form</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">change_password_form</span><span class="p">(</span><span class="n">user</span><span class="p">,</span> <span class="n">request</span><span class="o">.</span><span class="n">POST</span><span class="p">)</span>
|
|
<span class="k">if</span> <span class="n">form</span><span class="o">.</span><span class="n">is_valid</span><span class="p">():</span>
|
|
<span class="n">form</span><span class="o">.</span><span class="n">save</span><span class="p">()</span>
|
|
<span class="n">change_message</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">construct_change_message</span><span class="p">(</span><span class="n">request</span><span class="p">,</span> <span class="n">form</span><span class="p">,</span> <span class="kc">None</span><span class="p">)</span>
|
|
<span class="bp">self</span><span class="o">.</span><span class="n">log_change</span><span class="p">(</span><span class="n">request</span><span class="p">,</span> <span class="n">user</span><span class="p">,</span> <span class="n">change_message</span><span class="p">)</span>
|
|
<span class="n">msg</span> <span class="o">=</span> <span class="s2">"Password changed successfully."</span>
|
|
<span class="n">messages</span><span class="o">.</span><span class="n">success</span><span class="p">(</span><span class="n">request</span><span class="p">,</span> <span class="n">msg</span><span class="p">)</span>
|
|
<span class="n">update_session_auth_hash</span><span class="p">(</span><span class="n">request</span><span class="p">,</span> <span class="n">form</span><span class="o">.</span><span class="n">user</span><span class="p">)</span>
|
|
<span class="k">return</span> <span class="n">HttpResponseRedirect</span><span class="p">(</span>
|
|
<span class="n">reverse</span><span class="p">(</span>
|
|
<span class="s2">"</span><span class="si">%s</span><span class="s2">:</span><span class="si">%s</span><span class="s2">_</span><span class="si">%s</span><span class="s2">_change"</span>
|
|
<span class="o">%</span> <span class="p">(</span>
|
|
<span class="bp">self</span><span class="o">.</span><span class="n">admin_site</span><span class="o">.</span><span class="n">name</span><span class="p">,</span>
|
|
<span class="n">user</span><span class="o">.</span><span class="n">_meta</span><span class="o">.</span><span class="n">app_label</span><span class="p">,</span>
|
|
<span class="c1"># the model_name is something we need to hardcode</span>
|
|
<span class="c1"># since our accountdb is a proxy:</span>
|
|
<span class="s2">"accountdb"</span><span class="p">,</span>
|
|
<span class="p">),</span>
|
|
<span class="n">args</span><span class="o">=</span><span class="p">(</span><span class="n">user</span><span class="o">.</span><span class="n">pk</span><span class="p">,),</span>
|
|
<span class="p">)</span>
|
|
<span class="p">)</span>
|
|
<span class="k">else</span><span class="p">:</span>
|
|
<span class="n">form</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">change_password_form</span><span class="p">(</span><span class="n">user</span><span class="p">)</span>
|
|
|
|
<span class="n">fieldsets</span> <span class="o">=</span> <span class="p">[(</span><span class="kc">None</span><span class="p">,</span> <span class="p">{</span><span class="s2">"fields"</span><span class="p">:</span> <span class="nb">list</span><span class="p">(</span><span class="n">form</span><span class="o">.</span><span class="n">base_fields</span><span class="p">)})]</span>
|
|
<span class="n">adminForm</span> <span class="o">=</span> <span class="n">admin</span><span class="o">.</span><span class="n">helpers</span><span class="o">.</span><span class="n">AdminForm</span><span class="p">(</span><span class="n">form</span><span class="p">,</span> <span class="n">fieldsets</span><span class="p">,</span> <span class="p">{})</span>
|
|
|
|
<span class="n">context</span> <span class="o">=</span> <span class="p">{</span>
|
|
<span class="s2">"title"</span><span class="p">:</span> <span class="s2">"Change password: </span><span class="si">%s</span><span class="s2">"</span> <span class="o">%</span> <span class="n">escape</span><span class="p">(</span><span class="n">user</span><span class="o">.</span><span class="n">get_username</span><span class="p">()),</span>
|
|
<span class="s2">"adminForm"</span><span class="p">:</span> <span class="n">adminForm</span><span class="p">,</span>
|
|
<span class="s2">"form_url"</span><span class="p">:</span> <span class="n">form_url</span><span class="p">,</span>
|
|
<span class="s2">"form"</span><span class="p">:</span> <span class="n">form</span><span class="p">,</span>
|
|
<span class="s2">"is_popup"</span><span class="p">:</span> <span class="p">(</span><span class="n">IS_POPUP_VAR</span> <span class="ow">in</span> <span class="n">request</span><span class="o">.</span><span class="n">POST</span> <span class="ow">or</span> <span class="n">IS_POPUP_VAR</span> <span class="ow">in</span> <span class="n">request</span><span class="o">.</span><span class="n">GET</span><span class="p">),</span>
|
|
<span class="s2">"add"</span><span class="p">:</span> <span class="kc">True</span><span class="p">,</span>
|
|
<span class="s2">"change"</span><span class="p">:</span> <span class="kc">False</span><span class="p">,</span>
|
|
<span class="s2">"has_delete_permission"</span><span class="p">:</span> <span class="kc">False</span><span class="p">,</span>
|
|
<span class="s2">"has_change_permission"</span><span class="p">:</span> <span class="kc">True</span><span class="p">,</span>
|
|
<span class="s2">"has_absolute_url"</span><span class="p">:</span> <span class="kc">False</span><span class="p">,</span>
|
|
<span class="s2">"opts"</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">model</span><span class="o">.</span><span class="n">_meta</span><span class="p">,</span>
|
|
<span class="s2">"original"</span><span class="p">:</span> <span class="n">user</span><span class="p">,</span>
|
|
<span class="s2">"save_as"</span><span class="p">:</span> <span class="kc">False</span><span class="p">,</span>
|
|
<span class="s2">"show_save"</span><span class="p">:</span> <span class="kc">True</span><span class="p">,</span>
|
|
<span class="o">**</span><span class="bp">self</span><span class="o">.</span><span class="n">admin_site</span><span class="o">.</span><span class="n">each_context</span><span class="p">(</span><span class="n">request</span><span class="p">),</span>
|
|
<span class="p">}</span>
|
|
|
|
<span class="n">request</span><span class="o">.</span><span class="n">current_app</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">admin_site</span><span class="o">.</span><span class="n">name</span>
|
|
|
|
<span class="k">return</span> <span class="n">TemplateResponse</span><span class="p">(</span>
|
|
<span class="n">request</span><span class="p">,</span>
|
|
<span class="bp">self</span><span class="o">.</span><span class="n">change_user_password_template</span> <span class="ow">or</span> <span class="s2">"admin/auth/user/change_password.html"</span><span class="p">,</span>
|
|
<span class="n">context</span><span class="p">,</span>
|
|
<span class="p">)</span></div>
|
|
|
|
<div class="viewcode-block" id="AccountDBAdmin.save_model"><a class="viewcode-back" href="../../../api/evennia.accounts.admin.html#evennia.accounts.admin.AccountDBAdmin.save_model">[docs]</a> <span class="k">def</span> <span class="nf">save_model</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">request</span><span class="p">,</span> <span class="n">obj</span><span class="p">,</span> <span class="n">form</span><span class="p">,</span> <span class="n">change</span><span class="p">):</span>
|
|
<span class="sd">"""</span>
|
|
<span class="sd"> Custom save actions.</span>
|
|
|
|
<span class="sd"> Args:</span>
|
|
<span class="sd"> request (Request): Incoming request.</span>
|
|
<span class="sd"> obj (Object): Object to save.</span>
|
|
<span class="sd"> form (Form): Related form instance.</span>
|
|
<span class="sd"> change (bool): False if this is a new save and not an update.</span>
|
|
|
|
<span class="sd"> """</span>
|
|
<span class="n">obj</span><span class="o">.</span><span class="n">save</span><span class="p">()</span>
|
|
<span class="k">if</span> <span class="ow">not</span> <span class="n">change</span><span class="p">:</span>
|
|
<span class="c1"># calling hooks for new account</span>
|
|
<span class="n">obj</span><span class="o">.</span><span class="n">set_class_from_typeclass</span><span class="p">(</span><span class="n">typeclass_path</span><span class="o">=</span><span class="n">settings</span><span class="o">.</span><span class="n">BASE_ACCOUNT_TYPECLASS</span><span class="p">)</span>
|
|
<span class="n">obj</span><span class="o">.</span><span class="n">basetype_setup</span><span class="p">()</span>
|
|
<span class="n">obj</span><span class="o">.</span><span class="n">at_account_creation</span><span class="p">()</span></div>
|
|
|
|
<div class="viewcode-block" id="AccountDBAdmin.response_add"><a class="viewcode-back" href="../../../api/evennia.accounts.admin.html#evennia.accounts.admin.AccountDBAdmin.response_add">[docs]</a> <span class="k">def</span> <span class="nf">response_add</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">request</span><span class="p">,</span> <span class="n">obj</span><span class="p">,</span> <span class="n">post_url_continue</span><span class="o">=</span><span class="kc">None</span><span class="p">):</span>
|
|
<span class="kn">from</span> <span class="nn">django.http</span> <span class="k">import</span> <span class="n">HttpResponseRedirect</span>
|
|
<span class="kn">from</span> <span class="nn">django.urls</span> <span class="k">import</span> <span class="n">reverse</span>
|
|
|
|
<span class="k">return</span> <span class="n">HttpResponseRedirect</span><span class="p">(</span><span class="n">reverse</span><span class="p">(</span><span class="s2">"admin:accounts_accountdb_change"</span><span class="p">,</span> <span class="n">args</span><span class="o">=</span><span class="p">[</span><span class="n">obj</span><span class="o">.</span><span class="n">id</span><span class="p">]))</span></div></div>
|
|
|
|
|
|
<span class="n">admin</span><span class="o">.</span><span class="n">site</span><span class="o">.</span><span class="n">register</span><span class="p">(</span><span class="n">AccountDB</span><span class="p">,</span> <span class="n">AccountDBAdmin</span><span class="p">)</span>
|
|
</pre></div>
|
|
|
|
<div class="clearer"></div>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
<div class="sphinxsidebar" role="navigation" aria-label="main navigation">
|
|
<div class="sphinxsidebarwrapper">
|
|
<p class="logo"><a href="../../../index.html">
|
|
<img class="logo" src="../../../_static/evennia_logo.png" alt="Logo"/>
|
|
</a></p>
|
|
<div id="searchbox" style="display: none" role="search">
|
|
<h3 id="searchlabel">Quick search</h3>
|
|
<div class="searchformwrapper">
|
|
<form class="search" action="../../../search.html" method="get">
|
|
<input type="text" name="q" aria-labelledby="searchlabel" />
|
|
<input type="submit" value="Go" />
|
|
</form>
|
|
</div>
|
|
</div>
|
|
<script>$('#searchbox').show(0);</script>
|
|
<h3>Versions</h3>
|
|
<ul>
|
|
<li><a href="admin.html">1.0-dev (develop branch)</a></li>
|
|
<li><a href="../../../../0.9.1/index.html">0.9.1 (master branch)</a></li>
|
|
</ul>
|
|
|
|
</div>
|
|
</div>
|
|
<div class="clearer"></div>
|
|
</div>
|
|
<div class="related" role="navigation" aria-label="related navigation">
|
|
<h3>Navigation</h3>
|
|
<ul>
|
|
<li class="right" style="margin-right: 10px">
|
|
<a href="../../../genindex.html" title="General Index"
|
|
>index</a></li>
|
|
<li class="right" >
|
|
<a href="../../../py-modindex.html" title="Python Module Index"
|
|
>modules</a> |</li>
|
|
<li class="nav-item nav-item-0"><a href="../../../index.html">Evennia 1.0-dev</a> »</li>
|
|
<li class="nav-item nav-item-1"><a href="../../index.html" >Module code</a> »</li>
|
|
<li class="nav-item nav-item-2"><a href="../../evennia.html" >evennia</a> »</li>
|
|
<li class="nav-item nav-item-this"><a href="">evennia.accounts.admin</a></li>
|
|
</ul>
|
|
</div>
|
|
<div class="footer" role="contentinfo">
|
|
© Copyright 2020, The Evennia developer community.
|
|
Created using <a href="https://www.sphinx-doc.org/">Sphinx</a> 3.1.1.
|
|
</div>
|
|
</body>
|
|
</html> |