├── public ├── assets │ ├── js │ │ ├── archivey.js │ │ └── bootstrap.min.js │ └── css │ │ └── style.css ├── robots.txt ├── favicon.ico ├── .htaccess ├── web.config └── index.php ├── database ├── .gitignore ├── seeds │ └── DatabaseSeeder.php ├── migrations │ ├── 2016_12_18_090425_CreateFetchLogTable.php │ ├── 2016_12_17_094706_CreateArchiveLogTable.php │ ├── 2014_10_12_100000_create_password_resets_table.php │ ├── 2014_10_12_000000_create_users_table.php │ └── 2016_12_17_092250_CreateTweetsTable.php └── factories │ └── ModelFactory.php ├── resources ├── views │ ├── vendor │ │ ├── .gitkeep │ │ ├── notifications │ │ │ ├── email-plain.blade.php │ │ │ └── email.blade.php │ │ └── pagination │ │ │ ├── simple-default.blade.php │ │ │ ├── simple-bootstrap-4.blade.php │ │ │ ├── default.blade.php │ │ │ └── bootstrap-4.blade.php │ ├── partials │ │ ├── _errors.blade.php │ │ ├── _flash.blade.php │ │ └── _nav.blade.php │ ├── tweets │ │ ├── index.blade.php │ │ └── partials │ │ │ ├── _tweets.blade.php │ │ │ └── _counts.blade.php │ ├── auth │ │ ├── login.blade.php │ │ ├── passwords │ │ │ ├── email.blade.php │ │ │ └── reset.blade.php │ │ └── register.blade.php │ ├── admin │ │ ├── logs.blade.php │ │ └── stats.blade.php │ ├── layouts │ │ └── main.blade.php │ └── errors │ │ ├── 503.blade.php │ │ └── 404.blade.php ├── assets │ ├── sass │ │ ├── app.scss │ │ └── _variables.scss │ └── js │ │ ├── app.js │ │ ├── components │ │ └── Example.vue │ │ └── bootstrap.js └── lang │ └── en │ ├── pagination.php │ ├── auth.php │ ├── passwords.php │ └── validation.php ├── bootstrap ├── cache │ └── .gitignore ├── autoload.php └── app.php ├── storage ├── logs │ └── .gitignore ├── app │ ├── public │ │ └── .gitignore │ └── .gitignore └── framework │ ├── cache │ └── .gitignore │ ├── views │ └── .gitignore │ ├── sessions │ └── .gitignore │ └── .gitignore ├── .gitattributes ├── .gitignore ├── app ├── Archive │ ├── Log.php │ └── LogRepository.php ├── Fetcher │ └── FetchLog.php ├── Breadcrumbs │ ├── BreadcrumbInterface.php │ └── CreitiveBreadcrumb.php ├── Http │ ├── Middleware │ │ ├── EncryptCookies.php │ │ ├── VerifyCsrfToken.php │ │ ├── PrivateMiddleware.php │ │ └── RedirectIfAuthenticated.php │ ├── Controllers │ │ ├── Controller.php │ │ ├── LogController.php │ │ ├── AdminController.php │ │ ├── HomeController.php │ │ ├── Auth │ │ │ ├── ForgotPasswordController.php │ │ │ ├── LoginController.php │ │ │ ├── ResetPasswordController.php │ │ │ └── RegisterController.php │ │ └── TweetController.php │ └── Kernel.php ├── Tweets │ ├── TweetQuery.php │ ├── TweetType.php │ ├── Api.php │ ├── TweetPresenter.php │ ├── Tweet.php │ ├── TweetRepository.php │ └── Formatter.php ├── Providers │ ├── AppServiceProvider.php │ ├── BroadcastServiceProvider.php │ ├── AuthServiceProvider.php │ ├── EventServiceProvider.php │ └── RouteServiceProvider.php ├── helpers.php ├── User.php ├── Console │ ├── Kernel.php │ └── Commands │ │ ├── Setup.php │ │ ├── Fetch.php │ │ └── Import.php └── Exceptions │ └── Handler.php ├── readme.md ├── .env.example ├── package.json ├── tests ├── ExampleTest.php └── TestCase.php ├── routes ├── api.php ├── console.php └── web.php ├── gulpfile.js ├── server.php ├── config ├── ttwitter.php ├── compile.php ├── services.php ├── view.php ├── broadcasting.php ├── filesystems.php ├── queue.php ├── cache.php ├── auth.php ├── database.php ├── mail.php ├── session.php └── app.php ├── phpunit.xml ├── LICENSE.md ├── composer.json └── artisan /public/assets/js/archivey.js: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /database/.gitignore: -------------------------------------------------------------------------------- 1 | *.sqlite 2 | -------------------------------------------------------------------------------- /resources/views/vendor/.gitkeep: -------------------------------------------------------------------------------- 1 | 2 | -------------------------------------------------------------------------------- /bootstrap/cache/.gitignore: -------------------------------------------------------------------------------- 1 | * 2 | !.gitignore 3 | -------------------------------------------------------------------------------- /storage/logs/.gitignore: -------------------------------------------------------------------------------- 1 | * 2 | !.gitignore 3 | -------------------------------------------------------------------------------- /public/robots.txt: -------------------------------------------------------------------------------- 1 | User-agent: * 2 | Disallow: 3 | -------------------------------------------------------------------------------- /storage/app/public/.gitignore: -------------------------------------------------------------------------------- 1 | * 2 | !.gitignore 3 | -------------------------------------------------------------------------------- /storage/app/.gitignore: -------------------------------------------------------------------------------- 1 | * 2 | !public/ 3 | !.gitignore 4 | -------------------------------------------------------------------------------- /storage/framework/cache/.gitignore: -------------------------------------------------------------------------------- 1 | * 2 | !.gitignore 3 | -------------------------------------------------------------------------------- /storage/framework/views/.gitignore: -------------------------------------------------------------------------------- 1 | * 2 | !.gitignore 3 | -------------------------------------------------------------------------------- /storage/framework/sessions/.gitignore: -------------------------------------------------------------------------------- 1 | * 2 | !.gitignore 3 | -------------------------------------------------------------------------------- /.gitattributes: -------------------------------------------------------------------------------- 1 | * text=auto 2 | *.css linguist-vendored 3 | *.scss linguist-vendored 4 | -------------------------------------------------------------------------------- /public/favicon.ico: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/rknightuk/one40/HEAD/public/favicon.ico -------------------------------------------------------------------------------- /storage/framework/.gitignore: -------------------------------------------------------------------------------- 1 | config.php 2 | routes.php 3 | schedule-* 4 | compiled.php 5 | services.json 6 | events.scanned.php 7 | routes.scanned.php 8 | down 9 | -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | /node_modules 2 | /public/storage 3 | /storage/*.key 4 | /resources/archive/* 5 | /vendor 6 | /.idea 7 | Homestead.json 8 | Homestead.yaml 9 | .env 10 | -------------------------------------------------------------------------------- /resources/views/partials/_errors.blade.php: -------------------------------------------------------------------------------- 1 | @if ($errors->any()) 2 | 7 | @endif -------------------------------------------------------------------------------- /app/Archive/Log.php: -------------------------------------------------------------------------------- 1 | $filename]); 15 | } 16 | 17 | } -------------------------------------------------------------------------------- /readme.md: -------------------------------------------------------------------------------- 1 | # One40 — Self Hosted Twitter Archive 2 | 3 | A personal, searchable Twitter archive built with Laravel. 4 | 5 | Archived repo. Try [Tweetback](https://github.com/tweetback) or [https://tinysubversions.com/twitter-archive/make-your-own/](https://tinysubversions.com/twitter-archive/make-your-own/) 6 | -------------------------------------------------------------------------------- /app/Breadcrumbs/BreadcrumbInterface.php: -------------------------------------------------------------------------------- 1 | call(UsersTableSeeder::class); 15 | } 16 | } 17 | -------------------------------------------------------------------------------- /resources/views/partials/_flash.blade.php: -------------------------------------------------------------------------------- 1 | @if (Session::has('flash_notification.message')) 2 |
3 | 4 | 5 | {!! Session::get('flash_notification.message') !!} 6 |
7 | @endif -------------------------------------------------------------------------------- /.env.example: -------------------------------------------------------------------------------- 1 | APP_ENV=production 2 | APP_DEBUG=false 3 | 4 | DB_CONNECTION=mysql 5 | DB_HOST=127.0.0.1 6 | DB_PORT=3306 7 | DB_DATABASE=one40 8 | DB_USERNAME= 9 | DB_PASSWORD= 10 | 11 | PRIVATE=false 12 | TWITTER_USERNAME= 13 | TWITTER_CONSUMER_KEY= 14 | TWITTER_CONSUMER_SECRET= 15 | TWITTER_ACCESS_TOKEN= 16 | TWITTER_ACCESS_TOKEN_SECRET= 17 | 18 | SESSION_DRIVER=cookie -------------------------------------------------------------------------------- /app/Http/Middleware/EncryptCookies.php: -------------------------------------------------------------------------------- 1 | visit('/') 17 | ->see('Laravel'); 18 | } 19 | } 20 | -------------------------------------------------------------------------------- /app/Tweets/TweetQuery.php: -------------------------------------------------------------------------------- 1 | year = $year; 15 | } 16 | 17 | public function forMonth($month) 18 | { 19 | $this->month = $month; 20 | } 21 | 22 | public function forDate($date) 23 | { 24 | $this->date = $date; 25 | } 26 | 27 | public function search($search) 28 | { 29 | $this->search = $search; 30 | } 31 | 32 | } -------------------------------------------------------------------------------- /app/Providers/AppServiceProvider.php: -------------------------------------------------------------------------------- 1 | user(); 19 | 20 | if (env('PRIVATE') && ! $user) return redirect('login'); 21 | 22 | return $next($request); 23 | } 24 | } 25 | -------------------------------------------------------------------------------- /app/Http/Controllers/LogController.php: -------------------------------------------------------------------------------- 1 | paginate(30); 12 | 13 | return view('admin.logs', compact( 14 | 'logs' 15 | )); 16 | } 17 | 18 | public function purge() 19 | { 20 | $logs = FetchLog::all(); 21 | 22 | $ids = $logs->pluck('id'); 23 | 24 | FetchLog::destroy($ids->toArray()); 25 | 26 | return redirect('logs'); 27 | } 28 | } 29 | -------------------------------------------------------------------------------- /app/Http/Controllers/AdminController.php: -------------------------------------------------------------------------------- 1 | tweets = $tweets; 17 | } 18 | 19 | public function stats() 20 | { 21 | list($totals, $clients, $average) = $this->tweets->stats(); 22 | 23 | return view('admin.stats', compact( 24 | 'totals', 'clients', 'average' 25 | )); 26 | } 27 | } 28 | -------------------------------------------------------------------------------- /app/Http/Controllers/HomeController.php: -------------------------------------------------------------------------------- 1 | middleware('auth'); 17 | } 18 | 19 | /** 20 | * Show the application dashboard. 21 | * 22 | * @return \Illuminate\Http\Response 23 | */ 24 | public function index() 25 | { 26 | return view('home'); 27 | } 28 | } 29 | -------------------------------------------------------------------------------- /routes/api.php: -------------------------------------------------------------------------------- 1 | user(); 18 | })->middleware('auth:api'); 19 | -------------------------------------------------------------------------------- /app/Breadcrumbs/CreitiveBreadcrumb.php: -------------------------------------------------------------------------------- 1 | comment(Inspiring::quote()); 18 | })->describe('Display an inspiring quote'); 19 | -------------------------------------------------------------------------------- /gulpfile.js: -------------------------------------------------------------------------------- 1 | const elixir = require('laravel-elixir'); 2 | 3 | require('laravel-elixir-vue-2'); 4 | 5 | /* 6 | |-------------------------------------------------------------------------- 7 | | Elixir Asset Management 8 | |-------------------------------------------------------------------------- 9 | | 10 | | Elixir provides a clean, fluent API for defining some basic Gulp tasks 11 | | for your Laravel application. By default, we are compiling the Sass 12 | | file for your application as well as publishing vendor resources. 13 | | 14 | */ 15 | 16 | elixir(mix => { 17 | mix.sass('app.scss') 18 | .webpack('app.js'); 19 | }); 20 | -------------------------------------------------------------------------------- /resources/lang/en/pagination.php: -------------------------------------------------------------------------------- 1 | '« Previous', 17 | 'next' => 'Next »', 18 | 19 | ]; 20 | -------------------------------------------------------------------------------- /public/.htaccess: -------------------------------------------------------------------------------- 1 | 2 | 3 | Options -MultiViews 4 | 5 | 6 | RewriteEngine On 7 | 8 | # Redirect Trailing Slashes If Not A Folder... 9 | RewriteCond %{REQUEST_FILENAME} !-d 10 | RewriteRule ^(.*)/$ /$1 [L,R=301] 11 | 12 | # Handle Front Controller... 13 | RewriteCond %{REQUEST_FILENAME} !-d 14 | RewriteCond %{REQUEST_FILENAME} !-f 15 | RewriteRule ^ index.php [L] 16 | 17 | # Handle Authorization Header 18 | RewriteCond %{HTTP:Authorization} . 19 | RewriteRule .* - [E=HTTP_AUTHORIZATION:%{HTTP:Authorization}] 20 | 21 | -------------------------------------------------------------------------------- /server.php: -------------------------------------------------------------------------------- 1 | 8 | */ 9 | 10 | $uri = urldecode( 11 | parse_url($_SERVER['REQUEST_URI'], PHP_URL_PATH) 12 | ); 13 | 14 | // This file allows us to emulate Apache's "mod_rewrite" functionality from the 15 | // built-in PHP web server. This provides a convenient way to test a Laravel 16 | // application without having installed a "real" web server software here. 17 | if ($uri !== '/' && file_exists(__DIR__.'/public'.$uri)) { 18 | return false; 19 | } 20 | 21 | require_once __DIR__.'/public/index.php'; 22 | -------------------------------------------------------------------------------- /tests/TestCase.php: -------------------------------------------------------------------------------- 1 | make(Illuminate\Contracts\Console\Kernel::class)->bootstrap(); 22 | 23 | return $app; 24 | } 25 | } 26 | -------------------------------------------------------------------------------- /app/Http/Middleware/RedirectIfAuthenticated.php: -------------------------------------------------------------------------------- 1 | check()) { 21 | return redirect('/home'); 22 | } 23 | 24 | return $next($request); 25 | } 26 | } 27 | -------------------------------------------------------------------------------- /resources/assets/js/app.js: -------------------------------------------------------------------------------- 1 | 2 | /** 3 | * First we will load all of this project's JavaScript dependencies which 4 | * include Vue and Vue Resource. This gives a great starting point for 5 | * building robust, powerful web applications using Vue and Laravel. 6 | */ 7 | 8 | require('./bootstrap'); 9 | 10 | /** 11 | * Next, we will create a fresh Vue application instance and attach it to 12 | * the page. Then, you may begin adding components to this application 13 | * or customize the JavaScript scaffolding to fit your unique needs. 14 | */ 15 | 16 | Vue.component('example', require('./components/Example.vue')); 17 | 18 | const app = new Vue({ 19 | el: '#app' 20 | }); 21 | -------------------------------------------------------------------------------- /app/Providers/BroadcastServiceProvider.php: -------------------------------------------------------------------------------- 1 | id === (int) $userId; 24 | }); 25 | } 26 | } 27 | -------------------------------------------------------------------------------- /app/helpers.php: -------------------------------------------------------------------------------- 1 | 'January', 7 | 2 => 'February', 8 | 3 => 'March', 9 | 4 => 'April', 10 | 5 => 'May', 11 | 6 => 'June', 12 | 7 => 'July', 13 | 8 => 'August', 14 | 9 => 'September', 15 | 10 => 'October', 16 | 11 => 'November', 17 | 12 => 'December' 18 | ]; 19 | 20 | return $months[$month]; 21 | } 22 | 23 | function displayDate($date) 24 | { 25 | $ends = array('th','st','nd','rd','th','th','th','th','th','th'); 26 | if (($date %100) >= 11 && ($date%100) <= 13) 27 | $abbreviation = $date. 'th'; 28 | else 29 | $abbreviation = $date. $ends[$date % 10]; 30 | 31 | return $abbreviation; 32 | } -------------------------------------------------------------------------------- /resources/assets/js/components/Example.vue: -------------------------------------------------------------------------------- 1 | 16 | 17 | 24 | -------------------------------------------------------------------------------- /resources/views/vendor/pagination/simple-default.blade.php: -------------------------------------------------------------------------------- 1 | @if ($paginator->hasPages()) 2 | 17 | @endif 18 | -------------------------------------------------------------------------------- /app/Tweets/TweetType.php: -------------------------------------------------------------------------------- 1 | 'tweet', 13 | self::TYPE_REPLY => 'reply', 14 | self::TYPE_RETWEET => 'retweet', 15 | ]; 16 | 17 | public static function getTypeString($type, $plural = false) 18 | { 19 | $typeString = self::$types[$type]; 20 | 21 | if (! $plural) return $typeString; 22 | 23 | if ($type == self::TYPE_REPLY) 24 | { 25 | $typeString = 'replies'; 26 | } 27 | else { 28 | $typeString = $typeString . 's'; 29 | } 30 | 31 | return $typeString; 32 | } 33 | 34 | } -------------------------------------------------------------------------------- /resources/lang/en/auth.php: -------------------------------------------------------------------------------- 1 | 'These credentials do not match our records.', 17 | 'throttle' => 'Too many login attempts. Please try again in :seconds seconds.', 18 | 19 | ]; 20 | -------------------------------------------------------------------------------- /app/Providers/AuthServiceProvider.php: -------------------------------------------------------------------------------- 1 | 'App\Policies\ModelPolicy', 17 | ]; 18 | 19 | /** 20 | * Register any authentication / authorization services. 21 | * 22 | * @return void 23 | */ 24 | public function boot() 25 | { 26 | $this->registerPolicies(); 27 | 28 | // 29 | } 30 | } 31 | -------------------------------------------------------------------------------- /database/migrations/2016_12_18_090425_CreateFetchLogTable.php: -------------------------------------------------------------------------------- 1 | increments('id'); 19 | $table->integer('count'); 20 | $table->timestamps(); 21 | }); 22 | } 23 | 24 | /** 25 | * Reverse the migrations. 26 | * 27 | * @return void 28 | */ 29 | public function down() 30 | { 31 | Schema::drop('fetch_log'); 32 | } 33 | } 34 | -------------------------------------------------------------------------------- /app/Providers/EventServiceProvider.php: -------------------------------------------------------------------------------- 1 | [ 17 | 'App\Listeners\EventListener', 18 | ], 19 | ]; 20 | 21 | /** 22 | * Register any events for your application. 23 | * 24 | * @return void 25 | */ 26 | public function boot() 27 | { 28 | parent::boot(); 29 | 30 | // 31 | } 32 | } 33 | -------------------------------------------------------------------------------- /resources/views/tweets/index.blade.php: -------------------------------------------------------------------------------- 1 | @extends('layouts.main') 2 | 3 | @section('content') 4 | 5 |
6 | 7 |
8 | 9 | {!! Breadcrumbs::render() !!} 10 | 11 | @include('tweets.partials._tweets') 12 | 13 |
14 | 15 |
16 | 21 | 22 | @include('tweets.partials._counts') 23 | 24 |
25 | 26 |
27 | 28 | 31 | 32 | @endsection -------------------------------------------------------------------------------- /app/User.php: -------------------------------------------------------------------------------- 1 | attributes['password'] = Hash::make($password); 33 | } 34 | } 35 | -------------------------------------------------------------------------------- /database/migrations/2016_12_17_094706_CreateArchiveLogTable.php: -------------------------------------------------------------------------------- 1 | increments('id'); 19 | $table->string('filename'); 20 | $table->timestamps(); 21 | }); 22 | } 23 | 24 | /** 25 | * Reverse the migrations. 26 | * 27 | * @return void 28 | */ 29 | public function down() 30 | { 31 | Schema::drop('archive_log'); 32 | } 33 | } 34 | -------------------------------------------------------------------------------- /resources/views/vendor/pagination/simple-bootstrap-4.blade.php: -------------------------------------------------------------------------------- 1 | @if ($paginator->hasPages()) 2 | 17 | @endif 18 | -------------------------------------------------------------------------------- /database/factories/ModelFactory.php: -------------------------------------------------------------------------------- 1 | define(App\User::class, function (Faker\Generator $faker) { 16 | static $password; 17 | 18 | return [ 19 | 'name' => $faker->name, 20 | 'email' => $faker->unique()->safeEmail, 21 | 'password' => $password ?: $password = bcrypt('secret'), 22 | 'remember_token' => str_random(10), 23 | ]; 24 | }); 25 | -------------------------------------------------------------------------------- /database/migrations/2014_10_12_100000_create_password_resets_table.php: -------------------------------------------------------------------------------- 1 | string('email')->index(); 18 | $table->string('token')->index(); 19 | $table->timestamp('created_at')->nullable(); 20 | }); 21 | } 22 | 23 | /** 24 | * Reverse the migrations. 25 | * 26 | * @return void 27 | */ 28 | public function down() 29 | { 30 | Schema::dropIfExists('password_resets'); 31 | } 32 | } 33 | -------------------------------------------------------------------------------- /resources/lang/en/passwords.php: -------------------------------------------------------------------------------- 1 | 'Passwords must be at least six characters and match the confirmation.', 17 | 'reset' => 'Your password has been reset!', 18 | 'sent' => 'We have e-mailed your password reset link!', 19 | 'token' => 'This password reset token is invalid.', 20 | 'user' => "We can't find a user with that e-mail address.", 21 | 22 | ]; 23 | -------------------------------------------------------------------------------- /app/Tweets/Api.php: -------------------------------------------------------------------------------- 1 | $username, 22 | 'include_rts' => true, 23 | 'include_entities' => true, 24 | 'count' => 200 25 | ]; 26 | 27 | if ($sinceId) $params['since_id'] = $sinceId; 28 | if ($maxId) $params['max_id'] = $maxId; 29 | 30 | $data = Twitter::getUserTimeline($params); 31 | 32 | if (is_array($data) && isset($data[0]) && $data[0] === false) { 33 | throw new \Exception('Error fetching timeline'); 34 | } 35 | 36 | return $data; 37 | } 38 | 39 | } -------------------------------------------------------------------------------- /resources/views/auth/login.blade.php: -------------------------------------------------------------------------------- 1 | @extends('layouts.main') 2 | 3 | @section('content') 4 | 5 |
6 | {!! csrf_field() !!} 7 | 8 |
9 | 10 | 11 |
12 |
13 | 14 | 15 |
16 |
17 | 20 |
21 | 22 |
23 | 24 | @endsection -------------------------------------------------------------------------------- /database/migrations/2014_10_12_000000_create_users_table.php: -------------------------------------------------------------------------------- 1 | increments('id'); 18 | $table->string('email')->unique(); 19 | $table->string('password'); 20 | $table->rememberToken(); 21 | $table->timestamps(); 22 | }); 23 | } 24 | 25 | /** 26 | * Reverse the migrations. 27 | * 28 | * @return void 29 | */ 30 | public function down() 31 | { 32 | Schema::dropIfExists('users'); 33 | } 34 | } 35 | -------------------------------------------------------------------------------- /resources/views/admin/logs.blade.php: -------------------------------------------------------------------------------- 1 | @extends('layouts.main') 2 | 3 | @section('content') 4 | 5 |
6 | 7 |
8 | 9 |

