Browse Source

Moved notrefactored code outside of misago dir.

Ralfp 12 years ago
parent
commit
1579c2af91
351 changed files with 381 additions and 21 deletions
  1. 91 0
      misago/acl/builder.py
  2. 12 0
      misago/acl/decorators.py
  3. 9 0
      misago/acl/exceptions.py
  4. 0 0
      misago/acl/panels.py
  5. 13 0
      misago/middleware/acl.py
  6. 18 0
      misago/middleware/banning.py
  7. 0 0
      misago/middleware/heartbeat.py
  8. 1 1
      misago/models/__init__.py
  9. 68 1
      misago/models/banmodel.py
  10. 2 2
      misago/models/postmodel.py
  11. 2 2
      misago/models/threadmodel.py
  12. 3 3
      misago/models/usermodel.py
  13. 2 2
      misago/settings_base.py
  14. 33 0
      misago/shared/views.py
  15. 80 0
      misago/validators.py
  16. 0 0
      notrefactored/acl/__init__.py
  17. 0 0
      notrefactored/acl/builder.py
  18. 0 0
      notrefactored/acl/context_processors.py
  19. 0 0
      notrefactored/acl/fixtures.py
  20. 0 0
      notrefactored/acl/middleware.py
  21. 30 0
      notrefactored/acl/panels.py
  22. 0 0
      notrefactored/acl/utils.py
  23. 0 0
      notrefactored/activation/__init__.py
  24. 0 0
      notrefactored/activation/forms.py
  25. 0 0
      notrefactored/activation/urls.py
  26. 0 0
      notrefactored/activation/views.py
  27. 0 0
      notrefactored/admin/__init__.py
  28. 0 0
      notrefactored/admin/acl.py
  29. 0 0
      notrefactored/admin/context_processors.py
  30. 0 0
      notrefactored/admin/layout/__init__.py
  31. 0 0
      notrefactored/admin/layout/forums.py
  32. 0 0
      notrefactored/admin/layout/overview.py
  33. 0 0
      notrefactored/admin/layout/perms.py
  34. 0 0
      notrefactored/admin/layout/sections.py
  35. 0 0
      notrefactored/admin/layout/system.py
  36. 0 0
      notrefactored/admin/layout/users.py
  37. 0 0
      notrefactored/admin/views.py
  38. 0 0
      notrefactored/admin/widgets.py
  39. 0 0
      notrefactored/alerts/__init__.py
  40. 0 0
      notrefactored/alerts/management/__init__.py
  41. 0 0
      notrefactored/alerts/management/commands/__init__.py
  42. 0 0
      notrefactored/alerts/management/commands/clearalerts.py
  43. 0 0
      notrefactored/alerts/migrations/0001_initial.py
  44. 0 0
      notrefactored/alerts/migrations/__init__.py
  45. 0 0
      notrefactored/alerts/models.py
  46. 0 0
      notrefactored/alerts/views.py
  47. 0 0
      notrefactored/authn/__init__.py
  48. 0 0
      notrefactored/authn/decorators.py
  49. 0 0
      notrefactored/authn/fixtures.py
  50. 0 0
      notrefactored/authn/forms.py
  51. 0 0
      notrefactored/authn/methods.py
  52. 0 0
      notrefactored/authn/urls.py
  53. 0 0
      notrefactored/authn/views.py
  54. 0 0
      notrefactored/banning/__init__.py
  55. 0 0
      notrefactored/banning/context_processors.py
  56. 0 0
      notrefactored/banning/decorators.py
  57. 0 0
      notrefactored/banning/fixtures.py
  58. 0 0
      notrefactored/banning/forms.py
  59. 0 0
      notrefactored/banning/middleware.py
  60. 0 0
      notrefactored/banning/migrations/0001_initial.py
  61. 0 0
      notrefactored/banning/migrations/__init__.py
  62. 0 0
      notrefactored/banning/models.py
  63. 0 0
      notrefactored/banning/views.py
  64. 0 0
      notrefactored/bruteforce/__init__.py
  65. 0 0
      notrefactored/bruteforce/context_processors.py
  66. 0 0
      notrefactored/bruteforce/decorators.py
  67. 0 0
      notrefactored/bruteforce/fixtures.py
  68. 0 0
      notrefactored/bruteforce/management/__init__.py
  69. 0 0
      notrefactored/bruteforce/management/commands/__init__.py
  70. 0 0
      notrefactored/bruteforce/management/commands/clearattempts.py
  71. 0 0
      notrefactored/bruteforce/middleware.py
  72. 0 0
      notrefactored/bruteforce/migrations/0001_initial.py
  73. 0 0
      notrefactored/bruteforce/migrations/__init__.py
  74. 0 0
      notrefactored/bruteforce/models.py
  75. 0 0
      notrefactored/captcha/__init__.py
  76. 0 0
      notrefactored/captcha/fixtures.py
  77. 0 0
      notrefactored/context_processors.py
  78. 0 0
      notrefactored/cookie_jar/__init__.py
  79. 0 0
      notrefactored/cookie_jar/cookie_jar.py
  80. 0 0
      notrefactored/cookie_jar/middleware.py
  81. 0 0
      notrefactored/crawlers/__init__.py
  82. 0 0
      notrefactored/crawlers/crawler.py
  83. 0 0
      notrefactored/crawlers/database.py
  84. 0 0
      notrefactored/crawlers/decorators.py
  85. 0 0
      notrefactored/crawlers/middleware.py
  86. 0 0
      notrefactored/csrf/__init__.py
  87. 0 0
      notrefactored/csrf/context_processors.py
  88. 0 0
      notrefactored/csrf/decorators.py
  89. 0 0
      notrefactored/csrf/middleware.py
  90. 0 0
      notrefactored/firewalls/__init__.py
  91. 0 0
      notrefactored/firewalls/firewalls.py
  92. 0 0
      notrefactored/firewalls/middleware.py
  93. 0 0
      notrefactored/forms/__init__.py
  94. 0 0
      notrefactored/forms/layouts.py
  95. 0 0
      notrefactored/forumroles/__init__.py
  96. 0 0
      notrefactored/forumroles/fixtures.py
  97. 0 0
      notrefactored/forumroles/forms.py
  98. 0 0
      notrefactored/forumroles/migrations/0001_initial.py
  99. 0 0
      notrefactored/forumroles/migrations/__init__.py
  100. 0 0
      notrefactored/forumroles/models.py
  101. 0 0
      notrefactored/forumroles/views.py
  102. 0 0
      notrefactored/forums/__init__.py
  103. 0 0
      notrefactored/forums/acl.py
  104. 0 0
      notrefactored/forums/fixtures.py
  105. 0 0
      notrefactored/forums/forms.py
  106. 0 0
      notrefactored/forums/management/__init__.py
  107. 0 0
      notrefactored/forums/management/commands/__init__.py
  108. 0 0
      notrefactored/forums/management/commands/syncdeltas.py
  109. 0 0
      notrefactored/forums/migrations/0001_initial.py
  110. 0 0
      notrefactored/forums/migrations/__init__.py
  111. 0 0
      notrefactored/forums/models.py
  112. 0 0
      notrefactored/forums/signals.py
  113. 0 0
      notrefactored/forums/views.py
  114. 0 0
      notrefactored/heartbeat/__init__.py
  115. 8 0
      notrefactored/heartbeat/middleware.py
  116. 0 0
      notrefactored/markdown/__init__.py
  117. 0 0
      notrefactored/markdown/extensions/__init__.py
  118. 0 0
      notrefactored/markdown/extensions/magiclinks.py
  119. 0 0
      notrefactored/markdown/extensions/mentions.py
  120. 0 0
      notrefactored/markdown/extensions/quotes.py
  121. 0 0
      notrefactored/markdown/factory.py
  122. 0 0
      notrefactored/messages/__init__.py
  123. 0 0
      notrefactored/messages/context_processors.py
  124. 0 0
      notrefactored/messages/middleware.py
  125. 0 0
      notrefactored/monitor/__init__.py
  126. 0 0
      notrefactored/monitor/context_processors.py
  127. 0 0
      notrefactored/monitor/fixtures.py
  128. 0 0
      notrefactored/monitor/middleware.py
  129. 0 0
      notrefactored/monitor/migrations/0001_initial.py
  130. 0 0
      notrefactored/monitor/migrations/__init__.py
  131. 0 0
      notrefactored/monitor/models.py
  132. 0 0
      notrefactored/monitor/monitor.py
  133. 0 0
      notrefactored/newsfeed/__init__.py
  134. 0 0
      notrefactored/newsfeed/views.py
  135. 0 0
      notrefactored/newsletters/__init__.py
  136. 0 0
      notrefactored/newsletters/forms.py
  137. 0 0
      notrefactored/newsletters/migrations/0001_initial.py
  138. 0 0
      notrefactored/newsletters/migrations/__init__.py
  139. 0 0
      notrefactored/newsletters/models.py
  140. 0 0
      notrefactored/newsletters/views.py
  141. 0 0
      notrefactored/profiles/__init__.py
  142. 0 0
      notrefactored/profiles/decorators.py
  143. 0 0
      notrefactored/profiles/details/__init__.py
  144. 0 0
      notrefactored/profiles/details/profile.py
  145. 0 0
      notrefactored/profiles/details/urls.py
  146. 0 0
      notrefactored/profiles/details/views.py
  147. 0 0
      notrefactored/profiles/followers/__init__.py
  148. 0 0
      notrefactored/profiles/followers/profile.py
  149. 0 0
      notrefactored/profiles/followers/urls.py
  150. 0 0
      notrefactored/profiles/followers/views.py
  151. 0 0
      notrefactored/profiles/follows/__init__.py
  152. 0 0
      notrefactored/profiles/follows/profile.py
  153. 0 0
      notrefactored/profiles/follows/urls.py
  154. 0 0
      notrefactored/profiles/follows/views.py
  155. 0 0
      notrefactored/profiles/forms.py
  156. 0 0
      notrefactored/profiles/posts/__init__.py
  157. 0 0
      notrefactored/profiles/posts/profile.py
  158. 0 0
      notrefactored/profiles/posts/urls.py
  159. 0 0
      notrefactored/profiles/posts/views.py
  160. 0 0
      notrefactored/profiles/template.py
  161. 0 0
      notrefactored/profiles/threads/__init__.py
  162. 0 0
      notrefactored/profiles/threads/profile.py
  163. 0 0
      notrefactored/profiles/threads/urls.py
  164. 0 0
      notrefactored/profiles/threads/views.py
  165. 0 0
      notrefactored/profiles/urls.py
  166. 0 0
      notrefactored/profiles/views.py
  167. 0 0
      notrefactored/prune/__init__.py
  168. 0 0
      notrefactored/prune/forms.py
  169. 0 0
      notrefactored/prune/migrations/0001_initial.py
  170. 0 0
      notrefactored/prune/migrations/__init__.py
  171. 0 0
      notrefactored/prune/models.py
  172. 0 0
      notrefactored/prune/views.py
  173. 0 0
      notrefactored/ranks/__init__.py
  174. 0 0
      notrefactored/ranks/fixtures.py
  175. 0 0
      notrefactored/ranks/forms.py
  176. 0 0
      notrefactored/ranks/management/__init__.py
  177. 0 0
      notrefactored/ranks/management/commands/__init__.py
  178. 0 0
      notrefactored/ranks/management/commands/updateranking.py
  179. 0 0
      notrefactored/ranks/migrations/0001_initial.py
  180. 0 0
      notrefactored/ranks/migrations/__init__.py
  181. 0 0
      notrefactored/ranks/models.py
  182. 0 0
      notrefactored/ranks/views.py
  183. 0 0
      notrefactored/readstracker/__init__.py
  184. 0 0
      notrefactored/readstracker/management/__init__.py
  185. 0 0
      notrefactored/readstracker/management/commands/__init__.py
  186. 0 0
      notrefactored/readstracker/management/commands/cleartracker.py
  187. 0 0
      notrefactored/readstracker/migrations/0001_initial.py
  188. 0 0
      notrefactored/readstracker/migrations/0002_auto__add_threadrecord__del_field_record_threads.py
  189. 0 0
      notrefactored/readstracker/migrations/0003_auto__del_record__add_forumrecord.py
  190. 0 0
      notrefactored/readstracker/migrations/__init__.py
  191. 0 0
      notrefactored/readstracker/models.py
  192. 0 0
      notrefactored/readstracker/trackers.py
  193. 0 0
      notrefactored/register/__init__.py
  194. 0 0
      notrefactored/register/fixtures.py
  195. 0 0
      notrefactored/register/forms.py
  196. 0 0
      notrefactored/register/urls.py
  197. 0 0
      notrefactored/register/views.py
  198. 0 0
      notrefactored/resetpswd/__init__.py
  199. 0 0
      notrefactored/resetpswd/forms.py
  200. 0 0
      notrefactored/resetpswd/urls.py
  201. 0 0
      notrefactored/resetpswd/views.py
  202. 0 0
      notrefactored/roles/__init__.py
  203. 0 0
      notrefactored/roles/fixtures.py
  204. 0 0
      notrefactored/roles/forms.py
  205. 0 0
      notrefactored/roles/migrations/0001_initial.py
  206. 0 0
      notrefactored/roles/migrations/__init__.py
  207. 0 0
      notrefactored/roles/models.py
  208. 0 0
      notrefactored/roles/views.py
  209. 0 0
      notrefactored/search/__init__.py
  210. 0 0
      notrefactored/sessions/__init__.py
  211. 0 0
      notrefactored/sessions/forms.py
  212. 0 0
      notrefactored/sessions/management/__init__.py
  213. 0 0
      notrefactored/sessions/management/commands/__init__.py
  214. 0 0
      notrefactored/sessions/management/commands/clearsessions.py
  215. 0 0
      notrefactored/sessions/management/commands/cleartokens.py
  216. 0 0
      notrefactored/sessions/middleware.py
  217. 0 0
      notrefactored/sessions/migrations/0001_initial.py
  218. 0 0
      notrefactored/sessions/migrations/__init__.py
  219. 0 0
      notrefactored/sessions/models.py
  220. 0 0
      notrefactored/sessions/sessions.py
  221. 0 0
      notrefactored/sessions/views.py
  222. 0 0
      notrefactored/settings/__init__.py
  223. 0 0
      notrefactored/settings/context_processors.py
  224. 0 0
      notrefactored/settings/fixtures.py
  225. 0 0
      notrefactored/settings/forms.py
  226. 0 0
      notrefactored/settings/middleware.py
  227. 0 0
      notrefactored/settings/migrations/0001_initial.py
  228. 0 0
      notrefactored/settings/migrations/__init__.py
  229. 0 0
      notrefactored/settings/models.py
  230. 0 0
      notrefactored/settings/settings.py
  231. 0 0
      notrefactored/settings/views.py
  232. 0 0
      notrefactored/setup/__init__.py
  233. 0 0
      notrefactored/setup/fixtures.py
  234. 0 0
      notrefactored/setup/management/__init__.py
  235. 0 0
      notrefactored/setup/management/commands/__init__.py
  236. 0 0
      notrefactored/setup/management/commands/about.py
  237. 0 0
      notrefactored/setup/management/commands/initdata.py
  238. 0 0
      notrefactored/setup/management/commands/initmisago.py
  239. 0 0
      notrefactored/setup/management/commands/updmisago.py
  240. 0 0
      notrefactored/setup/migrations/0001_initial.py
  241. 0 0
      notrefactored/setup/migrations/__init__.py
  242. 0 0
      notrefactored/setup/models.py
  243. 0 0
      notrefactored/stats/__init__.py
  244. 0 0
      notrefactored/stats/forms.py
  245. 0 0
      notrefactored/stats/views.py
  246. 0 0
      notrefactored/stopwatch/__init__.py
  247. 0 0
      notrefactored/stopwatch/middleware.py
  248. 0 0
      notrefactored/team/__init__.py
  249. 0 0
      notrefactored/team/views.py
  250. 0 0
      notrefactored/template/__init__.py
  251. 0 0
      notrefactored/template/templatetags/__init__.py
  252. 0 0
      notrefactored/template/templatetags/django2jinja.py
  253. 0 0
      notrefactored/themes/__init__.py
  254. 0 0
      notrefactored/themes/forms.py
  255. 0 0
      notrefactored/themes/middleware.py
  256. 0 0
      notrefactored/themes/migrations/0001_initial.py
  257. 0 0
      notrefactored/themes/migrations/__init__.py
  258. 0 0
      notrefactored/themes/models.py
  259. 0 0
      notrefactored/themes/theme.py
  260. 0 0
      notrefactored/themes/views.py
  261. 0 0
      notrefactored/threads/__init__.py
  262. 0 0
      notrefactored/threads/acl.py
  263. 0 0
      notrefactored/threads/fixtures.py
  264. 0 0
      notrefactored/threads/forms.py
  265. 0 0
      notrefactored/threads/management/__init__.py
  266. 0 0
      notrefactored/threads/management/commands/__init__.py
  267. 0 0
      notrefactored/threads/management/commands/updatethreadranking.py
  268. 0 0
      notrefactored/threads/migrations/0001_initial.py
  269. 0 0
      notrefactored/threads/migrations/__init__.py
  270. 0 0
      notrefactored/threads/models.py
  271. 0 0
      notrefactored/threads/signals.py
  272. 0 0
      notrefactored/threads/tests.py
  273. 0 0
      notrefactored/threads/testutils.py
  274. 0 0
      notrefactored/threads/urls.py
  275. 0 0
      notrefactored/threads/views/__init__.py
  276. 0 0
      notrefactored/threads/views/base.py
  277. 0 0
      notrefactored/threads/views/changelog.py
  278. 0 0
      notrefactored/threads/views/delete.py
  279. 0 0
      notrefactored/threads/views/details.py
  280. 0 0
      notrefactored/threads/views/jumps.py
  281. 0 0
      notrefactored/threads/views/karmas.py
  282. 0 0
      notrefactored/threads/views/list.py
  283. 0 0
      notrefactored/threads/views/posting.py
  284. 0 0
      notrefactored/threads/views/thread.py
  285. 0 0
      notrefactored/timezones/__init__.py
  286. 0 0
      notrefactored/tos/__init__.py
  287. 0 0
      notrefactored/tos/fixtures.py
  288. 0 0
      notrefactored/tos/views.py
  289. 0 0
      notrefactored/usercp/__init__.py
  290. 0 0
      notrefactored/usercp/acl.py
  291. 0 0
      notrefactored/usercp/avatar/__init__.py
  292. 0 0
      notrefactored/usercp/avatar/forms.py
  293. 0 0
      notrefactored/usercp/avatar/urls.py
  294. 0 0
      notrefactored/usercp/avatar/usercp.py
  295. 0 0
      notrefactored/usercp/avatar/views.py
  296. 0 0
      notrefactored/usercp/credentials/__init__.py
  297. 0 0
      notrefactored/usercp/credentials/forms.py
  298. 0 0
      notrefactored/usercp/credentials/urls.py
  299. 0 0
      notrefactored/usercp/credentials/usercp.py
  300. 0 0
      notrefactored/usercp/credentials/views.py
  301. 0 0
      notrefactored/usercp/fixtures.py
  302. 0 0
      notrefactored/usercp/migrations/0001_initial.py
  303. 0 0
      notrefactored/usercp/migrations/__init__.py
  304. 0 0
      notrefactored/usercp/models.py
  305. 0 0
      notrefactored/usercp/options/__init__.py
  306. 0 0
      notrefactored/usercp/options/forms.py
  307. 0 0
      notrefactored/usercp/options/urls.py
  308. 0 0
      notrefactored/usercp/options/usercp.py
  309. 0 0
      notrefactored/usercp/options/views.py
  310. 0 0
      notrefactored/usercp/signature/__init__.py
  311. 0 0
      notrefactored/usercp/signature/forms.py
  312. 0 0
      notrefactored/usercp/signature/urls.py
  313. 0 0
      notrefactored/usercp/signature/usercp.py
  314. 0 0
      notrefactored/usercp/signature/views.py
  315. 0 0
      notrefactored/usercp/template.py
  316. 0 0
      notrefactored/usercp/urls.py
  317. 0 0
      notrefactored/usercp/username/__init__.py
  318. 0 0
      notrefactored/usercp/username/forms.py
  319. 0 0
      notrefactored/usercp/username/urls.py
  320. 0 0
      notrefactored/usercp/username/usercp.py
  321. 0 0
      notrefactored/usercp/username/views.py
  322. 0 0
      notrefactored/usercp/views.py
  323. 0 0
      notrefactored/users/__init__.py
  324. 0 0
      notrefactored/users/acl.py
  325. 0 0
      notrefactored/users/context_processors.py
  326. 0 0
      notrefactored/users/fixtures.py
  327. 0 0
      notrefactored/users/forms.py
  328. 0 0
      notrefactored/users/management/__init__.py
  329. 0 0
      notrefactored/users/management/commands/__init__.py
  330. 0 0
      notrefactored/users/management/commands/adduser.py
  331. 0 0
      notrefactored/users/management/commands/genavatars.py
  332. 0 0
      notrefactored/users/management/commands/syncusermonitor.py
  333. 0 0
      notrefactored/users/middleware.py
  334. 0 0
      notrefactored/users/migrations/0001_initial.py
  335. 0 0
      notrefactored/users/migrations/__init__.py
  336. 0 0
      notrefactored/users/models.py
  337. 0 0
      notrefactored/users/signals.py
  338. 0 0
      notrefactored/users/validators.py
  339. 0 0
      notrefactored/users/views.py
  340. 0 0
      notrefactored/utils/__init__.py
  341. 0 0
      notrefactored/utils/avatars.py
  342. 0 0
      notrefactored/utils/slugify.py
  343. 0 0
      notrefactored/utils/validators.py
  344. 0 0
      notrefactored/views.py
  345. 0 0
      notrefactored/watcher/__init__.py
  346. 0 0
      notrefactored/watcher/migrations/0001_initial.py
  347. 0 0
      notrefactored/watcher/migrations/__init__.py
  348. 0 0
      notrefactored/watcher/models.py
  349. 0 0
      notrefactored/watcher/urls.py
  350. 0 0
      notrefactored/watcher/views.py
  351. 9 10
      refactoring.md

