Example #1
0
def delete_user_social_info(request, app_id):
    app = App.get_app_by_user(app_id=app_id, user=request.user)
    api_key = app.api_key
    if not request.session.get('pass_confirmed', False):
        return HttpResponse(json.dumps(
            {
                'status': 'failed',
                'message': 'Delete failed social user!'
            },
            cls=DjangoJSONEncoder),
                            content_type='application/json')

    if request.method == 'POST':
        App.get_app_by_user(app_id, request.user)
        social_id = request.POST.get('social_id', '')

        response_info = requests.put('https://api.easy-login.jp/' +
                                     str(app_id) + '/users/delete_info',
                                     json={'social_id': social_id},
                                     verify=False,
                                     headers={'X-Api-Key': api_key})
        if response_info.status_code != 200:
            return HttpResponse(json.dumps(
                {
                    'status': 'failed',
                    'message': 'Delete failed social user info!'
                },
                cls=DjangoJSONEncoder),
                                content_type='application/json')

        del request.session['pass_confirmed']
        request.session.modified = True

        return HttpResponse(json.dumps(
            {
                'status': 'success',
                'message': 'Delete success social user info!'
            },
            cls=DjangoJSONEncoder),
                            content_type='application/json')

    return HttpResponse(json.dumps(
        {
            'status': 'failed',
            'message': 'Delete failed social user info!'
        },
        cls=DjangoJSONEncoder),
                        content_type='application/json')
Example #2
0
def list_channels(request, app_id):
    app = App.get_app_by_user(app_id=app_id, user=request.user)
    channels = Channel.objects.filter(app=app_id).order_by('-created_at')
    apps = App.get_all_app(user=request.user)
    providers = Provider.objects.all()
    channel_form = ChannelForm()
    channel_form.fields['app_id'].widget = forms.HiddenInput()

    return render(
        request, 'loginapp/channel_list.html', {
            'app': app,
            'apps': apps,
            'providers': providers,
            'channels': channels,
            'channel_form': channel_form
        })
Example #3
0
def add_app(request):
    if request.method == 'POST':
        form = NewAppForm(request.POST)
        if form.is_valid():
            app = form.save(commit=False)

            api_key = request.session.get(request.POST.get('api_key', ''), '')
            if not api_key:
                messages.error(request, 'Add failed app: API key is required!')
            else:
                app.api_key = api_key
                del request.session[api_key]
                request.session.modified = True

                app.owner = request.user
                app.save()
                messages.success(request, 'App was successfully created!')
                return redirect('report_app', app.id)
        else:
            push_messages_error(request, form)
            print(form.errors)

    else:
        form = AppForm()
    apps = App.get_all_app(user=request.user)
    return render(request, 'loginapp/app_add.html', {
        'apps': apps,
        'form': form
    })
Example #4
0
def list_apps(request):
    order_by = request.GET.get('order_by') if request.GET.get(
        'order_by') else '-modified_at'
    user_id = int(
        request.GET.get('user_id')) if request.GET.get('user_id') else -1

    apps1 = App.get_all_app(user=request.user,
                            order_by=order_by,
                            owner_id=user_id)
    if request.GET.get('search'):
        apps1 = apps1.filter(name__contains=request.GET.get('search'))
    apps = App.get_all_app(user=request.user)
    users = User.get_all_user(user=request.user)
    return render(request, 'loginapp/app_list.html', {
        'apps1': apps1,
        'apps': apps,
        'users': users
    })
