diff --git a/abonapp/__init__.py b/abonapp/__init__.py index e69de29..b91d182 100644 --- a/abonapp/__init__.py +++ b/abonapp/__init__.py @@ -0,0 +1 @@ +default_app_config = 'abonapp.apps.AbonappConfig' diff --git a/abonapp/apps.py b/abonapp/apps.py index 5b70844..6957358 100644 --- a/abonapp/apps.py +++ b/abonapp/apps.py @@ -3,3 +3,4 @@ from django.apps import AppConfig class AbonappConfig(AppConfig): name = 'abonapp' + verbose_name = 'Abonent app' diff --git a/abonapp/views.py b/abonapp/views.py index cfa800f..15b45c0 100644 --- a/abonapp/views.py +++ b/abonapp/views.py @@ -17,6 +17,7 @@ import mydefs @login_required +@mydefs.only_admins def peoples(request, gid): peopleslist = models.Abon.objects.filter(group=gid) @@ -38,6 +39,7 @@ def peoples(request, gid): @login_required +@mydefs.only_admins # @permission_required('abonapp.add_abongroup') def addgroup(request): warntext = '' @@ -57,6 +59,7 @@ def addgroup(request): @login_required +@mydefs.only_admins def grouplist(request): groups = models.AbonGroup.objects.annotate(usercount=Count('abon')) @@ -75,6 +78,7 @@ def grouplist(request): @login_required +@mydefs.only_admins def delgroup(request): agd = mydefs.safe_int(request.GET.get('id')) get_object_or_404(models.AbonGroup, id=agd).delete() @@ -82,6 +86,7 @@ def delgroup(request): @login_required +@mydefs.only_admins # @permission_required('abonapp.add_abon') # @permission_required('abonapp.change_abon') def addabon(request, gid): @@ -121,6 +126,7 @@ def addabon(request, gid): @login_required +@mydefs.only_admins # @permission_required('abonapp.delete_abon') # @permission_required('abonapp.delete_abongroup') def delentity(request): @@ -138,6 +144,7 @@ def delentity(request): @login_required +@mydefs.only_admins def abonamount(request, gid, uid): warntext='' abon = get_object_or_404(models.Abon, id=uid) @@ -158,6 +165,7 @@ def abonamount(request, gid, uid): @login_required +@mydefs.only_admins def invoice_for_payment(request, gid, uid): abon = get_object_or_404(models.Abon, id=uid) invoices = models.InvoiceForPayment.objects.filter(abon=abon) @@ -170,6 +178,7 @@ def invoice_for_payment(request, gid, uid): @login_required +@mydefs.only_admins def pay_history(request, gid, uid): abon = get_object_or_404(models.Abon, id=uid) pay_history = models.AbonLog.objects.filter(abon=abon).order_by('-id') @@ -182,6 +191,7 @@ def pay_history(request, gid, uid): @login_required +@mydefs.only_admins def abon_services(request, gid, uid): abon = get_object_or_404(models.Abon, id=uid) abon_tarifs = models.AbonTariff.objects.filter(abon=abon).order_by('tariff_priority') @@ -195,6 +205,7 @@ def abon_services(request, gid, uid): @login_required +@mydefs.only_admins def abonhome(request, gid, uid): abon = get_object_or_404(models.Abon, id=uid) abon_group = get_object_or_404(models.AbonGroup, id=gid) @@ -288,6 +299,7 @@ def terminal_pay(request): @login_required +@mydefs.only_admins # @permission_required('abonapp.add_invoiceforpayment') def add_invoice(request, gid, uid): uid = mydefs.safe_int(uid) @@ -319,6 +331,7 @@ def add_invoice(request, gid, uid): @login_required +@mydefs.only_admins def buy_tariff(request, gid, uid): warntext = '' frm = None @@ -351,6 +364,7 @@ def buy_tariff(request, gid, uid): @login_required +@mydefs.only_admins def chpriority(request, gid, uid): t = request.GET.get('t') act = request.GET.get('a') @@ -366,6 +380,7 @@ def chpriority(request, gid, uid): @login_required +@mydefs.only_admins def complete_service(request, gid, uid, srvid): abtar = get_object_or_404(models.AbonTariff, id=srvid) abon_group = get_object_or_404(models.AbonGroup, id=gid) @@ -440,6 +455,7 @@ def complete_service(request, gid, uid, srvid): @login_required +@mydefs.only_admins def log_page(request): logs = models.AbonLog.objects.all() diff --git a/accounts_app/views.py b/accounts_app/views.py index 17136dc..fc7bf2d 100644 --- a/accounts_app/views.py +++ b/accounts_app/views.py @@ -12,6 +12,7 @@ import mydefs @login_required +@mydefs.only_admins def home(request): return redirect('profile') @@ -25,12 +26,14 @@ def to_signin(request): if auser: login(request, auser) if nextl == 'None' or nextl == None or nextl == '': - return redirect('profile') + if request.user.is_admin: + return redirect('profile') + else: + return redirect('client_home') else: return redirect(nextl) else: return render(request, 'accounts/login.html', { - 'csrf_token': csrf(request)['csrf_token'], 'next': nextl, 'errmsg': u'Неправильный логин или пароль, попробуйте ещё раз' }) @@ -48,6 +51,7 @@ def sign_out(request): @login_required +@mydefs.only_admins def profile_show(request, id=0): id = mydefs.safe_int(id) @@ -72,6 +76,7 @@ def profile_show(request, id=0): @login_required +@mydefs.only_admins def chgroup(request, uid): usr = get_object_or_404(UserProfile, id=uid) usergroups = usr.groups.all() @@ -87,6 +92,7 @@ def chgroup(request, uid): @login_required +@mydefs.only_admins def ch_ava(request): if request.method == 'POST': user = request.user @@ -105,6 +111,7 @@ def ch_ava(request): @login_required +@mydefs.only_admins def ch_info(request): warntext='' if request.method == 'POST': @@ -132,6 +139,7 @@ def ch_info(request): @login_required +@mydefs.only_admins ##@permission_required('accounts_app.add_userprofile') def create_profile(request): if request.method == 'POST': @@ -182,6 +190,7 @@ def create_profile(request): @login_required +@mydefs.only_admins #@permission_required('accounts_app.del_userprofile') def delete_profile(request, uid): prf = get_object_or_404(UserProfile, id=uid) @@ -190,6 +199,7 @@ def delete_profile(request, uid): @login_required +@mydefs.only_admins def acc_list(request): users = UserProfile.objects.filter(is_admin=True) @@ -201,6 +211,7 @@ def acc_list(request): @login_required +@mydefs.only_admins #@permission_required('accounts_app.change_userprofile') def perms(request, id): ingroups = filter(lambda x: x[0] == 'ingroups', request.POST.lists())[0][1] @@ -218,6 +229,7 @@ def perms(request, id): @login_required +@mydefs.only_admins def groups(request): grps = Group.objects.all() @@ -229,6 +241,7 @@ def groups(request): @login_required +@mydefs.only_admins #@permission_required('auth.change_group') def group(request, id): id = mydefs.safe_int(id) diff --git a/clientsideapp/__init__.py b/clientsideapp/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/clientsideapp/admin.py b/clientsideapp/admin.py new file mode 100644 index 0000000..8c38f3f --- /dev/null +++ b/clientsideapp/admin.py @@ -0,0 +1,3 @@ +from django.contrib import admin + +# Register your models here. diff --git a/clientsideapp/apps.py b/clientsideapp/apps.py new file mode 100644 index 0000000..8da7328 --- /dev/null +++ b/clientsideapp/apps.py @@ -0,0 +1,6 @@ +from django.apps import AppConfig + + +class ClientsideappConfig(AppConfig): + name = 'clientsideapp' + verbose_name = 'Client side application' diff --git a/clientsideapp/migrations/__init__.py b/clientsideapp/migrations/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/clientsideapp/models.py b/clientsideapp/models.py new file mode 100644 index 0000000..bd4b2ab --- /dev/null +++ b/clientsideapp/models.py @@ -0,0 +1,5 @@ +from __future__ import unicode_literals + +from django.db import models + +# Create your models here. diff --git a/clientsideapp/tests.py b/clientsideapp/tests.py new file mode 100644 index 0000000..7ce503c --- /dev/null +++ b/clientsideapp/tests.py @@ -0,0 +1,3 @@ +from django.test import TestCase + +# Create your tests here. diff --git a/clientsideapp/urls.py b/clientsideapp/urls.py new file mode 100644 index 0000000..efa3372 --- /dev/null +++ b/clientsideapp/urls.py @@ -0,0 +1,10 @@ +# -*- coding:utf-8 -*- +from django.conf.urls import url +import views + + +urlpatterns = [ + url(r'^$', views.home, name='client_home'), + url(r'^pays$', views.pays, name='client_pays'), + url(r'^buy$', views.buy_service, name='client_buy') +] diff --git a/clientsideapp/views.py b/clientsideapp/views.py new file mode 100644 index 0000000..d6a613a --- /dev/null +++ b/clientsideapp/views.py @@ -0,0 +1,17 @@ +from django.contrib.auth.decorators import login_required +from django.shortcuts import render + + +@login_required +def home(request): + return render(request, 'clientsideapp/index.html') + + +@login_required +def pays(request): + return render(request, 'clientsideapp/pays.html') + + +@login_required +def buy_service(request): + return render(request, 'clientsideapp/buy.html') diff --git a/devapp/views.py b/devapp/views.py index 64d3027..9b9e01a 100644 --- a/devapp/views.py +++ b/devapp/views.py @@ -2,11 +2,12 @@ from django.contrib.auth.decorators import login_required from django.shortcuts import render, redirect, get_object_or_404 from models import Device -from mydefs import pag_mn, res_success, res_error +from mydefs import pag_mn, res_success, res_error, only_admins from forms import DeviceForm @login_required +@only_admins def devices(request): devs = Device.objects.all() devs = pag_mn(request, devs) @@ -17,6 +18,7 @@ def devices(request): @login_required +@only_admins def devdel(request, did): try: get_object_or_404(Device, id=did).delete() @@ -26,6 +28,7 @@ def devdel(request, did): @login_required +@only_admins def dev(request, devid=0): warntext = '' devinst = get_object_or_404(Device, id=devid) if devid != 0 else None @@ -48,6 +51,7 @@ def dev(request, devid=0): @login_required +@only_admins def devview(request, did): warntext = '' diff --git a/djing/settings_example.py b/djing/settings_example.py index 75e0c16..3c52130 100644 --- a/djing/settings_example.py +++ b/djing/settings_example.py @@ -36,7 +36,8 @@ INSTALLED_APPS = [ 'devapp', 'mapapp', 'statistics', - 'taskapp' + 'taskapp', + 'clientsideapp' ] MIDDLEWARE_CLASSES = [ diff --git a/djing/urls.py b/djing/urls.py index 50ef853..4881095 100644 --- a/djing/urls.py +++ b/djing/urls.py @@ -15,6 +15,7 @@ urlpatterns = [ url(r'^map/', include('mapapp.urls')), url(r'^statistic/', include('statistics.urls')), url(r'^tasks/', include('taskapp.urls')), + url(r'^client/', include('clientsideapp.urls')), url(r'^admin/', admin.site.urls), ] diff --git a/djing/views.py b/djing/views.py index 1dfb701..776ac0f 100644 --- a/djing/views.py +++ b/djing/views.py @@ -1,8 +1,13 @@ +from django.contrib.auth.decorators import login_required from django.shortcuts import redirect +@login_required def home(request): - return redirect('profile') + if request.user.is_admin: + return redirect('profile') + else: + return redirect('client_home') def finance_report(request): diff --git a/ip_pool/views.py b/ip_pool/views.py index 938fa19..943865a 100644 --- a/ip_pool/views.py +++ b/ip_pool/views.py @@ -6,6 +6,7 @@ import mydefs @login_required +@mydefs.only_admins def home(request): pools = IpPoolItem.objects.get_pools() print pools @@ -20,6 +21,7 @@ def home(request): @login_required +@mydefs.only_admins def ips(request): ip_start = request.GET.get('ips') ip_end = request.GET.get('ipe') @@ -37,6 +39,7 @@ def ips(request): @login_required +@mydefs.only_admins def del_pool(request): ip_start = request.GET.get('ips') ip_end = request.GET.get('ipe') @@ -51,6 +54,7 @@ def del_pool(request): @login_required +@mydefs.only_admins def add_pool(request): if request.method == 'POST': frm = PoolForm(request.POST) @@ -70,6 +74,7 @@ def add_pool(request): @login_required +@mydefs.only_admins def delip(request): ipid = request.GET.get('id') get_object_or_404(IpPoolItem, id=ipid).delete() diff --git a/mapapp/views.py b/mapapp/views.py index d050cbd..86e73e4 100644 --- a/mapapp/views.py +++ b/mapapp/views.py @@ -3,9 +3,11 @@ from django.http import HttpResponse from django.shortcuts import render from models import Dot from json import dumps +from mydefs import only_admins @login_required +@only_admins def home(request): return render(request, 'maps/index.html') diff --git a/mydefs.py b/mydefs.py index 2c22071..ab49176 100644 --- a/mydefs.py +++ b/mydefs.py @@ -128,3 +128,13 @@ def order_helper(request): return dir, dfx + orby else: return dir, orby + + +# Декоратор проверяет аккаунт, чтоб не пускать клиентов в страницы администрации +def only_admins(fn): + def wrapped(request, *args, **kwargs): + if request.user.is_admin: + return fn(request, *args, **kwargs) + else: + return redirect('client_home') + return wrapped diff --git a/privatemessage/views.py b/privatemessage/views.py index 67eee3c..5fea3fa 100644 --- a/privatemessage/views.py +++ b/privatemessage/views.py @@ -11,6 +11,7 @@ from accounts_app.models import UserProfile @login_required +@mydefs.only_admins def home(request): msgs = PrivateMessages.objects.all() return render(request, 'private_messages/index.html', { @@ -19,6 +20,7 @@ def home(request): @login_required +@mydefs.only_admins def delitem(request, id=0): r = {'errnum': 0,'errtext': u''} try: @@ -32,6 +34,7 @@ def delitem(request, id=0): @login_required +@mydefs.only_admins def send_message(request): if request.method == 'GET': return HttpResponse(render_to_string('private_messages/send_form.html',{ diff --git a/static/clientside/ISPlaylist.m3u b/static/clientside/ISPlaylist.m3u new file mode 100644 index 0000000..e5fd99e --- /dev/null +++ b/static/clientside/ISPlaylist.m3u @@ -0,0 +1,48 @@ +#EXTM3U +#EXTINF:-1,ПЕРВЫЙ КАНАЛ +udp://@239.255.1.15:1234 +#EXTINF:-1,Россия-1 +udp://@239.255.1.16:1234 +#EXTINF:-1,МАТЧ ТВ +udp://@239.255.1.17:1234 +#EXTINF:-1,НТВ +udp://@239.255.1.18:1234 +#EXTINF:-1,ПЯТЫЙ КАНАЛ +udp://@239.255.1.19:1234 +#EXTINF:-1,РОССИЯ-КУЛЬТУРА +udp://@239.255.1.20:1234 +#EXTINF:-1,Россия-24 +udp://@239.255.1.21:1234 +#EXTINF:-1,КАРУСЕЛЬ +udp://@239.255.1.22:1234 +#EXTINF:-1,ОТР +udp://@239.255.1.23:1234 +#EXTINF:-1,ТВ Центр +udp://@239.255.1.24:1234 + +#EXTINF:-1,РЕН ТВ +udp://@239.255.1.28:1234 +#EXTINF:-1,Спас +udp://@239.255.1.29:1234 +#EXTINF:-1,СТС +udp://@239.255.1.30:1234 +#EXTINF:-1,Домашний +udp://@239.255.1.31:1234 +#EXTINF:-1,ТВ3 +udp://@239.255.1.32:1234 + +#EXTINF:-1,Звезда +udp://@239.255.1.34:1234 + +#EXTINF:-1,Мир-24 +udp://@239.255.1.9:1234 + +#EXTINF:-1,ТНТ +udp://@239.255.1.35:1234 +#EXTINF:-1,МУЗ ТВ +udp://@239.255.1.36:1234 +#EXTINF:-1,Крым 24 +udp://@239.255.1.14:1234 + +#EXTINF:-1,Перец +udp://@239.255.1.12:1234 diff --git a/static/clientside/bc.png b/static/clientside/bc.png new file mode 100644 index 0000000..d61c54d Binary files /dev/null and b/static/clientside/bc.png differ diff --git a/static/clientside/custom.css b/static/clientside/custom.css new file mode 100644 index 0000000..f4bdc7e --- /dev/null +++ b/static/clientside/custom.css @@ -0,0 +1,12 @@ +img.navbar-brand { + width: 59px; + height: 50px; + padding: 0; + margin: 0 15px 0 0; +} +body > .container { + padding: 60px 15px 0; +} +.table thead { + background-color: #ddd; +} diff --git a/static/clientside/poe-splitter.jpg b/static/clientside/poe-splitter.jpg new file mode 100644 index 0000000..2a1b1e2 Binary files /dev/null and b/static/clientside/poe-splitter.jpg differ diff --git a/tariff_app/views.py b/tariff_app/views.py index 4d79f33..ddf9bc8 100644 --- a/tariff_app/views.py +++ b/tariff_app/views.py @@ -8,6 +8,7 @@ import forms @login_required +@mydefs.only_admins def tarifs(request): tars = Tariff.objects.all() @@ -26,6 +27,7 @@ def tarifs(request): @login_required +@mydefs.only_admins def edit_tarif(request, tarif_id=0): tarif_id = mydefs.safe_int(tarif_id) @@ -53,6 +55,7 @@ def edit_tarif(request, tarif_id=0): @login_required +@mydefs.only_admins def del_tarif(request, id): tar_id = mydefs.safe_int(id) get_object_or_404(Tariff, id=tar_id).delete() diff --git a/taskapp/views.py b/taskapp/views.py index 40cee33..5de2209 100644 --- a/taskapp/views.py +++ b/taskapp/views.py @@ -2,11 +2,12 @@ from django.contrib.auth.decorators import login_required from django.shortcuts import render, redirect, get_object_or_404 from models import Task -from mydefs import pag_mn#, order_helper +from mydefs import pag_mn, only_admins#, order_helper from forms import TaskFrm @login_required +@only_admins def home(request): tasks = Task.objects.all() @@ -26,12 +27,14 @@ def home(request): @login_required +@only_admins def task_delete(request, task_id): get_object_or_404(Task, id=task_id).delete() return redirect('task_home') @login_required +@only_admins def task_add_edit(request, task_id=0): warntext = '' if request.method == 'POST': diff --git a/templates/base.html b/templates/base.html index 57b4c56..4aadc84 100644 --- a/templates/base.html +++ b/templates/base.html @@ -47,7 +47,8 @@