+ 91 - 0
misago/acl/builder.py

@@ -0,0 +1,91 @@
+from django.conf import settings
+from django.core.cache import cache, InvalidCacheBackendError
+from django.utils.importlib import import_module
+from misago.forms import Form
+from misago.models import Forum, ForumRole
+
+def build_form(request, role):
+    form_type = type('ACLForm', (Form,), dict(layout=[]))
+    for provider in settings.PERMISSION_PROVIDERS:
+        app_module = import_module(provider)
+        try:
+            app_module.make_form(request, role, form_type)
+        except AttributeError:
+            pass
+    return form_type
+
+
+def build_forum_form(request, role):
+    form_type = type('ACLForm', (Form,), dict(layout=[]))
+    for provider in settings.PERMISSION_PROVIDERS:
+        app_module = import_module(provider)
+        try:
+            app_module.make_forum_form(request, role, form_type)
+        except AttributeError:
+            pass
+    return form_type
+
+
+class BaseACL(object):
+    def __init__(self):
+        self.acl = {}
+
+    def __repr__(self):
+        return '%s (%s)' % (self.__class__.__name__[0:-3],
+                            self.__class__.__module__)
+
+
+class ACL(object):
+    def __init__(self, version):
+        self.version = version
+        self.team = False
+
+    def __iter__(self):
+        for attr in dir(self):
+            if not attr.startswith("__") and attr not in ['team', 'version']:
+                yield self.__dict__[attr]
+
+
+def acl(request, user):
+    acl_key = user.make_acl_key()
+    try:
+        user_acl = cache.get(acl_key)
+        if user_acl.version != request.monitor['acl_version']:
+            raise InvalidCacheBackendError()
+    except (AttributeError, InvalidCacheBackendError):
+        user_acl = build_acl(request, request.user.get_roles())
+        cache.set(acl_key, user_acl, 2592000)
+    return user_acl
+
+
+def build_acl(request, roles):
+    acl = ACL(request.monitor['acl_version'])
+    forums = Forum.objects.get(token='root').get_descendants().order_by('lft')
+    perms = []
+    forum_roles = {}
+
+    for role in roles:
+        perms.append(role.get_permissions())
+
+    for role in ForumRole.objects.all():
+        forum_roles[role.pk] = role.get_permissions()
+
+    for provider in settings.PERMISSION_PROVIDERS:
+        app_module = import_module(provider)
+        try:
+            app_module.build(acl, perms)
+        except AttributeError:
+            pass
+        try:
+            app_module.build_forums(acl, perms, forums, forum_roles)
+        except AttributeError:
+            pass
+
+    for provider in settings.PERMISSION_PROVIDERS:
+        app_module = import_module(provider)
+        try:
+            app_module.cleanup(acl, perms, forums)
+        except AttributeError:
+            pass
+
+    return acl