Example #5
0
def admin_report_register(request):
    if not request.user.is_superuser:
        redirect('dashboard')
    column_dic = {
        '1': 'a.id',
        '2': 'a.name',
        '3': 'o.username',
        '4': 'created_at',
        '5': 'modified_at',
        '6': 'total',
        '7': 'authorized',
        '8': 'register_done',
        '9': 'a.deleted',
    }

    if request.GET.get('flag_loading'):
        page_length = int(request.GET.get('length', 25))
        start_row = int(request.GET.get('start', 0))
        search_value = request.GET.get('search[value]')

        order_col = column_dic[request.GET.get('order[0][column]', '1')]
        order_dir = request.GET.get('order[0][dir]', 'asc')
        order_by = order_col + ' ' + order_dir

        records_total, profiles = get_register_report(
            page_length=page_length,
            start_row=start_row,
            order_by=order_by,
            search_value=search_value)

        if search_value:
            records_filtered = len(profiles)
        else:
            records_filtered = records_total
        data = []
        order = start_row
        for id, profile in enumerate(profiles):
            order += 1
            row_data = [
                order, profile['id'], profile['name'], profile['username'],
                profile['created_at'], profile['modified_at'],
                profile['total'], profile['authorized'],
                profile['register_done'], profile['deleted']
            ]
            data.append(row_data)
        json_data_table = {
            'recordsTotal': records_total,
            'recordsFiltered': records_filtered,
            'data': data
        }
        return HttpResponse(json.dumps(json_data_table, cls=DjangoJSONEncoder),
                            content_type='application/json')
    else:
        apps = App.get_all_app(request.user)
        return render(request, 'loginapp/admin_register_report.html',
                      {'apps': apps})
Example #6
0
def list_social_users(request, app_id, social_id):
    app = App.get_app_by_user(app_id=app_id, user=request.user)
    last_auth = int(request.session.get('last_auth', 0))
    if int(time.time()) - last_auth > int(settings.TIME_AUTH_SECONDS):
        return render(request, 'loginapp/page-auth.html', {
            'next_url':
            '/apps/' + str(app_id) + '/users/' + str(social_id) + '/'
        })
    data = {}
    profiles = get_social_users(social_id)
    for profile in profiles:
        if profile['provider'] != 'twitter' and profile['provider'] != 'google':
            data[profile['provider']] = collections.OrderedDict(
                sorted(json.loads(profile['attrs']).items()))
    apps = App.get_all_app(user=request.user)
    return render(request, 'loginapp/social_user_detail.html', {
        'apps': apps,
        'profiles': data
    })
Example #7
0
def delete_app(request, app_id):
    if request.method == 'POST':
        app = App.get_app_by_user(app_id=app_id, user=request.user)
        app.deleted = 1
        app.save()
        messages.success(request, 'App was deleted!')
        return redirect('dashboard')
    else:
        messages.error(request, 'Delete failed APP!')
        return redirect('app_detail', app_id=app_id)
Example #8
0
def delete_channel(request, app_id, channel_id):
    if request.method == 'POST':
        app = App.get_app_by_user(app_id=app_id, user=request.user)
        channel = get_object_or_404(Channel, pk=channel_id, app=app_id)
        channel.delete()
        app.update_modified_at()
        messages.success(request, 'Channel was deleted!')
        return redirect('channel_list', app_id=app_id)
    else:
        messages.error(request, 'Delete failed Channel!')
        return redirect('channel_list', app_id=app_id)
Example #9
0
def app_detail(request, app_id):
    app = App.get_app_by_user(app_id=app_id, user=request.user)
    if request.method == 'POST':
        form = AppForm(request.POST, instance=app)
        if form.is_valid():
            app_update = form.save(commit=False)
            app_update.update_modified_at()

            callback_uris = request.POST.getlist('callback_uris')
            allowed_ips = request.POST.getlist('allowed_ips')
            options = request.POST.getlist('option')
            api_key = request.session.get('app_id_' + str(app_id), '')

            if len(allowed_ips) > 0:
                app_update.set_allowed_ips(allowed_ips)
            if len(callback_uris) == 0:
                messages.error(
                    request, 'Update failed app: callback uris is required!')
            else:
                if api_key:
                    app_update.api_key = api_key
                app_update.set_options(options)
                app_update.set_callback_uris(callback_uris)
                app_update.save()
                messages.success(request,
                                 'Application was successfully updated!')
                return redirect('app_detail', app_id=app_id)
        else:
            push_messages_error(request, form)
    if 'app_id_' + str(app_id) in request.session:
        del request.session['app_id_' + str(app_id)]
        request.session.modified = True
    form = AppForm()
    apps = App.get_all_app(user=request.user)
    return render(request, 'loginapp/app_detail.html', {
        'app': app,
        'apps': apps,
        'form': form,
    })
