13 | {{ _p('pages.reset_password.headline_pre_subtitle', 'Enter your email address you used to register. Number of messages is limited.') }}
14 | @endsection
15 |
16 | @section('content')
17 | @include('indigo-layout::auth.passwords.email')
18 | @endsection
19 |
20 | @section('footer')
21 | {!! _p('pages.reset_password.footer-headline', ':link_name ', ['link_url' => route('login'), 'link_name' => 'Back to login page']) !!}
22 | @endsection
23 |
--------------------------------------------------------------------------------
/config/navigation.php:
--------------------------------------------------------------------------------
1 | [
5 | 'userNavigation' => [
6 | [
7 | 'name' => 'Settings',
8 | 'link' => '/settings',
9 | ],
10 | [
11 | 'name' => 'Logout',
12 | 'link' => '/logout',
13 | 'class' => 'is-expand',
14 | ],
15 | ],
16 | 'sidebar' => [
17 | [
18 | 'name' => 'Dashboard',
19 | 'link' => '/dashboard',
20 | 'icon' => 'speed'
21 | ],
22 | [
23 | 'name' => 'Leads',
24 | 'link' => '/leads',
25 | 'icon' => 'report'
26 | ],
27 | [
28 | 'name' => 'Analytics',
29 | 'link' => '/analytics',
30 | 'icon' => 'report'
31 | ],
32 | [
33 | 'name' => 'Settings',
34 | 'link' => '/settings',
35 | 'icon' => 'settings'
36 | ],
37 | ]
38 | ]
39 | ];
40 |
--------------------------------------------------------------------------------
/database/migrations/2019_04_08_085829_create_two_factor_table.php:
--------------------------------------------------------------------------------
1 | increments('id');
17 | $table->integer('user_id')->unsigned()->index();
18 | $table->string('identifier')->nullable();
19 | $table->string('phone');
20 | $table->string('dial_code');
21 | $table->boolean('verified')->default(false);
22 | $table->timestamps();
23 |
24 | $table->foreign('user_id')->references('id')->on('users')->onDelete('cascade');
25 | });
26 | }
27 |
28 | /**
29 | * Reverse the migrations.
30 | *
31 | * @return void
32 | */
33 | public function down()
34 | {
35 | Schema::drop('two_factor');
36 | }
37 | }
--------------------------------------------------------------------------------
/app/Http/Controllers/Auth/LoginController.php:
--------------------------------------------------------------------------------
1 | middleware('guest')->except('logout');
38 | }
39 | }
40 |
--------------------------------------------------------------------------------
/app/Http/Controllers/Auth/ResetPasswordController.php:
--------------------------------------------------------------------------------
1 | middleware('guest');
38 | }
39 | }
40 |
--------------------------------------------------------------------------------
/.env.example:
--------------------------------------------------------------------------------
1 | APP_NAME="Awes.io Demo"
2 | APP_ENV=local
3 | APP_KEY=
4 | APP_DEBUG=true
5 | APP_URL=http://localhost
6 |
7 | LOG_CHANNEL=stack
8 |
9 | DB_CONNECTION=mysql
10 | DB_HOST=127.0.0.1
11 | DB_PORT=3306
12 | DB_DATABASE=homestead
13 | DB_USERNAME=homestead
14 | DB_PASSWORD=secret
15 |
16 | BROADCAST_DRIVER=log
17 | CACHE_DRIVER=file
18 | QUEUE_CONNECTION=sync
19 | SESSION_DRIVER=file
20 | SESSION_LIFETIME=120
21 |
22 | REDIS_HOST=127.0.0.1
23 | REDIS_PASSWORD=null
24 | REDIS_PORT=6379
25 |
26 | MAIL_DRIVER=smtp
27 | MAIL_HOST=smtp.mailtrap.io
28 | MAIL_PORT=2525
29 | MAIL_USERNAME=null
30 | MAIL_PASSWORD=null
31 | MAIL_ENCRYPTION=null
32 |
33 | AWS_ACCESS_KEY_ID=
34 | AWS_SECRET_ACCESS_KEY=
35 | AWS_DEFAULT_REGION=us-east-1
36 | AWS_BUCKET=
37 |
38 | PUSHER_APP_ID=
39 | PUSHER_APP_KEY=
40 | PUSHER_APP_SECRET=
41 | PUSHER_APP_CLUSTER=mt1
42 |
43 | MIX_PUSHER_APP_KEY="${PUSHER_APP_KEY}"
44 | MIX_PUSHER_APP_CLUSTER="${PUSHER_APP_CLUSTER}"
45 |
46 | # THIS IS DEMO KEY, for personal use only, it will become INVALID after short period of time
47 | # If you need FREE production key, please visit https://www.pkgkit.com/awes-io/create"
48 | PKGKIT_CDN_KEY=c3882a7e75f09a59b73780aee93d3fbc
--------------------------------------------------------------------------------
/LICENSE:
--------------------------------------------------------------------------------
1 | The MIT License (MIT)
2 |
3 | Copyright (c) 2017-present, Awescode GmbH (www.awescode.de)
4 |
5 | Permission is hereby granted, free of charge, to any person obtaining a copy
6 | of this software and associated documentation files (the "Software"), to deal
7 | in the Software without restriction, including without limitation the rights
8 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9 | copies of the Software, and to permit persons to whom the Software is
10 | furnished to do so, subject to the following conditions:
11 |
12 | The above copyright notice and this permission notice shall be included in
13 | all copies or substantial portions of the Software.
14 |
15 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
21 | THE SOFTWARE.
22 |
--------------------------------------------------------------------------------
/config/view.php:
--------------------------------------------------------------------------------
1 | [
17 | resource_path('views'),
18 | ],
19 |
20 | /*
21 | |--------------------------------------------------------------------------
22 | | Compiled View Path
23 | |--------------------------------------------------------------------------
24 | |
25 | | This option determines where all the compiled Blade templates will be
26 | | stored for your application. Typically, this is within the storage
27 | | directory. However, as usual, you are free to change this value.
28 | |
29 | */
30 |
31 | 'compiled' => env(
32 | 'VIEW_COMPILED_PATH',
33 | realpath(storage_path('framework/views'))
34 | ),
35 |
36 | ];
37 |
--------------------------------------------------------------------------------
/phpunit.xml:
--------------------------------------------------------------------------------
1 |
2 |
11 |
12 |
13 | ./tests/Unit
14 |
15 |
16 |
17 | ./tests/Feature
18 |
19 |
20 |
21 |
22 | ./app
23 |
24 |
25 |
26 |
27 |
28 |
29 |
30 |
31 |
32 |
33 |
34 |
--------------------------------------------------------------------------------
/app/Http/Controllers/Auth/VerificationController.php:
--------------------------------------------------------------------------------
1 | middleware('auth');
38 | $this->middleware('signed')->only('verify');
39 | $this->middleware('throttle:6,1')->only('verify', 'resend');
40 | }
41 | }
42 |
--------------------------------------------------------------------------------
/app/Exceptions/Handler.php:
--------------------------------------------------------------------------------
1 | {{ _p('pages.login.headline', 'Welcome back!') }}
13 | @endsection
14 |
15 | @section('content')
16 |
21 | @php
22 | alert('', 'Please authenticate using email: "test@test.com" and password: "secret"', 'success')
23 | ->to('top-auth2-perm');
24 | @endphp
25 | @notify(['name' => 'top-auth2-perm', 'stack' => false, 'config' => "{theme: 'inline', timeout: 0}"])
26 | @include('indigo-layout::auth.login')
27 | @endsection
28 |
29 | @section('footer')
30 | {!! _p('pages.login.footer-headline', 'Don\'t have an account? :link_name ', ['link_url' => route('register'), 'link_name' => 'Sign Up']) !!}
31 | @endsection
32 |
--------------------------------------------------------------------------------
/docker/nginx.conf:
--------------------------------------------------------------------------------
1 | user www-data;
2 | worker_processes auto;
3 | pid /run/nginx.pid;
4 |
5 | events {
6 | worker_connections 768;
7 | }
8 |
9 | http {
10 |
11 | # Basic Settings
12 | access_log /var/log/nginx/access.log;
13 | error_log /var/log/nginx/error.log debug;
14 |
15 | sendfile on;
16 | tcp_nopush on;
17 | tcp_nodelay on;
18 | keepalive_timeout 0;
19 | types_hash_max_size 2048;
20 |
21 | include /etc/nginx/mime.types;
22 | default_type application/octet-stream;
23 |
24 |
25 | # Virtual Host Configs
26 |
27 | # ------
28 |
29 | server {
30 | listen 5080 default_server;
31 | server_name _;
32 |
33 | index index.php;
34 | root /app/public;
35 |
36 | location / {
37 | try_files $uri $uri/ /index.php?$query_string;
38 | }
39 |
40 | location ~ \.php$ {
41 | if_modified_since off;
42 | fastcgi_pass_header Last-Modified;
43 | include fastcgi_params;
44 | fastcgi_pass awes-demo-php:9000;
45 | fastcgi_index index.php;
46 | fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
47 | }
48 | }
49 |
50 |
51 |
52 | }
53 |
--------------------------------------------------------------------------------
/config/services.php:
--------------------------------------------------------------------------------
1 | [
18 | 'domain' => env('MAILGUN_DOMAIN'),
19 | 'secret' => env('MAILGUN_SECRET'),
20 | 'endpoint' => env('MAILGUN_ENDPOINT', 'api.mailgun.net'),
21 | ],
22 |
23 | 'ses' => [
24 | 'key' => env('SES_KEY'),
25 | 'secret' => env('SES_SECRET'),
26 | 'region' => env('SES_REGION', 'us-east-1'),
27 | ],
28 |
29 | 'sparkpost' => [
30 | 'secret' => env('SPARKPOST_SECRET'),
31 | ],
32 |
33 | 'stripe' => [
34 | 'model' => App\User::class,
35 | 'key' => env('STRIPE_KEY'),
36 | 'secret' => env('STRIPE_SECRET'),
37 | 'webhook' => [
38 | 'secret' => env('STRIPE_WEBHOOK_SECRET'),
39 | 'tolerance' => env('STRIPE_WEBHOOK_TOLERANCE', 300),
40 | ],
41 | ],
42 |
43 | ];
44 |
--------------------------------------------------------------------------------
/.github/PULL_REQUEST_TEMPLATE.md:
--------------------------------------------------------------------------------
1 | A similar PR may already be submitted!
2 | Please search among the [Pull request](../) before creating one.
3 |
4 | Thanks for submitting a pull request! Please provide enough information so that others can review your pull request:
5 |
6 |
7 | ## Summary
8 |
9 |
10 |
11 | This PR fixes/implements the following **bugs/features**
12 |
13 | * [ ] Bug 1
14 | * [ ] Bug 2
15 | * [ ] Feature 1
16 | * [ ] Feature 2
17 | * [ ] Breaking changes
18 |
19 |
20 |
21 | Explain the **motivation** for making this change. What existing problem does the pull request solve?
22 |
23 |
24 |
25 | ## Test plan (required)
26 |
27 | Demonstrate the code is solid. Example: The exact commands you ran and their output, screenshots / videos if the pull request changes UI.
28 |
29 |
30 |
31 | ## Code formatting
32 |
33 |
34 |
35 | ## Closing issues
36 |
37 |
38 | Fixes #
39 |
40 | ## System GA
41 | [](https://github.com/awes-io/issues)
42 |
--------------------------------------------------------------------------------
/.github/ISSUE_TEMPLATE.md:
--------------------------------------------------------------------------------
1 | Your issue may already be reported!
2 | Please search on the [issue tracker](../) before creating one.
3 |
4 | ## Expected Behavior
5 |
6 |
7 |
8 | ## Current Behavior
9 |
10 |
11 |
12 | ## Possible Solution
13 |
14 |
15 |
16 | ## Steps to Reproduce (for bugs)
17 |
18 |
19 | 1.
20 | 2.
21 | 3.
22 | 4.
23 |
24 | ## Context
25 |
26 |
27 |
28 | ## Your Environment
29 |
30 | * Version used:
31 | * Browser Name and version:
32 | * Operating System and version (desktop or mobile):
33 | * Link to your project:
34 |
35 | ## System GA
36 | [](https://github.com/awes-io/issues)
37 |
--------------------------------------------------------------------------------
/app/Sections/Settings/Controllers/SettingController.php:
--------------------------------------------------------------------------------
1 | user();
31 |
32 | // $user->update($request->all());
33 |
34 | return notify(
35 | _p('pages.settings.notify.update', 'User data successfully updated'),
36 | $user
37 | );
38 | }
39 |
40 | public function password(ChangePassword $request)
41 | {
42 | $user = $request->user();
43 |
44 | // $user->update([
45 | // 'password' => Hash::make($request->password),
46 | // ]);
47 |
48 | return notify(
49 | _p('pages.settings.notify.password', 'Password successfully updated'),
50 | $user
51 | );
52 | }
53 | }
54 |
--------------------------------------------------------------------------------
/.github/ISSUE_TEMPLATE/bug_report.md:
--------------------------------------------------------------------------------
1 | ---
2 | name: Bug Report
3 | about: Tell us what happens instead of the expected behavior
4 | title: ''
5 | labels: ''
6 | assignees: ''
7 |
8 | ---
9 |
10 | Your issue may already be reported!
11 | Please search on the [issue tracker](../) before creating one.
12 |
13 | ## Expected Behavior
14 |
15 |
16 |
17 | ## Current Behavior
18 |
19 |
20 |
21 | ## Possible Solution
22 |
23 |
24 |
25 | ## Steps to Reproduce (for bugs)
26 |
27 |
28 | 1.
29 | 2.
30 | 3.
31 | 4.
32 |
33 | ## Context
34 |
35 |
36 |
37 | ## Your Environment
38 |
39 | * Version used:
40 | * Browser Name and version:
41 | * Operating System and version (desktop or mobile):
42 | * Link to your project:
43 |
44 | ## System GA
45 | [](https://github.com/awes-io/issues)
46 |
--------------------------------------------------------------------------------
/config/hashing.php:
--------------------------------------------------------------------------------
1 | 'bcrypt',
19 |
20 | /*
21 | |--------------------------------------------------------------------------
22 | | Bcrypt Options
23 | |--------------------------------------------------------------------------
24 | |
25 | | Here you may specify the configuration options that should be used when
26 | | passwords are hashed using the Bcrypt algorithm. This will allow you
27 | | to control the amount of time it takes to hash the given password.
28 | |
29 | */
30 |
31 | 'bcrypt' => [
32 | 'rounds' => env('BCRYPT_ROUNDS', 10),
33 | ],
34 |
35 | /*
36 | |--------------------------------------------------------------------------
37 | | Argon Options
38 | |--------------------------------------------------------------------------
39 | |
40 | | Here you may specify the configuration options that should be used when
41 | | passwords are hashed using the Argon algorithm. These will allow you
42 | | to control the amount of time it takes to hash the given password.
43 | |
44 | */
45 |
46 | 'argon' => [
47 | 'memory' => 1024,
48 | 'threads' => 2,
49 | 'time' => 2,
50 | ],
51 |
52 | ];
53 |
--------------------------------------------------------------------------------
/bootstrap/app.php:
--------------------------------------------------------------------------------
1 | singleton(
30 | Illuminate\Contracts\Http\Kernel::class,
31 | App\Http\Kernel::class
32 | );
33 |
34 | $app->singleton(
35 | Illuminate\Contracts\Console\Kernel::class,
36 | App\Console\Kernel::class
37 | );
38 |
39 | $app->singleton(
40 | Illuminate\Contracts\Debug\ExceptionHandler::class,
41 | App\Exceptions\Handler::class
42 | );
43 |
44 | /*
45 | |--------------------------------------------------------------------------
46 | | Return The Application
47 | |--------------------------------------------------------------------------
48 | |
49 | | This script returns the application instance. The instance is given to
50 | | the calling script so we can separate the building of the instances
51 | | from the actual running of the application and sending responses.
52 | |
53 | */
54 |
55 | return $app;
56 |
--------------------------------------------------------------------------------
/app/Sections/Leads/Controllers/LeadController.php:
--------------------------------------------------------------------------------
1 | leads = $leads;
18 | }
19 |
20 | public function index(Request $request)
21 | {
22 | return view('sections.leads.index', [
23 | 'h1' => _p('pages.leads.h1', 'Leads'),
24 | 'leads' => $this->scope($request)->response()->getData()
25 | ]);
26 | }
27 |
28 | public function scope(Request $request)
29 | {
30 | return Lead::collection(
31 | $this->leads->scope($request)->withCount('sales')
32 | ->latest()->smartPaginate()
33 | );
34 | }
35 |
36 | public function show(Request $request, $id)
37 | {
38 | $lead = $this->leads->findOrFail($id);
39 |
40 | return view('sections.leads.show', [
41 | 'h1' => $lead->name,
42 | 'lead' => $lead
43 | ]);
44 | }
45 |
46 | public function store(StoreLead $request)
47 | {
48 | $this->leads->create($request->all());
49 |
50 | return notify(_p('pages.leads.notify.store', 'New lead was successfully created'));
51 | }
52 |
53 | public function update(StoreLead $request, $id)
54 | {
55 | $this->leads->update($request->all(), $id);
56 |
57 | return notify(
58 | _p('pages.leads.notify.update', 'Lead was successfully updated'),
59 | new Lead($this->leads->find($id))
60 | );
61 | }
62 | }
63 |
--------------------------------------------------------------------------------
/config/broadcasting.php:
--------------------------------------------------------------------------------
1 | env('BROADCAST_DRIVER', 'null'),
19 |
20 | /*
21 | |--------------------------------------------------------------------------
22 | | Broadcast Connections
23 | |--------------------------------------------------------------------------
24 | |
25 | | Here you may define all of the broadcast connections that will be used
26 | | to broadcast events to other systems or over websockets. Samples of
27 | | each available type of connection are provided inside this array.
28 | |
29 | */
30 |
31 | 'connections' => [
32 |
33 | 'pusher' => [
34 | 'driver' => 'pusher',
35 | 'key' => env('PUSHER_APP_KEY'),
36 | 'secret' => env('PUSHER_APP_SECRET'),
37 | 'app_id' => env('PUSHER_APP_ID'),
38 | 'options' => [
39 | 'cluster' => env('PUSHER_APP_CLUSTER'),
40 | 'encrypted' => true,
41 | ],
42 | ],
43 |
44 | 'redis' => [
45 | 'driver' => 'redis',
46 | 'connection' => 'default',
47 | ],
48 |
49 | 'log' => [
50 | 'driver' => 'log',
51 | ],
52 |
53 | 'null' => [
54 | 'driver' => 'null',
55 | ],
56 |
57 | ],
58 |
59 | ];
60 |
--------------------------------------------------------------------------------
/app/Sections/Analytics/Controllers/AnalyticController.php:
--------------------------------------------------------------------------------
1 | leads = $leads;
20 | }
21 |
22 | public function index(Request $request)
23 | {
24 | return view('sections.analytics.index', [
25 | 'h1' => _p('pages.analytics.h1', 'Analytics'),
26 | 'leadsChartData' => $this->chart($request),
27 | ]);
28 | }
29 |
30 | public function chart(Request $request)
31 | {
32 | $builder = $this->leads;
33 |
34 | if ($request->is_premium) {
35 | $builder = $this->leads->where('is_premium', $request->is_premium);
36 | }
37 |
38 | $leadIds = $builder->get()->pluck('id')->toArray();
39 |
40 | return Reporter::report('period')
41 | ->from('leads')
42 | ->whereIn('id', $leadIds)
43 | ->period($request->period ?: 60)
44 | ->colors(['#6896c1'])
45 | ->backgroundColors([config('indigo-layout.chart_colors.blue')])
46 | ->datasetProperties([
47 | ['pointRadius' => 0, 'lineTension' => 0],
48 | ])->build()->chart();
49 | }
50 |
51 | public function scope(Request $request)
52 | {
53 | return Lead::collection(
54 | $this->leads->scope($request)->withCount('sales')
55 | ->latest()->smartPaginate()
56 | );
57 | }
58 | }
59 |
--------------------------------------------------------------------------------
/app/Providers/RouteServiceProvider.php:
--------------------------------------------------------------------------------
1 | mapApiRoutes();
39 |
40 | $this->mapWebRoutes();
41 |
42 | //
43 | }
44 |
45 | /**
46 | * Define the "web" routes for the application.
47 | *
48 | * These routes all receive session state, CSRF protection, etc.
49 | *
50 | * @return void
51 | */
52 | protected function mapWebRoutes()
53 | {
54 | Route::middleware('web')
55 | ->namespace($this->namespace)
56 | ->group(base_path('routes/web.php'));
57 | }
58 |
59 | /**
60 | * Define the "api" routes for the application.
61 | *
62 | * These routes are typically stateless.
63 | *
64 | * @return void
65 | */
66 | protected function mapApiRoutes()
67 | {
68 | Route::prefix('api')
69 | ->middleware('api')
70 | ->namespace($this->namespace)
71 | ->group(base_path('routes/api.php'));
72 | }
73 | }
74 |
--------------------------------------------------------------------------------
/resources/views/vendor/awesio-auth/twofactor/verify.blade.php:
--------------------------------------------------------------------------------
1 | @extends('awesio-auth::layouts.app')
2 |
3 | @section('content')
4 |
5 |
6 |
7 |
8 |
AWESIO Two Factor VERIFY
9 |
10 |
11 |
12 |
35 |
36 |
37 |
38 |
39 |
40 |
41 |
42 | @endsection
43 |
--------------------------------------------------------------------------------
/artisan:
--------------------------------------------------------------------------------
1 | #!/usr/bin/env php
2 | make(Illuminate\Contracts\Console\Kernel::class);
34 |
35 | $status = $kernel->handle(
36 | $input = new Symfony\Component\Console\Input\ArgvInput,
37 | new Symfony\Component\Console\Output\ConsoleOutput
38 | );
39 |
40 | /*
41 | |--------------------------------------------------------------------------
42 | | Shutdown The Application
43 | |--------------------------------------------------------------------------
44 | |
45 | | Once Artisan has finished running, we will fire off the shutdown events
46 | | so that any final work may be done by the application before we shut
47 | | down the process. This is the last thing to happen to the request.
48 | |
49 | */
50 |
51 | $kernel->terminate($input, $status);
52 |
53 | exit($status);
54 |
--------------------------------------------------------------------------------
/resources/views/vendor/awesio-auth/auth/verify.blade.php:
--------------------------------------------------------------------------------
1 | @extends('awesio-auth::layouts.app')
2 |
3 | @section('content')
4 |
5 |
6 |
7 |
8 |
{{ __('Verify email by code') }}
9 |
10 |
11 |
36 |
37 |
38 |
39 |
40 |
41 |
42 | @endsection
43 |
--------------------------------------------------------------------------------
/docker/php-7.2-fpm/Dockerfile:
--------------------------------------------------------------------------------
1 | FROM php:7.2-fpm
2 |
3 | RUN apt-get update && apt-get install -y \
4 | locales git unzip wget curl openssl ssh libz-dev libmemcached-dev \
5 | libfreetype6-dev libjpeg62-turbo-dev libmcrypt-dev libpng-dev libxml2-dev \
6 | mariadb-client
7 |
8 | RUN pecl install igbinary memcached redis xdebug \
9 | && docker-php-ext-configure gd \
10 | --with-freetype-dir=/usr/include/ \
11 | --with-jpeg-dir=/usr/include/ \
12 | --with-png-dir=/usr/include/ \
13 | && docker-php-ext-install -j$(nproc) gd mbstring tokenizer opcache pdo pdo_mysql mysqli zip bcmath soap \
14 | && docker-php-ext-enable memcached igbinary redis xdebug
15 |
16 | RUN dpkg-reconfigure locales \
17 | && locale-gen C.UTF-8 \
18 | && /usr/sbin/update-locale LANG=C.UTF-8
19 |
20 | # intl
21 | RUN apt-get update \
22 | && apt-get install -y libicu-dev \
23 | && docker-php-ext-configure intl \
24 | && docker-php-ext-install intl
25 |
26 | RUN curl -sL https://deb.nodesource.com/setup_8.x | bash - && apt-get install -y nodejs
27 |
28 | RUN echo 'en_US.UTF-8 UTF-8' >> /etc/locale.gen && locale-gen
29 |
30 | WORKDIR /app
31 |
32 | ENV LC_ALL C.UTF-8
33 | ENV LANG en_US.UTF-8
34 | ENV LANGUAGE en_US.UTF-8
35 |
36 | RUN curl -sS https://getcomposer.org/installer | php -- --install-dir=/usr/local/bin --filename=composer
37 |
38 | RUN composer global require "laravel/envoy=~1.0"
39 |
40 | COPY ./xdebug.ini /usr/local/etc/php/conf.d/xdebug.ini
41 |
42 | RUN sed -i "s/xdebug.remote_autostart=0/xdebug.remote_autostart=1/" /usr/local/etc/php/conf.d/xdebug.ini && \
43 | sed -i "s/xdebug.remote_enable=0/xdebug.remote_enable=1/" /usr/local/etc/php/conf.d/xdebug.ini && \
44 | sed -i "s/xdebug.cli_color=0/xdebug.cli_color=1/" /usr/local/etc/php/conf.d/xdebug.ini
45 |
46 | # Clean up
47 | RUN apt-get clean && \
48 | rm -rf /var/lib/apt/lists/* /tmp/* /var/tmp/* && \
49 | rm /var/log/lastlog /var/log/faillog
50 |
--------------------------------------------------------------------------------
/docker/supervisor/Dockerfile:
--------------------------------------------------------------------------------
1 | #
2 | #--------------------------------------------------------------------------
3 | # Image Setup
4 | #--------------------------------------------------------------------------
5 | #
6 |
7 | FROM php:7.1-alpine
8 |
9 | LABEL maintainer="Mahmoud Zalt "
10 |
11 | RUN apk --update add wget \
12 | curl \
13 | git \
14 | build-base \
15 | libmemcached-dev \
16 | libmcrypt-dev \
17 | libxml2-dev \
18 | zlib-dev \
19 | autoconf \
20 | cyrus-sasl-dev \
21 | libgsasl-dev \
22 | supervisor
23 |
24 | RUN docker-php-ext-install mysqli mbstring pdo pdo_mysql mcrypt tokenizer xml
25 |
26 | RUN rm /var/cache/apk/* \
27 | && mkdir -p /var/www
28 |
29 | #
30 | #--------------------------------------------------------------------------
31 | # Optional Supervisord Configuration
32 | #--------------------------------------------------------------------------
33 | #
34 | # Modify the ./supervisor.conf file to match your App's requirements.
35 | # Make sure you rebuild your container with every change.
36 | #
37 |
38 | #COPY supervisord.conf /etc/supervisord.conf
39 |
40 | ENTRYPOINT ["/usr/bin/supervisord", "-n", "-c", "/etc/supervisord.conf"]
41 |
42 | #
43 | #--------------------------------------------------------------------------
44 | # Optional Software's Installation
45 | #--------------------------------------------------------------------------
46 | #
47 | # If you need to modify this image, feel free to do it right here.
48 | #
49 | # -- Your awesome modifications go here -- #
50 |
51 | #
52 | #--------------------------------------------------------------------------
53 | # Check PHP version
54 | #--------------------------------------------------------------------------
55 | #
56 |
57 | RUN php -v | head -n 1 | grep -q "PHP 7.1."
58 |
59 | #
60 | #--------------------------------------------------------------------------
61 | # Final Touch
62 | #--------------------------------------------------------------------------
63 | #
64 |
65 | WORKDIR /etc/supervisor/conf.d/
66 |
--------------------------------------------------------------------------------
/public/index.php:
--------------------------------------------------------------------------------
1 |
8 | */
9 |
10 | define('LARAVEL_START', microtime(true));
11 |
12 | /*
13 | |--------------------------------------------------------------------------
14 | | Register The Auto Loader
15 | |--------------------------------------------------------------------------
16 | |
17 | | Composer provides a convenient, automatically generated class loader for
18 | | our application. We just need to utilize it! We'll simply require it
19 | | into the script here so that we don't have to worry about manual
20 | | loading any of our classes later on. It feels great to relax.
21 | |
22 | */
23 |
24 | require __DIR__.'/../vendor/autoload.php';
25 |
26 | /*
27 | |--------------------------------------------------------------------------
28 | | Turn On The Lights
29 | |--------------------------------------------------------------------------
30 | |
31 | | We need to illuminate PHP development, so let us turn on the lights.
32 | | This bootstraps the framework and gets it ready for use, then it
33 | | will load up this application so that we can run it and send
34 | | the responses back to the browser and delight our users.
35 | |
36 | */
37 |
38 | $app = require_once __DIR__.'/../bootstrap/app.php';
39 |
40 | /*
41 | |--------------------------------------------------------------------------
42 | | Run The Application
43 | |--------------------------------------------------------------------------
44 | |
45 | | Once we have the application, we can handle the incoming request
46 | | through the kernel, and send the associated response back to
47 | | the client's browser allowing them to enjoy the creative
48 | | and wonderful application we have prepared for them.
49 | |
50 | */
51 |
52 | $kernel = $app->make(Illuminate\Contracts\Http\Kernel::class);
53 |
54 | $response = $kernel->handle(
55 | $request = Illuminate\Http\Request::capture()
56 | );
57 |
58 | $response->send();
59 |
60 | $kernel->terminate($request, $response);
61 |
--------------------------------------------------------------------------------
/app/Http/Controllers/Auth/RegisterController.php:
--------------------------------------------------------------------------------
1 | middleware('guest');
41 | }
42 |
43 | /**
44 | * Get a validator for an incoming registration request.
45 | *
46 | * @param array $data
47 | * @return \Illuminate\Contracts\Validation\Validator
48 | */
49 | protected function validator(array $data)
50 | {
51 | return Validator::make($data, [
52 | 'name' => ['required', 'string', 'max:255'],
53 | 'email' => ['required', 'string', 'email', 'max:255', 'unique:users'],
54 | 'password' => ['required', 'string', 'min:6', 'confirmed'],
55 | ]);
56 | }
57 |
58 | /**
59 | * Create a new user instance after a valid registration.
60 | *
61 | * @param array $data
62 | * @return \App\User
63 | */
64 | protected function create(array $data)
65 | {
66 | return User::create([
67 | 'name' => $data['name'],
68 | 'email' => $data['email'],
69 | 'password' => Hash::make($data['password']),
70 | ]);
71 | }
72 | }
73 |
--------------------------------------------------------------------------------
/resources/views/sections/leads/show.blade.php:
--------------------------------------------------------------------------------
1 | @extends('indigo-layout::main')
2 |
3 | @section('meta_title', _p('pages.leads.meta_title', 'Leads') . ' // ' . config('app.name'))
4 | @section('meta_description', _p('pages.leads.meta_description', 'Leads captured by your app'))
5 |
6 | @push('head')
7 | @include('integration.favicons')
8 | @include('integration.ga')
9 | @endpush
10 |
11 | @section('content')
12 |
13 |
14 |
65 | @endsection
66 |
--------------------------------------------------------------------------------
/CODE_OF_CONDUCT.md:
--------------------------------------------------------------------------------
1 | # Contributor Covenant Code of Conduct
2 |
3 | ## Our Pledge
4 |
5 | In the interest of fostering an open and welcoming environment, we as
6 | contributors and maintainers pledge to making participation in our project and
7 | our community a harassment-free experience for everyone, regardless of age, body
8 | size, disability, ethnicity, sex characteristics, gender identity and expression,
9 | level of experience, education, socio-economic status, nationality, personal
10 | appearance, race, religion, or sexual identity and orientation.
11 |
12 | ## Our Standards
13 |
14 | Examples of behavior that contributes to creating a positive environment
15 | include:
16 |
17 | * Using welcoming and inclusive language
18 | * Being respectful of differing viewpoints and experiences
19 | * Gracefully accepting constructive criticism
20 | * Focusing on what is best for the community
21 | * Showing empathy towards other community members
22 |
23 | Examples of unacceptable behavior by participants include:
24 |
25 | * The use of sexualized language or imagery and unwelcome sexual attention or
26 | advances
27 | * Trolling, insulting/derogatory comments, and personal or political attacks
28 | * Public or private harassment
29 | * Publishing others' private information, such as a physical or electronic
30 | address, without explicit permission
31 | * Other conduct which could reasonably be considered inappropriate in a
32 | professional setting
33 |
34 | ## Our Responsibilities
35 |
36 | Project maintainers are responsible for clarifying the standards of acceptable
37 | behavior and are expected to take appropriate and fair corrective action in
38 | response to any instances of unacceptable behavior.
39 |
40 | Project maintainers have the right and responsibility to remove, edit, or
41 | reject comments, commits, code, wiki edits, issues, and other contributions
42 | that are not aligned to this Code of Conduct, or to ban temporarily or
43 | permanently any contributor for other behaviors that they deem inappropriate,
44 | threatening, offensive, or harmful.
45 |
46 | ## Scope
47 |
48 | This Code of Conduct applies both within project spaces and in public spaces
49 | when an individual is representing the project or its community. Examples of
50 | representing a project or community include using an official project e-mail
51 | address, posting via an official social media account, or acting as an appointed
52 | representative at an online or offline event. Representation of a project may be
53 | further defined and clarified by project maintainers.
54 |
55 | ## Enforcement
56 |
57 | Instances of abusive, harassing, or otherwise unacceptable behavior may be
58 | reported by contacting the project team at contact@awes.io. All
59 | complaints will be reviewed and investigated and will result in a response that
60 | is deemed necessary and appropriate to the circumstances. The project team is
61 | obligated to maintain confidentiality with regard to the reporter of an incident.
62 | Further details of specific enforcement policies may be posted separately.
63 |
64 | Project maintainers who do not follow or enforce the Code of Conduct in good
65 | faith may face temporary or permanent repercussions as determined by other
66 | members of the project's leadership.
67 |
68 | ## Attribution
69 |
70 | This Code of Conduct is adapted from the [Contributor Covenant][homepage], version 1.4,
71 | available at https://www.contributor-covenant.org/version/1/4/code-of-conduct.html
72 |
73 | [homepage]: https://www.contributor-covenant.org
74 |
75 | For answers to common questions about this code of conduct, see
76 | https://www.contributor-covenant.org/faq
77 |
--------------------------------------------------------------------------------
/readme.md:
--------------------------------------------------------------------------------
1 |
34 |
35 | ## Features
36 |
37 | * Free and Open-Source
38 | * 34 ready-to-use dedicated open-source packages
39 | * Awesome interface with a dark mode as an out-of-the-box feature
40 | * Easy to customize, based on Laravel & Vue.js
41 | * Well-designed for CRM, ERP, SaaS, Admin Dashboards, and Startups
42 | * Simple support of the applications
43 |
44 |
78 | Before proceeding, please check your email for a verification code and link.
79 | If you did not receive the email click here to request another.
80 |
152 |
153 | @endsection
154 |
--------------------------------------------------------------------------------
/config/session.php:
--------------------------------------------------------------------------------
1 | env('SESSION_DRIVER', 'file'),
22 |
23 | /*
24 | |--------------------------------------------------------------------------
25 | | Session Lifetime
26 | |--------------------------------------------------------------------------
27 | |
28 | | Here you may specify the number of minutes that you wish the session
29 | | to be allowed to remain idle before it expires. If you want them
30 | | to immediately expire on the browser closing, set that option.
31 | |
32 | */
33 |
34 | 'lifetime' => env('SESSION_LIFETIME', 120),
35 |
36 | 'expire_on_close' => false,
37 |
38 | /*
39 | |--------------------------------------------------------------------------
40 | | Session Encryption
41 | |--------------------------------------------------------------------------
42 | |
43 | | This option allows you to easily specify that all of your session data
44 | | should be encrypted before it is stored. All encryption will be run
45 | | automatically by Laravel and you can use the Session like normal.
46 | |
47 | */
48 |
49 | 'encrypt' => false,
50 |
51 | /*
52 | |--------------------------------------------------------------------------
53 | | Session File Location
54 | |--------------------------------------------------------------------------
55 | |
56 | | When using the native session driver, we need a location where session
57 | | files may be stored. A default has been set for you but a different
58 | | location may be specified. This is only needed for file sessions.
59 | |
60 | */
61 |
62 | 'files' => storage_path('framework/sessions'),
63 |
64 | /*
65 | |--------------------------------------------------------------------------
66 | | Session Database Connection
67 | |--------------------------------------------------------------------------
68 | |
69 | | When using the "database" or "redis" session drivers, you may specify a
70 | | connection that should be used to manage these sessions. This should
71 | | correspond to a connection in your database configuration options.
72 | |
73 | */
74 |
75 | 'connection' => env('SESSION_CONNECTION', null),
76 |
77 | /*
78 | |--------------------------------------------------------------------------
79 | | Session Database Table
80 | |--------------------------------------------------------------------------
81 | |
82 | | When using the "database" session driver, you may specify the table we
83 | | should use to manage the sessions. Of course, a sensible default is
84 | | provided for you; however, you are free to change this as needed.
85 | |
86 | */
87 |
88 | 'table' => 'sessions',
89 |
90 | /*
91 | |--------------------------------------------------------------------------
92 | | Session Cache Store
93 | |--------------------------------------------------------------------------
94 | |
95 | | When using the "apc" or "memcached" session drivers, you may specify a
96 | | cache store that should be used for these sessions. This value must
97 | | correspond with one of the application's configured cache stores.
98 | |
99 | */
100 |
101 | 'store' => env('SESSION_STORE', null),
102 |
103 | /*
104 | |--------------------------------------------------------------------------
105 | | Session Sweeping Lottery
106 | |--------------------------------------------------------------------------
107 | |
108 | | Some session drivers must manually sweep their storage location to get
109 | | rid of old sessions from storage. Here are the chances that it will
110 | | happen on a given request. By default, the odds are 2 out of 100.
111 | |
112 | */
113 |
114 | 'lottery' => [2, 100],
115 |
116 | /*
117 | |--------------------------------------------------------------------------
118 | | Session Cookie Name
119 | |--------------------------------------------------------------------------
120 | |
121 | | Here you may change the name of the cookie used to identify a session
122 | | instance by ID. The name specified here will get used every time a
123 | | new session cookie is created by the framework for every driver.
124 | |
125 | */
126 |
127 | 'cookie' => env(
128 | 'SESSION_COOKIE',
129 | Str::slug(env('APP_NAME', 'laravel'), '_').'_session'
130 | ),
131 |
132 | /*
133 | |--------------------------------------------------------------------------
134 | | Session Cookie Path
135 | |--------------------------------------------------------------------------
136 | |
137 | | The session cookie path determines the path for which the cookie will
138 | | be regarded as available. Typically, this will be the root path of
139 | | your application but you are free to change this when necessary.
140 | |
141 | */
142 |
143 | 'path' => '/',
144 |
145 | /*
146 | |--------------------------------------------------------------------------
147 | | Session Cookie Domain
148 | |--------------------------------------------------------------------------
149 | |
150 | | Here you may change the domain of the cookie used to identify a session
151 | | in your application. This will determine which domains the cookie is
152 | | available to in your application. A sensible default has been set.
153 | |
154 | */
155 |
156 | 'domain' => env('SESSION_DOMAIN', null),
157 |
158 | /*
159 | |--------------------------------------------------------------------------
160 | | HTTPS Only Cookies
161 | |--------------------------------------------------------------------------
162 | |
163 | | By setting this option to true, session cookies will only be sent back
164 | | to the server if the browser has a HTTPS connection. This will keep
165 | | the cookie from being sent to you if it can not be done securely.
166 | |
167 | */
168 |
169 | 'secure' => env('SESSION_SECURE_COOKIE', false),
170 |
171 | /*
172 | |--------------------------------------------------------------------------
173 | | HTTP Access Only
174 | |--------------------------------------------------------------------------
175 | |
176 | | Setting this value to true will prevent JavaScript from accessing the
177 | | value of the cookie and the cookie will only be accessible through
178 | | the HTTP protocol. You are free to modify this option if needed.
179 | |
180 | */
181 |
182 | 'http_only' => true,
183 |
184 | /*
185 | |--------------------------------------------------------------------------
186 | | Same-Site Cookies
187 | |--------------------------------------------------------------------------
188 | |
189 | | This option determines how your cookies behave when cross-site requests
190 | | take place, and can be used to mitigate CSRF attacks. By default, we
191 | | do not enable this as other CSRF protection services are in place.
192 | |
193 | | Supported: "lax", "strict"
194 | |
195 | */
196 |
197 | 'same_site' => null,
198 |
199 | ];
200 |
--------------------------------------------------------------------------------