+ 12 - 0
misago/acl/decorators.py

@@ -0,0 +1,12 @@
+from misago.acl.exceptions import ACLError403, ACLError404
+from misago.shared.views import error403, error404
+
+def acl_errors(f):
+    def decorator(*args, **kwargs):
+        try:
+            return f(*args, **kwargs)
+        except ACLError403 as e:
+            return error403(args[0], e.message)
+        except ACLError404 as e:
+            return error404(args[0], e.message)
+    return decorator

+ 9 - 0
misago/acl/exceptions.py

@@ -0,0 +1,9 @@
+"""
+ACL Exceptions thrown by Misago actions
+"""
+
+class ACLError403(Exception):
+    pass
+
+class ACLError404(Exception):
+    pass

+ 0 - 0
misago/notrefactored/acl/panels.py → misago/acl/panels.py


+ 13 - 0
misago/middleware/acl.py

@@ -0,0 +1,13 @@
+from misago.acl.builder import acl
+
+class ACLMiddleware(object):
+    def process_request(self, request):
+        request.acl = acl(request, request.user)
+        
+        if (request.user.is_authenticated() and
+            (request.acl.team or request.user.is_god()) != request.user.is_team):
+            request.user.is_team = (request.acl.team or request.user.is_god())
+            request.user.save(force_update=True)
+        if request.session.team != request.user.is_team:
+            request.session.team = request.user.is_team
+            request.session.save()

+ 18 - 0
misago/middleware/banning.py

@@ -0,0 +1,18 @@
+from misago.models import BanCache, Guest
+
+class BanningMiddleware(object):
+    def process_request(self, request):
+        if request.heartbeat or request.user.is_crawler():
+            return None
+            
+        try:
+            request.ban = request.session['ban']
+        except KeyError:
+            request.ban = BanCache()
+            request.session['ban'] = request.ban
+
+        if not request.firewall.admin:
+            request.ban.check_for_updates(request)
+            # Make sure banned session is downgraded to guest level
+            if request.ban.is_banned():
+                request.session.sign_out(request)

+ 0 - 0
misago/notrefactored/heartbeat/middleware.py → misago/middleware/heartbeat.py


+ 1 - 1
misago/models/__init__.py

@@ -1,5 +1,5 @@
 from misago.models.alertmodel import Alert
-from misago.models.banmodel import Ban
+from misago.models.banmodel import Ban, BanCache
 from misago.models.changemodel import Change
 from misago.models.checkpointmodel import Checkpoint
 from misago.models.fixturemodel import Fixture

+ 68 - 1
misago/models/banmodel.py

@@ -5,6 +5,32 @@ BAN_NAME = 1
 BAN_EMAIL = 2
 BAN_IP = 3
 
+class BansManager(models.Manager):
+    def check_ban(ip=False, username=False, email=False):
+        bans_model = Ban.objects.filter(Q(expires=None) | Q(expires__gt=timezone.now()))
+        if not (ip and username and email):
+            if ip:
+                bans_model.filter(test=BAN_IP)
+            if username:
+                bans_model.filter(test=BAN_NAME_EMAIL)
+                bans_model.filter(test=BAN_NAME)
+            if email:
+                bans_model.filter(test=BAN_NAME_EMAIL)
+                bans_model.filter(test=BAN_EMAIL)
+        for ban in bans_model.order_by('-expires').iterator():
+            if (
+                # Check user name
+                ((username and (ban.test == BAN_NAME_EMAIL or ban.test == BAN_NAME))
+                and re.search('^' + re.escape(ban.ban).replace('\*', '(.*?)') + '$', username, flags=re.IGNORECASE))
+                or # Check user email
+                ((email and (ban.test == BAN_NAME_EMAIL or ban.test == BAN_EMAIL))
+                and re.search('^' + re.escape(ban.ban).replace('\*', '(.*?)') + '$', email, flags=re.IGNORECASE))
+                or # Check IP address
+                (ip and ban.test == BAN_IP
+                and re.search('^' + re.escape(ban.ban).replace('\*', '(.*?)') + '$', ip, flags=re.IGNORECASE))):
+                    return ban
+        return False
+
 
 class Ban(models.Model):
     test = models.PositiveIntegerField(default=BAN_NAME_EMAIL)
@@ -14,4 +40,45 @@ class Ban(models.Model):
     expires = models.DateTimeField(null=True, blank=True)
 
     class Meta:
-        app_label = 'misago'
+        app_label = 'misago'
+
+
+class BanCache(object):
+    def __init__(self):
+        self.banned = False
+        self.test = None
+        self.expires = None
+        self.reason_user = None
+        self.version = 0
+
+    def check_for_updates(self, request):
+        if (self.version < request.monitor['bans_version']
+            or (self.expires != None and self.expires < timezone.now())):
+            self.version = request.monitor['bans_version']
+
+            # Check Ban
+            if request.user.is_authenticated():
+                ban = check_ban(
+                                ip=request.session.get_ip(request),
+                                username=request.user.username,
+                                email=request.user.email
+                                )
+            else:
+                ban = check_ban(ip=request.session.get_ip(request))
+
+            # Update ban cache
+            if ban:
+                self.banned = True
+                self.reason_user = ban.reason_user
+                self.expires = ban.expires
+                self.test = ban.test
+            else:
+                self.banned = False
+                self.reason_user = None
+                self.expires = None
+                self.test = None
+            return True
+        return False
+
+    def is_banned(self):
+        return self.banned

+ 2 - 2
misago/models/postmodel.py

@@ -72,7 +72,7 @@ class Post(models.Model):
                                        )
             
     def notify_mentioned(self, request, users):
-        from misago.acl.builder import get_acl
+        from misago.acl.builder import acl
         from misago.acl.utils import ACLError403, ACLError404
         
         mentioned = self.mentions.all()
@@ -80,7 +80,7 @@ class Post(models.Model):
             if user.pk != request.user.pk and user not in mentioned:
                 self.mentions.add(user)
                 try:                    
-                    acl = get_acl(request, user)
+                    acl = acl(request, user)
                     acl.forums.allow_forum_view(self.forum)
                     acl.threads.allow_thread_view(user, self.thread)
                     acl.threads.allow_post_view(user, self.thread, self)

+ 2 - 2
misago/models/threadmodel.py

@@ -128,7 +128,7 @@ class Thread(models.Model):
         self.merges = last_post.merge
         
     def email_watchers(self, request, post):
-        from misago.acl.builder import get_acl
+        from misago.acl.builder import acl
         from misago.acl.utils import ACLError403, ACLError404
         from misago.models import ThreadRead
 
@@ -136,7 +136,7 @@ class Thread(models.Model):
             user = watch.user
             if user.pk != request.user.pk:
                 try:
-                    acl = get_acl(request, user)
+                    acl = acl(request, user)
                     acl.forums.allow_forum_view(self.forum)
                     acl.threads.allow_thread_view(user, self)
                     acl.threads.allow_post_view(user, self, post)

+ 3 - 3
misago/models/usermodel.py

@@ -13,12 +13,12 @@ from django.template import RequestContext
 from django.utils import timezone as tz_util
 from django.utils.translation import ugettext_lazy as _
 from misago.acl.builder import build_acl
-from misago.monitor.monitor import Monitor
+from misago.monitor import Monitor
 from misago.dbsettings import DBSettings
 from misago.signals import delete_user_content, rename_user
-from misago.users.validators import validate_username, validate_password, validate_email
 from misago.utils.strings import random_string, slugify
 from misago.utils.avatars import avatar_size