Example #10
0
def channel_detail(request, app_id, channel_id):
    app = App.get_app_by_user(app_id=app_id, user=request.user)
    channel = get_object_or_404(Channel, pk=channel_id, app=app_id)
    if request.method == 'POST':
        form = ChannelForm(request.POST, instance=channel)
        if form.is_valid():
            channel_update = form.save(commit=False)
            channel_update.modified_at = datetime.datetime.now()

            provider = request.POST.get('api_version')
            if provider is None:
                messages.error(request,
                               'Add channel failed: API version is required!')
                return redirect('dashboard')
            provider = Provider.objects.filter(pk=provider).first()
            provider_name = request.POST.get('provider')
            api_version = provider.version
            required_permission = provider.required_permissions
            field_permission = request.POST.getlist('required_field')
            required_fields = ''
            permissions = set()
            for item in field_permission:
                item_split = item.split(':')
                required_fields += item_split[0] + '|'
                if item_split[1]:
                    permissions.add(item_split[1])
            required_fields = required_fields[:-1]
            permissions = permissions.union(set(
                required_permission.split('|')))
            options = ''
            options_map = provider.options_as_restrict_map()

            for item in request.POST.getlist('option'):
                if item in options_map:
                    if request.user.level & options_map[item] > 0:
                        options += item + '|'
                else:
                    options += item + '|'
            options = options[:-1]
            channel_update.provider = provider_name
            channel_update.api_version = api_version
            channel_update.permissions = '|'.join(permissions)
            channel_update.required_fields = required_fields
            channel_update.options = options

            channel.app = app

            # try to catch exception unique but it catch more
            try:
                channel_update.save()
                app.update_modified_at()
                app.save()
                messages.success(request, 'Channel was successfully updated!')
            except IntegrityError as error:
                messages.error(
                    request, 'Channel with ' + channel.provider +
                    ' provider already exists!')

            return redirect('channel_detail',
                            app_id=app_id,
                            channel_id=channel_id)
        else:
            push_messages_error(request, form)
            print(form.errors)

    channels = Channel.objects.filter(app=app_id)
    apps = App.get_all_app(user=request.user)
    providers = Provider.objects.all()
    provider_name_list = list(
        set(Provider.objects.values_list('name', flat=True)))
    provider = Provider.objects.filter(name=channel.provider,
                                       version=channel.api_version).first()
    form = ChannelForm()
    form.fields['app_id'].widget = forms.HiddenInput()

    return render(
        request, 'loginapp/channel_detail.html', {
            'app': app,
            'apps': apps,
            'channel': channel,
            'channels': channels,
            'providers': providers,
            'provider_names': provider_name_list,
            'provider_id': provider.id,
            'form': form
        })