Tweet Fetch Log

10 | 11 |
12 | {{ csrf_field() }} 13 | 14 | 15 |
16 | 17 |
18 | @forelse ($logs as $log) 19 |
20 | @if ($log->count) 21 |
{!! $log->created_at !!}
22 |
Imported {!! $log->count !!} @if ($log->count == 1) tweet @else tweets @endif
23 | @else 24 |
{!! $log->created_at !!} - No tweets found
25 | @endif 26 |
27 | @empty 28 | NO LOGS 29 | @endforelse 30 |
31 | 32 | {!! $logs->render() !!} 33 | 34 |
35 | 36 |
37 | 38 |
39 | 40 | @endsection -------------------------------------------------------------------------------- /resources/assets/sass/_variables.scss: -------------------------------------------------------------------------------- 1 | 2 | // Body 3 | $body-bg: #f5f8fa; 4 | 5 | // Borders 6 | $laravel-border-color: darken($body-bg, 10%); 7 | $list-group-border: $laravel-border-color; 8 | $navbar-default-border: $laravel-border-color; 9 | $panel-default-border: $laravel-border-color; 10 | $panel-inner-border: $laravel-border-color; 11 | 12 | // Brands 13 | $brand-primary: #3097D1; 14 | $brand-info: #8eb4cb; 15 | $brand-success: #2ab27b; 16 | $brand-warning: #cbb956; 17 | $brand-danger: #bf5329; 18 | 19 | // Typography 20 | $font-family-sans-serif: "Raleway", sans-serif; 21 | $font-size-base: 14px; 22 | $line-height-base: 1.6; 23 | $text-color: #636b6f; 24 | 25 | // Navbar 26 | $navbar-default-bg: #fff; 27 | 28 | // Buttons 29 | $btn-default-color: $text-color; 30 | 31 | // Inputs 32 | $input-border: lighten($text-color, 40%); 33 | $input-border-focus: lighten($brand-primary, 25%); 34 | $input-color-placeholder: lighten($text-color, 30%); 35 | 36 | // Panels 37 | $panel-default-heading-bg: #fff; 38 | -------------------------------------------------------------------------------- /config/ttwitter.php: -------------------------------------------------------------------------------- 1 | false, 7 | 8 | 'API_URL' => 'api.twitter.com', 9 | 'UPLOAD_URL' => 'upload.twitter.com', 10 | 'API_VERSION' => '1.1', 11 | 'AUTHENTICATE_URL' => 'https://api.twitter.com/oauth/authenticate', 12 | 'AUTHORIZE_URL' => 'https://api.twitter.com/oauth/authorize', 13 | 'ACCESS_TOKEN_URL' => 'https://api.twitter.com/oauth/access_token', 14 | 'REQUEST_TOKEN_URL' => 'https://api.twitter.com/oauth/request_token', 15 | 'USE_SSL' => true, 16 | 17 | 'CONSUMER_KEY' => function_exists('env') ? env('TWITTER_CONSUMER_KEY', '') : '', 18 | 'CONSUMER_SECRET' => function_exists('env') ? env('TWITTER_CONSUMER_SECRET', '') : '', 19 | 'ACCESS_TOKEN' => function_exists('env') ? env('TWITTER_ACCESS_TOKEN', '') : '', 20 | 'ACCESS_TOKEN_SECRET' => function_exists('env') ? env('TWITTER_ACCESS_TOKEN_SECRET', '') : '', 21 | ]; 22 | -------------------------------------------------------------------------------- /public/web.config: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | -------------------------------------------------------------------------------- /app/Http/Controllers/Auth/ForgotPasswordController.php: -------------------------------------------------------------------------------- 1 | middleware('guest'); 31 | } 32 | } 33 | -------------------------------------------------------------------------------- /phpunit.xml: -------------------------------------------------------------------------------- 1 | 2 | 11 | 12 | 13 | ./tests 14 | 15 | 16 | 17 | 18 | ./app 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | -------------------------------------------------------------------------------- /resources/views/tweets/partials/_tweets.blade.php: -------------------------------------------------------------------------------- 1 |