+from misago.validators import validate_username, validate_password, validate_email
 
 class UserManager(models.Manager):
     """
@@ -412,7 +412,7 @@ class User(models.Model):
         self.acl_key = 'acl_%s' % hashlib.md5('_'.join(roles_ids)).hexdigest()[0:8]
         return self.acl_key
 
-    def get_acl(self, request):
+    def acl(self, request):
         try:
             acl = cache.get(self.acl_key)
             if acl.version != request.monitor.acl_version:

+ 2 - 2
misago/settings_base.py

@@ -96,7 +96,7 @@ JINJA2_EXTENSIONS = (
 MIDDLEWARE_CLASSES = (
     'misago.stopwatch.middleware.StopwatchMiddleware',
     'debug_toolbar.middleware.DebugToolbarMiddleware',
-    #'misago.heartbeat.middleware.HeartbeatMiddleware',
+    'misago.heartbeat.middleware.HeartbeatMiddleware',
     'misago.middleware.cookiejar.CookieJarMiddleware',
     'misago.middleware.settings.SettingsMiddleware',
     'misago.middleware.monitor.MonitorMiddleware',
@@ -106,7 +106,7 @@ MIDDLEWARE_CLASSES = (
     'misago.middleware.session.SessionMiddleware',
     #'misago.bruteforce.middleware.JamMiddleware',
     #'misago.csrf.middleware.CSRFMiddleware',
-    #'misago.banning.middleware.BanningMiddleware',
+    'misago.middleware.banning.BanningMiddleware',
     #'misago.messages.middleware.MessagesMiddleware',
     #'misago.users.middleware.UserMiddleware',
     #'misago.acl.middleware.ACLMiddleware',

+ 33 - 0
misago/shared/views.py

@@ -0,0 +1,33 @@
+from django.core.urlresolvers import reverse
+from django.shortcuts import redirect
+from django.template import RequestContext
+
+def redirect_message(request, message, type='info', owner=None):
+    """
+    Set flash message and redirect to board index.
+    """
+    request.messages.set_flash(message, type, owner)
+    return redirect(reverse('index'))
+
+
+"""
+Error views
+"""
+def error_view(request, error, message):
+    response = request.theme.render_to_response(('error%s.html' % error),
+                                                {
+                                                 'message': message,
+                                                 'hide_signin': True,
+                                                 'exception_response': True,
+                                                 },
+                                                context_instance=RequestContext(request));
+    response.status_code = error
+    return response
+
+
+def error403(request, message=None):
+    return error_view(request, 403, message)
+
+
+def error404(request, message=None):
+    return error_view(request, 404, message)

+ 80 - 0
misago/validators.py

@@ -0,0 +1,80 @@
+import re
+from django.conf import settings
+from django.core.exceptions import ValidationError
+from django.utils.translation import ungettext, ugettext_lazy as _
+from misago.models import Ban
+from misago.settings import DBSettings
+from django.core.exceptions import ValidationError
+from django.utils.translation import ugettext_lazy as _
+from misago.utils.strings import slugify
+
+class validate_sluggable(object):
+    def __init__(self, error_short=None, error_long=None):
+        self.error_short = error_short if error_short else _("Value has to contain alpha-numerical characters.")
+        self.error_long = error_long if error_long else _("Value is too long.")
+
+    def __call__(self, value):
+        slug = slugify(value)
+        if not slug:
+            raise ValidationError(self.error_short)
+        if len(slug) > 255:
+            raise ValidationError(self.error_long)
+
+
+def validate_username(value, db_settings):
+    value = unicode(value).strip()
+    if len(value) < db_settings['username_length_min']:
+        raise ValidationError(ungettext(
+            'Username must be at least one character long.',
+            'Username must be at least %(count)d characters long.',
+            db_settings['username_length_min']
+        ) % {
+            'count': db_settings['username_length_min'],
+        })
+    if len(value) > db_settings['username_length_max']:
+        raise ValidationError(ungettext(
+            'Username cannot be longer than one characters.',
+            'Username cannot be longer than %(count)d characters.',
+            db_settings['username_length_max']
+        ) % {
+            'count': db_settings['username_length_max'],
+        })
+    if settings.UNICODE_USERNAMES:
+        if not re.search('^[^\W_]+$', value, re.UNICODE):
+            raise ValidationError(_("Username can only contain letters and digits."))
+    else:
+        if not re.search('^[^\W_]+$', value):
+            raise ValidationError(_("Username can only contain latin alphabet letters and digits."))
+    if Ban.objects.check_ban(username=value):
+        raise ValidationError(_("This username is forbidden."))
+
+
+def validate_password(value, db_settings):
+    value = unicode(value).strip()
+    if len(value) < db_settings['password_length']:
+        raise ValidationError(ungettext(
+            'Correct password has to be at least one character long.',
+            'Correct password has to be at least %(count)d characters long.',
+            db_settings['password_length']
+        ) % {
+            'count': db_settings['password_length'],
+        })
+    for test in db_settings['password_complexity']:
+        if test in ('case', 'digits', 'special'):
+            if not re.search('[a-zA-Z]', value):
+                raise ValidationError(_("Password must contain alphabetical characters."))
+            if test == 'case':
+                if not (re.search('[a-z]', value) and re.search('[A-Z]', value)):
+                    raise ValidationError(_("Password must contain characters that have different case."))
+            if test == 'digits':
+                if not re.search('[0-9]', value):
+                    raise ValidationError(_("Password must contain digits in addition to characters."))
+            if test == 'special':
+                if not re.search('[^0-9a-zA-Z]', value):
+                    raise ValidationError(_("Password must contain special (non alphanumerical) characters."))
+
+
+def validate_email(value):
+    value = unicode(value).strip()
+    if Ban.objects.check_ban(email=value):
+        raise ValidationError(_("This board forbids registrations using this e-mail address."))

+ 0 - 0
misago/notrefactored/acl/__init__.py → notrefactored/acl/__init__.py


+ 0 - 0
misago/notrefactored/acl/builder.py → notrefactored/acl/builder.py


+ 0 - 0
misago/notrefactored/acl/context_processors.py → notrefactored/acl/context_processors.py


+ 0 - 0
misago/notrefactored/acl/fixtures.py → notrefactored/acl/fixtures.py


+ 0 - 0
misago/notrefactored/acl/middleware.py → notrefactored/acl/middleware.py


+ 30 - 0
notrefactored/acl/panels.py

@@ -0,0 +1,30 @@
+from debug_toolbar.panels import DebugPanel
+from django.template.loader import render_to_string
+from django.utils.translation import ugettext_lazy as _
+
+class MisagoACLDebugPanel(DebugPanel):
+    name = 'MisagoACL'
+    has_content = True
+
+    def nav_title(self):
+        return _('Misago ACL')
+
+    def title(self):
+        return _('Misago User ACL')
+
+    def url(self):
+        return ''
+
+    def process_request(self, request):
+        self.request = request
+
+    def content(self):
+        if self.request.heartbeat:
+            self.has_content = False
+        else:
+            context = self.context.copy()
+            try:
+                context['acl'] = self.request.acl
+            except AttributeError:
+                context['acl'] = {}
+            return render_to_string('debug_toolbar/panels/acl.html', context)

+ 0 - 0
misago/notrefactored/acl/utils.py → notrefactored/acl/utils.py


+ 0 - 0
misago/notrefactored/activation/__init__.py → notrefactored/activation/__init__.py


+ 0 - 0
misago/notrefactored/activation/forms.py → notrefactored/activation/forms.py


+ 0 - 0
misago/notrefactored/activation/urls.py → notrefactored/activation/urls.py


+ 0 - 0
misago/notrefactored/activation/views.py → notrefactored/activation/views.py


+ 0 - 0
misago/notrefactored/admin/__init__.py → notrefactored/admin/__init__.py


+ 0 - 0
misago/notrefactored/admin/acl.py → notrefactored/admin/acl.py


+ 0 - 0
misago/notrefactored/admin/context_processors.py → notrefactored/admin/context_processors.py


+ 0 - 0
misago/notrefactored/admin/layout/__init__.py → notrefactored/admin/layout/__init__.py


+ 0 - 0
misago/notrefactored/admin/layout/forums.py → notrefactored/admin/layout/forums.py


+ 0 - 0
misago/notrefactored/admin/layout/overview.py → notrefactored/admin/layout/overview.py


+ 0 - 0
misago/notrefactored/admin/layout/perms.py → notrefactored/admin/layout/perms.py


+ 0 - 0
misago/notrefactored/admin/layout/sections.py → notrefactored/admin/layout/sections.py


+ 0 - 0
misago/notrefactored/admin/layout/system.py → notrefactored/admin/layout/system.py


+ 0 - 0
misago/notrefactored/admin/layout/users.py → notrefactored/admin/layout/users.py


+ 0 - 0
misago/notrefactored/admin/views.py → notrefactored/admin/views.py


+ 0 - 0
misago/notrefactored/admin/widgets.py → notrefactored/admin/widgets.py


+ 0 - 0
misago/notrefactored/alerts/__init__.py → notrefactored/alerts/__init__.py


+ 0 - 0
misago/notrefactored/alerts/management/__init__.py → notrefactored/alerts/management/__init__.py


+ 0 - 0
misago/notrefactored/alerts/management/commands/__init__.py → notrefactored/alerts/management/commands/__init__.py


+ 0 - 0
misago/notrefactored/alerts/management/commands/clearalerts.py → notrefactored/alerts/management/commands/clearalerts.py


+ 0 - 0
misago/notrefactored/alerts/migrations/0001_initial.py → notrefactored/alerts/migrations/0001_initial.py


+ 0 - 0
misago/notrefactored/alerts/migrations/__init__.py → notrefactored/alerts/migrations/__init__.py


+ 0 - 0
misago/notrefactored/alerts/models.py → notrefactored/alerts/models.py


+ 0 - 0
misago/notrefactored/alerts/views.py → notrefactored/alerts/views.py


+ 0 - 0
misago/notrefactored/authn/__init__.py → notrefactored/authn/__init__.py


+ 0 - 0
misago/notrefactored/authn/decorators.py → notrefactored/authn/decorators.py


+ 0 - 0
misago/notrefactored/authn/fixtures.py → notrefactored/authn/fixtures.py


+ 0 - 0
misago/notrefactored/authn/forms.py → notrefactored/authn/forms.py


+ 0 - 0
misago/notrefactored/authn/methods.py → notrefactored/authn/methods.py


+ 0 - 0
misago/notrefactored/authn/urls.py → notrefactored/authn/urls.py


+ 0 - 0
misago/notrefactored/authn/views.py → notrefactored/authn/views.py


+ 0 - 0
misago/notrefactored/banning/__init__.py → notrefactored/banning/__init__.py


+ 0 - 0
misago/notrefactored/banning/context_processors.py → notrefactored/banning/context_processors.py


+ 0 - 0
misago/notrefactored/banning/decorators.py → notrefactored/banning/decorators.py


+ 0 - 0
misago/notrefactored/banning/fixtures.py → notrefactored/banning/fixtures.py


+ 0 - 0
misago/notrefactored/banning/forms.py → notrefactored/banning/forms.py


+ 0 - 0
misago/notrefactored/banning/middleware.py → notrefactored/banning/middleware.py


+ 0 - 0
misago/notrefactored/banning/migrations/0001_initial.py → notrefactored/banning/migrations/0001_initial.py


+ 0 - 0
misago/notrefactored/banning/migrations/__init__.py → notrefactored/banning/migrations/__init__.py


+ 0 - 0
misago/notrefactored/banning/models.py → notrefactored/banning/models.py


+ 0 - 0
misago/notrefactored/banning/views.py → notrefactored/banning/views.py


+ 0 - 0
misago/notrefactored/bruteforce/__init__.py → notrefactored/bruteforce/__init__.py


+ 0 - 0
misago/notrefactored/bruteforce/context_processors.py → notrefactored/bruteforce/context_processors.py


+ 0 - 0
misago/notrefactored/bruteforce/decorators.py → notrefactored/bruteforce/decorators.py


+ 0 - 0
misago/notrefactored/bruteforce/fixtures.py → notrefactored/bruteforce/fixtures.py


+ 0 - 0
misago/notrefactored/bruteforce/management/__init__.py → notrefactored/bruteforce/management/__init__.py


+ 0 - 0
misago/notrefactored/bruteforce/management/commands/__init__.py → notrefactored/bruteforce/management/commands/__init__.py


+ 0 - 0
misago/notrefactored/bruteforce/management/commands/clearattempts.py → notrefactored/bruteforce/management/commands/clearattempts.py


+ 0 - 0
misago/notrefactored/bruteforce/middleware.py → notrefactored/bruteforce/middleware.py


+ 0 - 0
misago/notrefactored/bruteforce/migrations/0001_initial.py → notrefactored/bruteforce/migrations/0001_initial.py


+ 0 - 0
misago/notrefactored/bruteforce/migrations/__init__.py → notrefactored/bruteforce/migrations/__init__.py


+ 0 - 0
misago/notrefactored/bruteforce/models.py → notrefactored/bruteforce/models.py


+ 0 - 0
misago/notrefactored/captcha/__init__.py → notrefactored/captcha/__init__.py


+ 0 - 0
misago/notrefactored/captcha/fixtures.py → notrefactored/captcha/fixtures.py


+ 0 - 0
misago/notrefactored/context_processors.py → notrefactored/context_processors.py


+ 0 - 0
misago/notrefactored/cookie_jar/__init__.py → notrefactored/cookie_jar/__init__.py


+ 0 - 0
misago/notrefactored/cookie_jar/cookie_jar.py → notrefactored/cookie_jar/cookie_jar.py


+ 0 - 0
misago/notrefactored/cookie_jar/middleware.py → notrefactored/cookie_jar/middleware.py


+ 0 - 0
misago/notrefactored/crawlers/__init__.py → notrefactored/crawlers/__init__.py


+ 0 - 0
misago/notrefactored/crawlers/crawler.py → notrefactored/crawlers/crawler.py


+ 0 - 0
misago/notrefactored/crawlers/database.py → notrefactored/crawlers/database.py


+ 0 - 0
misago/notrefactored/crawlers/decorators.py → notrefactored/crawlers/decorators.py


+ 0 - 0
misago/notrefactored/crawlers/middleware.py → notrefactored/crawlers/middleware.py


+ 0 - 0
misago/notrefactored/csrf/__init__.py → notrefactored/csrf/__init__.py


+ 0 - 0
misago/notrefactored/csrf/context_processors.py → notrefactored/csrf/context_processors.py


+ 0 - 0
misago/notrefactored/csrf/decorators.py → notrefactored/csrf/decorators.py


+ 0 - 0
misago/notrefactored/csrf/middleware.py → notrefactored/csrf/middleware.py


+ 0 - 0
misago/notrefactored/firewalls/__init__.py → notrefactored/firewalls/__init__.py


+ 0 - 0
misago/notrefactored/firewalls/firewalls.py → notrefactored/firewalls/firewalls.py


+ 0 - 0
misago/notrefactored/firewalls/middleware.py → notrefactored/firewalls/middleware.py


+ 0 - 0
misago/notrefactored/forms/__init__.py → notrefactored/forms/__init__.py


+ 0 - 0
misago/notrefactored/forms/layouts.py → notrefactored/forms/layouts.py


+ 0 - 0
misago/notrefactored/forumroles/__init__.py → notrefactored/forumroles/__init__.py


+ 0 - 0
misago/notrefactored/forumroles/fixtures.py → notrefactored/forumroles/fixtures.py


+ 0 - 0
misago/notrefactored/forumroles/forms.py → notrefactored/forumroles/forms.py


+ 0 - 0
misago/notrefactored/forumroles/migrations/0001_initial.py → notrefactored/forumroles/migrations/0001_initial.py


+ 0 - 0
misago/notrefactored/forumroles/migrations/__init__.py → notrefactored/forumroles/migrations/__init__.py


+ 0 - 0
misago/notrefactored/forumroles/models.py → notrefactored/forumroles/models.py


+ 0 - 0
misago/notrefactored/forumroles/views.py → notrefactored/forumroles/views.py


+ 0 - 0
misago/notrefactored/forums/__init__.py → notrefactored/forums/__init__.py


+ 0 - 0
misago/notrefactored/forums/acl.py → notrefactored/forums/acl.py


+ 0 - 0
misago/notrefactored/forums/fixtures.py → notrefactored/forums/fixtures.py


+ 0 - 0
misago/notrefactored/forums/forms.py → notrefactored/forums/forms.py


+ 0 - 0
misago/notrefactored/forums/management/__init__.py → notrefactored/forums/management/__init__.py


+ 0 - 0
misago/notrefactored/forums/management/commands/__init__.py → notrefactored/forums/management/commands/__init__.py


+ 0 - 0
misago/notrefactored/forums/management/commands/syncdeltas.py → notrefactored/forums/management/commands/syncdeltas.py


+ 0 - 0
misago/notrefactored/forums/migrations/0001_initial.py → notrefactored/forums/migrations/0001_initial.py


+ 0 - 0
misago/notrefactored/forums/migrations/__init__.py → notrefactored/forums/migrations/__init__.py


+ 0 - 0
misago/notrefactored/forums/models.py → notrefactored/forums/models.py


+ 0 - 0
misago/notrefactored/forums/signals.py → notrefactored/forums/signals.py


+ 0 - 0
misago/notrefactored/forums/views.py → notrefactored/forums/views.py


+ 0 - 0
misago/notrefactored/heartbeat/__init__.py → notrefactored/heartbeat/__init__.py


+ 8 - 0
notrefactored/heartbeat/middleware.py

@@ -0,0 +1,8 @@
+from django.conf import settings
+from django.http import HttpResponse
+
+class HeartbeatMiddleware(object):
+    def process_request(self, request):
+        request.heartbeat = settings.HEARTBEAT_PATH and settings.HEARTBEAT_PATH == request.path
+        if request.heartbeat:
+            return HttpResponse('BATTLECRUISER OPERATIONAL')

+ 0 - 0
misago/notrefactored/markdown/__init__.py → notrefactored/markdown/__init__.py


+ 0 - 0
misago/notrefactored/markdown/extensions/__init__.py → notrefactored/markdown/extensions/__init__.py


+ 0 - 0
misago/notrefactored/markdown/extensions/magiclinks.py → notrefactored/markdown/extensions/magiclinks.py


+ 0 - 0
misago/notrefactored/markdown/extensions/mentions.py → notrefactored/markdown/extensions/mentions.py


+ 0 - 0
misago/notrefactored/markdown/extensions/quotes.py → notrefactored/markdown/extensions/quotes.py


+ 0 - 0
misago/notrefactored/markdown/factory.py → notrefactored/markdown/factory.py


+ 0 - 0
misago/notrefactored/messages/__init__.py → notrefactored/messages/__init__.py


+ 0 - 0
misago/notrefactored/messages/context_processors.py → notrefactored/messages/context_processors.py


+ 0 - 0
misago/notrefactored/messages/middleware.py → notrefactored/messages/middleware.py


+ 0 - 0
misago/notrefactored/monitor/__init__.py → notrefactored/monitor/__init__.py


+ 0 - 0
misago/notrefactored/monitor/context_processors.py → notrefactored/monitor/context_processors.py


+ 0 - 0
misago/notrefactored/monitor/fixtures.py → notrefactored/monitor/fixtures.py


+ 0 - 0
misago/notrefactored/monitor/middleware.py → notrefactored/monitor/middleware.py


+ 0 - 0
misago/notrefactored/monitor/migrations/0001_initial.py → notrefactored/monitor/migrations/0001_initial.py


+ 0 - 0
misago/notrefactored/monitor/migrations/__init__.py → notrefactored/monitor/migrations/__init__.py


+ 0 - 0
misago/notrefactored/monitor/models.py → notrefactored/monitor/models.py


+ 0 - 0
misago/notrefactored/monitor/monitor.py → notrefactored/monitor/monitor.py


+ 0 - 0
misago/notrefactored/newsfeed/__init__.py → notrefactored/newsfeed/__init__.py


+ 0 - 0
misago/notrefactored/newsfeed/views.py → notrefactored/newsfeed/views.py


+ 0 - 0
misago/notrefactored/newsletters/__init__.py → notrefactored/newsletters/__init__.py


+ 0 - 0
misago/notrefactored/newsletters/forms.py → notrefactored/newsletters/forms.py


+ 0 - 0
misago/notrefactored/newsletters/migrations/0001_initial.py → notrefactored/newsletters/migrations/0001_initial.py


+ 0 - 0
misago/notrefactored/newsletters/migrations/__init__.py → notrefactored/newsletters/migrations/__init__.py


+ 0 - 0
misago/notrefactored/newsletters/models.py → notrefactored/newsletters/models.py


+ 0 - 0
misago/notrefactored/newsletters/views.py → notrefactored/newsletters/views.py


+ 0 - 0
misago/notrefactored/profiles/__init__.py → notrefactored/profiles/__init__.py


+ 0 - 0
misago/notrefactored/profiles/decorators.py → notrefactored/profiles/decorators.py


+ 0 - 0
misago/notrefactored/profiles/details/__init__.py → notrefactored/profiles/details/__init__.py


+ 0 - 0
misago/notrefactored/profiles/details/profile.py → notrefactored/profiles/details/profile.py


+ 0 - 0
misago/notrefactored/profiles/details/urls.py → notrefactored/profiles/details/urls.py


+ 0 - 0
misago/notrefactored/profiles/details/views.py → notrefactored/profiles/details/views.py


+ 0 - 0
misago/notrefactored/profiles/followers/__init__.py → notrefactored/profiles/followers/__init__.py


+ 0 - 0
misago/notrefactored/profiles/followers/profile.py → notrefactored/profiles/followers/profile.py


+ 0 - 0
misago/notrefactored/profiles/followers/urls.py → notrefactored/profiles/followers/urls.py


+ 0 - 0
misago/notrefactored/profiles/followers/views.py → notrefactored/profiles/followers/views.py


+ 0 - 0
misago/notrefactored/profiles/follows/__init__.py → notrefactored/profiles/follows/__init__.py


+ 0 - 0
misago/notrefactored/profiles/follows/profile.py → notrefactored/profiles/follows/profile.py


+ 0 - 0
misago/notrefactored/profiles/follows/urls.py → notrefactored/profiles/follows/urls.py


+ 0 - 0
misago/notrefactored/profiles/follows/views.py → notrefactored/profiles/follows/views.py


+ 0 - 0
misago/notrefactored/profiles/forms.py → notrefactored/profiles/forms.py


+ 0 - 0
misago/notrefactored/profiles/posts/__init__.py → notrefactored/profiles/posts/__init__.py


+ 0 - 0
misago/notrefactored/profiles/posts/profile.py → notrefactored/profiles/posts/profile.py


+ 0 - 0
misago/notrefactored/profiles/posts/urls.py → notrefactored/profiles/posts/urls.py


+ 0 - 0
misago/notrefactored/profiles/posts/views.py → notrefactored/profiles/posts/views.py


+ 0 - 0
misago/notrefactored/profiles/template.py → notrefactored/profiles/template.py


+ 0 - 0
misago/notrefactored/profiles/threads/__init__.py → notrefactored/profiles/threads/__init__.py


+ 0 - 0
misago/notrefactored/profiles/threads/profile.py → notrefactored/profiles/threads/profile.py


+ 0 - 0
misago/notrefactored/profiles/threads/urls.py → notrefactored/profiles/threads/urls.py


+ 0 - 0
misago/notrefactored/profiles/threads/views.py → notrefactored/profiles/threads/views.py


+ 0 - 0
misago/notrefactored/profiles/urls.py → notrefactored/profiles/urls.py


+ 0 - 0
misago/notrefactored/profiles/views.py → notrefactored/profiles/views.py


+ 0 - 0
misago/notrefactored/prune/__init__.py → notrefactored/prune/__init__.py


+ 0 - 0
misago/notrefactored/prune/forms.py → notrefactored/prune/forms.py


+ 0 - 0
misago/notrefactored/prune/migrations/0001_initial.py → notrefactored/prune/migrations/0001_initial.py


+ 0 - 0
misago/notrefactored/prune/migrations/__init__.py → notrefactored/prune/migrations/__init__.py


+ 0 - 0
misago/notrefactored/prune/models.py → notrefactored/prune/models.py


+ 0 - 0
misago/notrefactored/prune/views.py → notrefactored/prune/views.py


+ 0 - 0
misago/notrefactored/ranks/__init__.py → notrefactored/ranks/__init__.py


+ 0 - 0
misago/notrefactored/ranks/fixtures.py → notrefactored/ranks/fixtures.py


+ 0 - 0
misago/notrefactored/ranks/forms.py → notrefactored/ranks/forms.py


+ 0 - 0
misago/notrefactored/ranks/management/__init__.py → notrefactored/ranks/management/__init__.py


+ 0 - 0
misago/notrefactored/ranks/management/commands/__init__.py → notrefactored/ranks/management/commands/__init__.py


+ 0 - 0
misago/notrefactored/ranks/management/commands/updateranking.py → notrefactored/ranks/management/commands/updateranking.py


+ 0 - 0
misago/notrefactored/ranks/migrations/0001_initial.py → notrefactored/ranks/migrations/0001_initial.py


+ 0 - 0
misago/notrefactored/ranks/migrations/__init__.py → notrefactored/ranks/migrations/__init__.py


+ 0 - 0
misago/notrefactored/ranks/models.py → notrefactored/ranks/models.py


+ 0 - 0
misago/notrefactored/ranks/views.py → notrefactored/ranks/views.py


+ 0 - 0
misago/notrefactored/readstracker/__init__.py → notrefactored/readstracker/__init__.py


+ 0 - 0
misago/notrefactored/readstracker/management/__init__.py → notrefactored/readstracker/management/__init__.py


+ 0 - 0
misago/notrefactored/readstracker/management/commands/__init__.py → notrefactored/readstracker/management/commands/__init__.py


+ 0 - 0
misago/notrefactored/readstracker/management/commands/cleartracker.py → notrefactored/readstracker/management/commands/cleartracker.py


+ 0 - 0
misago/notrefactored/readstracker/migrations/0001_initial.py → notrefactored/readstracker/migrations/0001_initial.py


+ 0 - 0
misago/notrefactored/readstracker/migrations/0002_auto__add_threadrecord__del_field_record_threads.py → notrefactored/readstracker/migrations/0002_auto__add_threadrecord__del_field_record_threads.py


+ 0 - 0
misago/notrefactored/readstracker/migrations/0003_auto__del_record__add_forumrecord.py → notrefactored/readstracker/migrations/0003_auto__del_record__add_forumrecord.py


+ 0 - 0
misago/notrefactored/readstracker/migrations/__init__.py → notrefactored/readstracker/migrations/__init__.py


+ 0 - 0
misago/notrefactored/readstracker/models.py → notrefactored/readstracker/models.py


+ 0 - 0
misago/notrefactored/readstracker/trackers.py → notrefactored/readstracker/trackers.py


+ 0 - 0
misago/notrefactored/register/__init__.py → notrefactored/register/__init__.py


+ 0 - 0
misago/notrefactored/register/fixtures.py → notrefactored/register/fixtures.py


+ 0 - 0
misago/notrefactored/register/forms.py → notrefactored/register/forms.py


+ 0 - 0
misago/notrefactored/register/urls.py → notrefactored/register/urls.py


+ 0 - 0
misago/notrefactored/register/views.py → notrefactored/register/views.py


+ 0 - 0
misago/notrefactored/resetpswd/__init__.py → notrefactored/resetpswd/__init__.py


+ 0 - 0
misago/notrefactored/resetpswd/forms.py → notrefactored/resetpswd/forms.py


+ 0 - 0
misago/notrefactored/resetpswd/urls.py → notrefactored/resetpswd/urls.py


+ 0 - 0
misago/notrefactored/resetpswd/views.py → notrefactored/resetpswd/views.py


+ 0 - 0
misago/notrefactored/roles/__init__.py → notrefactored/roles/__init__.py


+ 0 - 0
misago/notrefactored/roles/fixtures.py → notrefactored/roles/fixtures.py


+ 0 - 0
misago/notrefactored/roles/forms.py → notrefactored/roles/forms.py


+ 0 - 0
misago/notrefactored/roles/migrations/0001_initial.py → notrefactored/roles/migrations/0001_initial.py


+ 0 - 0
misago/notrefactored/roles/migrations/__init__.py → notrefactored/roles/migrations/__init__.py


+ 0 - 0
misago/notrefactored/roles/models.py → notrefactored/roles/models.py


+ 0 - 0
misago/notrefactored/roles/views.py → notrefactored/roles/views.py


+ 0 - 0
misago/notrefactored/search/__init__.py → notrefactored/search/__init__.py


+ 0 - 0
misago/notrefactored/sessions/__init__.py → notrefactored/sessions/__init__.py


+ 0 - 0
misago/notrefactored/sessions/forms.py → notrefactored/sessions/forms.py


+ 0 - 0
misago/notrefactored/sessions/management/__init__.py → notrefactored/sessions/management/__init__.py


+ 0 - 0
misago/notrefactored/sessions/management/commands/__init__.py → notrefactored/sessions/management/commands/__init__.py


+ 0 - 0
misago/notrefactored/sessions/management/commands/clearsessions.py → notrefactored/sessions/management/commands/clearsessions.py


+ 0 - 0
misago/notrefactored/sessions/management/commands/cleartokens.py → notrefactored/sessions/management/commands/cleartokens.py


+ 0 - 0
misago/notrefactored/sessions/middleware.py → notrefactored/sessions/middleware.py


+ 0 - 0
misago/notrefactored/sessions/migrations/0001_initial.py → notrefactored/sessions/migrations/0001_initial.py


+ 0 - 0
misago/notrefactored/sessions/migrations/__init__.py → notrefactored/sessions/migrations/__init__.py


+ 0 - 0
misago/notrefactored/sessions/models.py → notrefactored/sessions/models.py


+ 0 - 0
misago/notrefactored/sessions/sessions.py → notrefactored/sessions/sessions.py


+ 0 - 0
misago/notrefactored/sessions/views.py → notrefactored/sessions/views.py


+ 0 - 0
misago/notrefactored/settings/__init__.py → notrefactored/settings/__init__.py


+ 0 - 0
misago/notrefactored/settings/context_processors.py → notrefactored/settings/context_processors.py


+ 0 - 0
misago/notrefactored/settings/fixtures.py → notrefactored/settings/fixtures.py


+ 0 - 0
misago/notrefactored/settings/forms.py → notrefactored/settings/forms.py


+ 0 - 0
misago/notrefactored/settings/middleware.py → notrefactored/settings/middleware.py


+ 0 - 0
misago/notrefactored/settings/migrations/0001_initial.py → notrefactored/settings/migrations/0001_initial.py


+ 0 - 0
misago/notrefactored/settings/migrations/__init__.py → notrefactored/settings/migrations/__init__.py


+ 0 - 0
misago/notrefactored/settings/models.py → notrefactored/settings/models.py


+ 0 - 0
misago/notrefactored/settings/settings.py → notrefactored/settings/settings.py


+ 0 - 0
misago/notrefactored/settings/views.py → notrefactored/settings/views.py


+ 0 - 0
misago/notrefactored/setup/__init__.py → notrefactored/setup/__init__.py


+ 0 - 0
misago/notrefactored/setup/fixtures.py → notrefactored/setup/fixtures.py


+ 0 - 0
misago/notrefactored/setup/management/__init__.py → notrefactored/setup/management/__init__.py


+ 0 - 0
misago/notrefactored/setup/management/commands/__init__.py → notrefactored/setup/management/commands/__init__.py


+ 0 - 0
misago/notrefactored/setup/management/commands/about.py → notrefactored/setup/management/commands/about.py


+ 0 - 0
misago/notrefactored/setup/management/commands/initdata.py → notrefactored/setup/management/commands/initdata.py


+ 0 - 0
misago/notrefactored/setup/management/commands/initmisago.py → notrefactored/setup/management/commands/initmisago.py


+ 0 - 0
misago/notrefactored/setup/management/commands/updmisago.py → notrefactored/setup/management/commands/updmisago.py


+ 0 - 0
misago/notrefactored/setup/migrations/0001_initial.py → notrefactored/setup/migrations/0001_initial.py


+ 0 - 0
misago/notrefactored/setup/migrations/__init__.py → notrefactored/setup/migrations/__init__.py


+ 0 - 0
misago/notrefactored/setup/models.py → notrefactored/setup/models.py


+ 0 - 0
misago/notrefactored/stats/__init__.py → notrefactored/stats/__init__.py


+ 0 - 0
misago/notrefactored/stats/forms.py → notrefactored/stats/forms.py


+ 0 - 0
misago/notrefactored/stats/views.py → notrefactored/stats/views.py


+ 0 - 0
misago/notrefactored/stopwatch/__init__.py → notrefactored/stopwatch/__init__.py


+ 0 - 0
misago/notrefactored/stopwatch/middleware.py → notrefactored/stopwatch/middleware.py


+ 0 - 0
misago/notrefactored/team/__init__.py → notrefactored/team/__init__.py


+ 0 - 0
misago/notrefactored/team/views.py → notrefactored/team/views.py


+ 0 - 0
misago/notrefactored/template/__init__.py → notrefactored/template/__init__.py


+ 0 - 0
misago/notrefactored/template/templatetags/__init__.py → notrefactored/template/templatetags/__init__.py


+ 0 - 0
misago/notrefactored/template/templatetags/django2jinja.py → notrefactored/template/templatetags/django2jinja.py


+ 0 - 0
misago/notrefactored/themes/__init__.py → notrefactored/themes/__init__.py


+ 0 - 0
misago/notrefactored/themes/forms.py → notrefactored/themes/forms.py


+ 0 - 0
misago/notrefactored/themes/middleware.py → notrefactored/themes/middleware.py


+ 0 - 0
misago/notrefactored/themes/migrations/0001_initial.py → notrefactored/themes/migrations/0001_initial.py


+ 0 - 0
misago/notrefactored/themes/migrations/__init__.py → notrefactored/themes/migrations/__init__.py


+ 0 - 0
misago/notrefactored/themes/models.py → notrefactored/themes/models.py


+ 0 - 0
misago/notrefactored/themes/theme.py → notrefactored/themes/theme.py


+ 0 - 0
misago/notrefactored/themes/views.py → notrefactored/themes/views.py


+ 0 - 0
misago/notrefactored/threads/__init__.py → notrefactored/threads/__init__.py


+ 0 - 0
misago/notrefactored/threads/acl.py → notrefactored/threads/acl.py


+ 0 - 0
misago/notrefactored/threads/fixtures.py → notrefactored/threads/fixtures.py


+ 0 - 0
misago/notrefactored/threads/forms.py → notrefactored/threads/forms.py


+ 0 - 0
misago/notrefactored/threads/management/__init__.py → notrefactored/threads/management/__init__.py


+ 0 - 0
misago/notrefactored/threads/management/commands/__init__.py → notrefactored/threads/management/commands/__init__.py


+ 0 - 0
misago/notrefactored/threads/management/commands/updatethreadranking.py → notrefactored/threads/management/commands/updatethreadranking.py


+ 0 - 0
misago/notrefactored/threads/migrations/0001_initial.py → notrefactored/threads/migrations/0001_initial.py


+ 0 - 0
misago/notrefactored/threads/migrations/__init__.py → notrefactored/threads/migrations/__init__.py


+ 0 - 0
misago/notrefactored/threads/models.py → notrefactored/threads/models.py


+ 0 - 0
misago/notrefactored/threads/signals.py → notrefactored/threads/signals.py


+ 0 - 0
misago/notrefactored/threads/tests.py → notrefactored/threads/tests.py


+ 0 - 0
misago/notrefactored/threads/testutils.py → notrefactored/threads/testutils.py


+ 0 - 0
misago/notrefactored/threads/urls.py → notrefactored/threads/urls.py


+ 0 - 0
misago/notrefactored/threads/views/__init__.py → notrefactored/threads/views/__init__.py


+ 0 - 0
misago/notrefactored/threads/views/base.py → notrefactored/threads/views/base.py


+ 0 - 0
misago/notrefactored/threads/views/changelog.py → notrefactored/threads/views/changelog.py


+ 0 - 0
misago/notrefactored/threads/views/delete.py → notrefactored/threads/views/delete.py


+ 0 - 0
misago/notrefactored/threads/views/details.py → notrefactored/threads/views/details.py


+ 0 - 0
misago/notrefactored/threads/views/jumps.py → notrefactored/threads/views/jumps.py


+ 0 - 0
misago/notrefactored/threads/views/karmas.py → notrefactored/threads/views/karmas.py


+ 0 - 0
misago/notrefactored/threads/views/list.py → notrefactored/threads/views/list.py


+ 0 - 0
misago/notrefactored/threads/views/posting.py → notrefactored/threads/views/posting.py


+ 0 - 0
misago/notrefactored/threads/views/thread.py → notrefactored/threads/views/thread.py


+ 0 - 0
misago/notrefactored/timezones/__init__.py → notrefactored/timezones/__init__.py


+ 0 - 0
misago/notrefactored/tos/__init__.py → notrefactored/tos/__init__.py


+ 0 - 0
misago/notrefactored/tos/fixtures.py → notrefactored/tos/fixtures.py


+ 0 - 0
misago/notrefactored/tos/views.py → notrefactored/tos/views.py


+ 0 - 0
misago/notrefactored/usercp/__init__.py → notrefactored/usercp/__init__.py


+ 0 - 0
misago/notrefactored/usercp/acl.py → notrefactored/usercp/acl.py


+ 0 - 0
misago/notrefactored/usercp/avatar/__init__.py → notrefactored/usercp/avatar/__init__.py


+ 0 - 0
misago/notrefactored/usercp/avatar/forms.py → notrefactored/usercp/avatar/forms.py


+ 0 - 0
misago/notrefactored/usercp/avatar/urls.py → notrefactored/usercp/avatar/urls.py


+ 0 - 0
misago/notrefactored/usercp/avatar/usercp.py → notrefactored/usercp/avatar/usercp.py


+ 0 - 0
misago/notrefactored/usercp/avatar/views.py → notrefactored/usercp/avatar/views.py


+ 0 - 0
misago/notrefactored/usercp/credentials/__init__.py → notrefactored/usercp/credentials/__init__.py


+ 0 - 0
misago/notrefactored/usercp/credentials/forms.py → notrefactored/usercp/credentials/forms.py


+ 0 - 0
misago/notrefactored/usercp/credentials/urls.py → notrefactored/usercp/credentials/urls.py


+ 0 - 0
misago/notrefactored/usercp/credentials/usercp.py → notrefactored/usercp/credentials/usercp.py


+ 0 - 0
misago/notrefactored/usercp/credentials/views.py → notrefactored/usercp/credentials/views.py


+ 0 - 0
misago/notrefactored/usercp/fixtures.py → notrefactored/usercp/fixtures.py


+ 0 - 0
misago/notrefactored/usercp/migrations/0001_initial.py → notrefactored/usercp/migrations/0001_initial.py


+ 0 - 0
misago/notrefactored/usercp/migrations/__init__.py → notrefactored/usercp/migrations/__init__.py


+ 0 - 0
misago/notrefactored/usercp/models.py → notrefactored/usercp/models.py


+ 0 - 0
misago/notrefactored/usercp/options/__init__.py → notrefactored/usercp/options/__init__.py


+ 0 - 0
misago/notrefactored/usercp/options/forms.py → notrefactored/usercp/options/forms.py


+ 0 - 0
misago/notrefactored/usercp/options/urls.py → notrefactored/usercp/options/urls.py


+ 0 - 0
misago/notrefactored/usercp/options/usercp.py → notrefactored/usercp/options/usercp.py


+ 0 - 0
misago/notrefactored/usercp/options/views.py → notrefactored/usercp/options/views.py


+ 0 - 0
misago/notrefactored/usercp/signature/__init__.py → notrefactored/usercp/signature/__init__.py


+ 0 - 0
misago/notrefactored/usercp/signature/forms.py → notrefactored/usercp/signature/forms.py


+ 0 - 0
misago/notrefactored/usercp/signature/urls.py → notrefactored/usercp/signature/urls.py


+ 0 - 0
misago/notrefactored/usercp/signature/usercp.py → notrefactored/usercp/signature/usercp.py


+ 0 - 0
misago/notrefactored/usercp/signature/views.py → notrefactored/usercp/signature/views.py


+ 0 - 0
misago/notrefactored/usercp/template.py → notrefactored/usercp/template.py


+ 0 - 0
misago/notrefactored/usercp/urls.py → notrefactored/usercp/urls.py


+ 0 - 0
misago/notrefactored/usercp/username/__init__.py → notrefactored/usercp/username/__init__.py


+ 0 - 0
misago/notrefactored/usercp/username/forms.py → notrefactored/usercp/username/forms.py


+ 0 - 0
misago/notrefactored/usercp/username/urls.py → notrefactored/usercp/username/urls.py


+ 0 - 0
misago/notrefactored/usercp/username/usercp.py → notrefactored/usercp/username/usercp.py


+ 0 - 0
misago/notrefactored/usercp/username/views.py → notrefactored/usercp/username/views.py


+ 0 - 0
misago/notrefactored/usercp/views.py → notrefactored/usercp/views.py


+ 0 - 0
misago/notrefactored/users/__init__.py → notrefactored/users/__init__.py


+ 0 - 0
misago/notrefactored/users/acl.py → notrefactored/users/acl.py


+ 0 - 0
misago/notrefactored/users/context_processors.py → notrefactored/users/context_processors.py


+ 0 - 0
misago/notrefactored/users/fixtures.py → notrefactored/users/fixtures.py


+ 0 - 0
misago/notrefactored/users/forms.py → notrefactored/users/forms.py


+ 0 - 0
misago/notrefactored/users/management/__init__.py → notrefactored/users/management/__init__.py


+ 0 - 0
misago/notrefactored/users/management/commands/__init__.py → notrefactored/users/management/commands/__init__.py


+ 0 - 0
misago/notrefactored/users/management/commands/adduser.py → notrefactored/users/management/commands/adduser.py


+ 0 - 0
misago/notrefactored/users/management/commands/genavatars.py → notrefactored/users/management/commands/genavatars.py


+ 0 - 0
misago/notrefactored/users/management/commands/syncusermonitor.py → notrefactored/users/management/commands/syncusermonitor.py


+ 0 - 0
misago/notrefactored/users/middleware.py → notrefactored/users/middleware.py


+ 0 - 0
misago/notrefactored/users/migrations/0001_initial.py → notrefactored/users/migrations/0001_initial.py


+ 0 - 0
misago/notrefactored/users/migrations/__init__.py → notrefactored/users/migrations/__init__.py


+ 0 - 0
misago/notrefactored/users/models.py → notrefactored/users/models.py


+ 0 - 0
misago/notrefactored/users/signals.py → notrefactored/users/signals.py


+ 0 - 0
misago/notrefactored/users/validators.py → notrefactored/users/validators.py


+ 0 - 0
misago/notrefactored/users/views.py → notrefactored/users/views.py


+ 0 - 0
misago/notrefactored/utils/__init__.py → notrefactored/utils/__init__.py


+ 0 - 0
misago/notrefactored/utils/avatars.py → notrefactored/utils/avatars.py


+ 0 - 0
misago/notrefactored/utils/slugify.py → notrefactored/utils/slugify.py


+ 0 - 0
misago/notrefactored/utils/validators.py → notrefactored/utils/validators.py


+ 0 - 0
misago/notrefactored/views.py → notrefactored/views.py


+ 0 - 0
misago/notrefactored/watcher/__init__.py → notrefactored/watcher/__init__.py


+ 0 - 0
misago/notrefactored/watcher/migrations/0001_initial.py → notrefactored/watcher/migrations/0001_initial.py


+ 0 - 0
misago/notrefactored/watcher/migrations/__init__.py → notrefactored/watcher/migrations/__init__.py


+ 0 - 0
misago/notrefactored/watcher/models.py → notrefactored/watcher/models.py


+ 0 - 0
misago/notrefactored/watcher/urls.py → notrefactored/watcher/urls.py


+ 0 - 0
misago/notrefactored/watcher/views.py → notrefactored/watcher/views.py


+ 9 - 10
refactoring.md

@@ -8,20 +8,15 @@ Directory Tree
 misago/                        App root structure
 +-admin/                       Admin apps
 +-shared/                      Shared (Admin/Front) apps
-+-core/                        Core features
-  +-forms/                     Misago forms
-    +-fields.py                Custom fields
-    +-forms.py                 Custom form base class
-    +-layouts.py               Forums layouts (wrapper around Django forms that enables templating)
-    +-widgets.py               Custom widgets
-  +-cookiejar.py               CookieJar allows for easy setting and removing cookies without direct access to response object
-  +-monitor.py                 Monitor controller that tracks forum stats
-  +-settings.py                DB based settings controller
-  +-stopwatch.py               Stopwatch controller for measuring request processing time
 +-fixtures/                    Starting data
   +-basicsettings.py           "Basic Settings" group fixture
   +-captchasettings.py         "Captcha Settings" group fixture
   +-usersmonitor.py            Users Monitor fixture
++-forms/                     Misago forms
+  +-fields.py                Custom fields
+  +-forms.py                 Custom form base class
+  +-layouts.py               Forums layouts (wrapper around Django forms that enables templating)
+  +-widgets.py               Custom widgets
 +-front/                       Frontend apps
 +-management/                  manage.py commands
 +-migrations/                  South DB migrations
@@ -41,10 +36,14 @@ misago/                        App root structure
   +-translation.py             Functions for working with translation strings
 +-__init__.py                  Misago init, contains Misago version
 +-context_processors.py        Misago context processors
++-cookiejar.py                 CookieJar allows for easy setting and removing cookies without direct access to response object
++-dbsettings.py                DB based settings controller
++-monitor.py                   Monitor controller that tracks forum stats
 +-settingsbase.py              Base configuration
 +-signals.py                   Misago's signals
 +-urls.py                      Default urls
 +-validators.py                Misago's validators
++-stopwatch.py                 Stopwatch controller for measuring request processing time
 ```