Example #11
0
def add_channel(request):
    if request.method == 'POST':
        form = ChannelForm(request.POST)
        if form.is_valid():
            channel = form.save(commit=False)
            provider_id = request.POST.get('api_version')
            if provider_id is None:
                messages.error(request,
                               'Add channel failed: API version is required!')
                return redirect('dashboard')
            provider = Provider.objects.filter(pk=provider_id).first()
            provider_name = request.POST.get('provider')
            api_version = provider.version
            required_permission = provider.required_permissions
            field_permission = request.POST.getlist('required_field')
            required_fields = ''
            permissions = set()
            for item in field_permission:
                item_split = item.split(':')
                required_fields += item_split[0] + '|'
                if item_split[1]:
                    permissions.add(item_split[1])
            required_fields = required_fields[:-1]
            permissions = permissions.union(set(
                required_permission.split('|')))
            options = ''
            options_map = provider.options_as_restrict_map()
            for item in request.POST.getlist('option'):
                if item in options_map:
                    if request.user.level & options_map[item] > 0:
                        options += item + '|'
                else:
                    options += item + '|'
            options = options[:-1]
            channel.provider = provider_name
            channel.api_version = api_version
            channel.permissions = '|'.join(permissions)
            channel.required_fields = required_fields
            channel.options = options

            app_id = request.POST['app_id']
            if app_id is None:
                messages.error(request,
                               'Add channel failed: App ID is required!')
                return redirect('dashboard')
            else:
                channel.app = App.get_app_by_user(app_id=app_id,
                                                  user=request.user)

            app = App.get_app_by_user(app_id=app_id, user=request.user)
            # try to catch exception unique but it catch more
            try:
                channel.save()
                app.update_modified_at()
                app.save()
                messages.success(request, 'Channel was successfully created!')
            except IntegrityError as error:
                messages.error(
                    request, 'Channel with ' + channel.provider +
                    ' provider already exists!')

            return redirect('channel_list', app_id=app_id)
        else:
            push_messages_error(request, form)
            print(form.errors)

    return redirect('dashboard')
Example #12
0
def app_report(request, app_id):
    app = App.get_app_by_user(app_id=app_id, user=request.user)

    if request.GET.get('chart_loading'):
        auth_state = request.GET.get('auth_state', '1')
        provider = request.GET.get('provider', 'all')
        startDate = request.GET.get(
            'startDate',
            datetime.datetime.strftime(
                datetime.datetime.today() - datetime.timedelta(days=7),
                '%Y-%m-%d'))
        endDate = request.GET.get(
            'endDate',
            datetime.datetime.strftime(datetime.datetime.today(), '%Y-%m-%d'))

        labels, dataChart = get_auth_report_per_provider(
            app_id=app_id,
            auth_state=int(auth_state),
            from_dt=startDate,
            to_dt=endDate)
        datasets = []
        maxy = 0
        check_zero = True
        labels = sorted(labels)
        providerNames = ['total']
        providerNames.extend(Provider.provider_names())

        if provider != 'all':
            providerNames = [provider]
            dataChart = {provider: dataChart.get(provider)}
        for key in providerNames:
            datasetPoint = {
                'label': key.capitalize(),
                'fill': False,
                'borderColor': getChartColor(key),
                'backgroundColor': getChartColor(key),
            }
            dataPoint = []
            for key1 in labels:
                value1 = dataChart.get(key).get(key1)
                if value1 > 0:
                    check_zero = False
                if value1 > maxy:
                    maxy = value1
                dataPoint.append(value1)
            datasets.append(datasetPoint)
            datasetPoint.update({'data': dataPoint})
        if check_zero:
            maxy = 999
        dataChartJson = {
            'maxy': maxy,
            'data': {
                'labels': labels,
                'datasets': datasets
            }
        }

        return HttpResponse(json.dumps(dataChartJson),
                            content_type='application/json')
    else:
        total_data_auth = get_total_auth_report(app_id=app_id)
        total_data_provider = get_total_provider_report(app_id=app_id)
        provider_names = Provider.provider_names()
        apps = App.get_all_app(user=request.user)

        return render(
            request, 'loginapp/report_app.html', {
                'app': app,
                'apps': apps,
                'provider_names': provider_names,
                'total_data_auth': total_data_auth,
                'total_data_provider': total_data_provider
            })
Example #13
0
def user_report(request, app_id):
    app = App.get_app_by_user(app_id=app_id, user=request.user)
    column_dic = {
        '1': 'user_pk',
        '2': 'social_id',
        '3': 'last_login',
        '4': 'login_total'
    }

    if request.GET.get('flag_loading'):
        page_length = int(request.GET.get('length', 25))
        start_row = int(request.GET.get('start', 0))
        search_value = request.GET.get('search[value]')

        order_col = column_dic[request.GET.get('order[0][column]', '1')]
        order_dir = request.GET.get('order[0][dir]', 'asc')
        order_by = order_col + ' ' + order_dir

        records_total, profiles = get_user_report(app_id=app_id,
                                                  search_value=search_value,
                                                  page_length=page_length,
                                                  start_row=start_row,
                                                  order_by=order_by)
        if search_value:
            records_filtered = len(profiles)
        else:
            records_filtered = records_total
        data = []
        order = start_row
        providers = Provider.provider_names()
        for id, profile in enumerate(profiles):
            order += 1
            row_data = [
                order,
                profile['user_pk'],
                str(profile['social_id']) + '|' + str(profile['prohibited']) +
                '|' + str(app_id),
                profile['last_login'].strftime('%Y-%m-%d %H:%M:%S'),
                profile['login_total'],
            ]
            linked_providers = profile['linked_providers']
            for provider in providers:
                if provider in linked_providers:
                    row_data.append(1)
                else:
                    row_data.append(0)
            row_data.append(
                str(app_id) + '|' + str(profile['social_id']) + '|' +
                str(profile['prohibited']))
            data.append(row_data)
        json_data_table = {
            'recordsTotal': records_total,
            'recordsFiltered': records_filtered,
            'data': data
        }
        return HttpResponse(json.dumps(json_data_table, cls=DjangoJSONEncoder),
                            content_type='application/json')
    else:
        apps = App.get_all_app(user=request.user)
        provider_names = Provider.provider_names()
        return render(request, 'loginapp/statistic_login.html', {
            'apps': apps,
            'app': app,
            'provider_names': provider_names
        })
Example #14
0
def admin_list_users(request):
    if not request.user.is_superuser:
        redirect('dashboard')
    column_dic = {
        '1': 'admins.username',
        '2': 'admins.email',
        '3': 'number_apps',
        '4': 'last_login',
        '5': 'admins.level',
        '6': 'admins.deleted'
    }

    if request.GET.get('flag_loading'):
        page_length = int(request.GET.get('length', 25))
        start_row = int(request.GET.get('start', 0))
        search_value = request.GET.get('search[value]')

        order_col = column_dic[request.GET.get('order[0][column]', '0')]
        order_dir = request.GET.get('order[0][dir]', 'asc')
        order_by = order_col + ' ' + order_dir

        records_total, profiles = get_list_admin_users(
            page_length=page_length,
            start_row=start_row,
            order_by=order_by,
            search_value=search_value)
        if search_value:
            records_filtered = len(profiles)
        else:
            records_filtered = records_total
        data = []
        order = start_row
        levels = settings.EASY_ACCOUNT_LEVELS
        for id, profile in enumerate(profiles):
            order = order + 1
            level = '<span class="badge-custom" style="background-color:' + levels[
                profile['level']]['color'] + '">' + levels[
                    profile['level']]['name'] + '</span>'
            row_data = [
                order, profile['username'], profile['email'],
                profile['last_login'].strftime('%Y-%m-%d %H:%M:%S')
                if profile['last_login'] else 'Never', profile['total_apps'],
                level, profile['deleted'],
                str(profile['user_id']) + "|" + str(profile['level']) + "|" +
                str(profile['deleted'])
            ]
            data.append(row_data)
        json_data_table = {
            'recordsTotal': records_total,
            'recordsFiltered': records_filtered,
            'data': data
        }

        return HttpResponse(json.dumps(json_data_table, cls=DjangoJSONEncoder),
                            content_type='application/json')
    else:
        apps = App.get_all_app(request.user)
        form = RegisterForm()
        levels = settings.EASY_ACCOUNT_LEVELS
        return render(request, 'loginapp/admin_user_list.html', {
            'form': form,
            'apps': apps,
            'levels': levels
        })