Browse Source

上传文件至 'src'

xdao 1 year ago
parent
commit
7cf2b463e9
5 changed files with 323 additions and 0 deletions
  1. 105 0
      src/README.md
  2. 43 0
      src/changes
  3. 20 0
      src/config.php
  4. 8 0
      src/fix-executables.sh
  5. 147 0
      src/index.html

+ 105 - 0
src/README.md

@@ -0,0 +1,105 @@
+# Wifi Pineapple Panel
+
+The idea of this project is to have a better panel for the pineapple NANO/TETRA  
+To install it, you just have to copy the contents of the src folder to / of the pineapple and reboot.
+
+
+# Changes
+
+The following functionalities are modified looking for a better user experience
+
+## General:
+ - Compress PNG images (size -55K)
+ - Compress SVG images (size -7K)
+ - Update Bootstrap to 3.4.1 (size +2K)
+ - Rebuild mobile view
+ - Add Chevron icon to accordions (size +1K)
+ - Change notification time from 6000 to 30000 (decrease RPM from 10 to 2)
+ - Added more refresh buttons
+ - Fixed several bugs found in the panel
+ - Expose AngularJS Pineapple API in JS window
+ - Add timeout and prevent duplicated request in API service
+ - Refactor all indexedDB code
+ - Removed use of php7-mod-sockets and php7-mod-openssl (size -200K)
+ - Implemented use of uclient-fetch as a replacement for wget and file_get_contents(https)
+
+## Dashboard
+ - Change update time from 5000 to 10000 (decrease RPM from 12 to 6)
+
+## Recon:
+ - Code refactor in module.php
+ - Add results counter in titles with badges
+ - Fix column alignment
+
+## Clients:
+ - Add loading indicator
+ - Change default text logic
+
+## PineAP:
+ - Configure used monitor interface (pineapd pineap_interface)
+ - Configure used source interface (pineapd source_mac grabber)
+ - Show pineapd service errors
+
+## Logging:
+ - Fire data loading on open accordion
+ - Add PineAP Logs loading indicator
+ - Save filters in cookies
+
+## Network:
+ - Add tabs
+ - Add "Wireless raw config editor" section
+ - Add "Info" section
+ - Add "Interface actions" section
+ - Decrease initial requests (from 8 to 3)
+ - Use new feed for out.txt updates
+
+## Advanced:
+ - Add tabs
+ - Add "Manual upgrade" section
+ - Decrease initial requests (from 8 to 3)
+ - Use Universal Wifi pineapple hardware cloner downloads as update feed
+ - Add "Keep settings and retain the current configuration" checkbox
+
+## Modules:
+ - Refactor in Modules.php
+ - Add support for injectJS in modules manifest
+ - Use new modules feed: https://github.com/xchwarze/wifi-pineapple-community/tree/main/modules
+
+
+# Notes
+
+1. For edit notification timer you can use this
+ ```bash
+ # sed -i 's/OLD-VALUE/NEW-VALUE/' FILE
+ sed -i 's/30000/60000/' src/pineapple/js/controllers.js
+```
+
+2. To open the menu on hover uncomment this in src/pineapple/main.css
+ ```css
+.sidebar:hover {
+	margin-left: 0;
+}
+.menu-toggle {
+	display: none !important;
+}
+```
+
+3. To develop locally you can point your panel to the pinapple replacing the src/pineapple/api/index.php with this
+ ```php
+<?php
+$endpoint = 'http://172.16.42.1:1471/api/index.php';
+$sessid = 'xxxxxxxxxxxxxxxxxxxxxxxxx';
+$xsrftoken = 'xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx';
+
+$ch = curl_init($endpoint);
+curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
+curl_setopt($ch, CURLOPT_POSTFIELDS, file_get_contents('php://input'));
+curl_setopt($ch, CURLOPT_COOKIE, "PHPSESSID={$sessid}");
+curl_setopt($ch, CURLOPT_HTTPHEADER, ["X-XSRF-TOKEN: {$xsrftoken}"]);
+
+$response = curl_exec($ch);
+curl_close($ch);
+header('Content-Type: application/json');
+echo $response;
+```
+ 

+ 43 - 0
src/changes

@@ -0,0 +1,43 @@
+<ul>
+    <li>🚀常规🚀</li>
+    <ul>
+        <li>压缩图像</li>
+        <li>更新依赖关系</li>
+        <li>重建移动视图</li>
+        <li>修复和改进面板</li>
+        <li>减少请求以减少cpu使用</li>
+        <li>在API服务中添加超时并防止重复请求</li>
+        <li>重构所有indexedDB代码</li>
+        
+    </ul>
+
+    <li>🚀侦察🚀</li>
+    <ul>
+        <li>在标题中添加结果计数器</li>
+        <li>固定列对齐方式</li>
+    </ul>
+
+    <li>🚀PineAP🚀</li>
+    <ul>
+        <li>配置使用的监视器和源接口</li>
+        <li>显示pineapd服务错误</li>
+    </ul>
+
+    <li>🚀网络🚀</li>
+    <ul>
+        <li>添加选项卡</li>
+        <li>添加“无线配置编辑器”部分</li>
+        <li>添加“信息”部分</li>
+        <li>添加“界面操作”部分</li>
+        <li>使用out.txt更新</li>
+        <li>修复网络wifi检测</li>
+    </ul>
+
+    <li>🚀高级🚀</li>
+    <ul>
+        <li>添加选项卡</li>
+        <li>添加“手动升级”部分</li>
+        <li>使用Gitee.com下载作为更新源</li>
+    </ul>
+</ul>
+

+ 20 - 0
src/config.php

@@ -0,0 +1,20 @@
+<?php
+
+class DeviceConfig
+{
+    // third party modules can change the options based on this
+    // the allowed values are: "nano" or "tetra"
+    const DEVICE_TYPE = 'tetra';
+
+    const USE_INTERNAL_STORAGE = true;
+
+    const USE_USB_STORAGE = true;
+
+    const SHOW_FIREWALL_CONFIG = true;
+
+    // third party modules do not have this flag implemented
+    const SHOW_SCAN_TYPE = true;
+
+    // hide wlan0 in getClientInterfaces() enumeration
+    const HIDE_WLAN0_CLIENT = true;
+}

+ 8 - 0
src/fix-executables.sh

@@ -0,0 +1,8 @@
+#!/bin/sh
+
+chmod +x /etc/init.d/pineapd
+chmod +x /etc/uci-defaults/93-pineap.sh
+chmod +x /pineapple/modules/Advanced/formatSD/format_sd
+chmod +x /pineapple/modules/Help/files/debug
+chmod +x /pineapple/modules/PineAP/executable/executable
+chmod +x /pineapple/modules/Reporting/files/reporting

+ 147 - 0
src/index.html

@@ -0,0 +1,147 @@
+<!DOCTYPE html>
+<html lang="en" ng-app="pineapple">
+<head>
+    <meta charset="utf-8">
+    <meta name="viewport" content="width=device-width, initial-scale=1 maximum-scale=1, user-scalable=no">
+    <title>WiFi Pineapple</title>
+    <link rel="stylesheet" type="text/css" href="css/bootstrap.min.css">
+    <link rel="stylesheet" type="text/css" href="css/main.css">
+    <link rel="shortcut icon" href="img/favicon.ico" type="image/x-icon">
+    <link rel="icon" href="img/favicon.ico" type="image/x-icon">
+    <link rel="icon" href="img/favicon-32x32.png" type="image/png" sizes="32x32">
+    <link rel="icon" href="img/favicon-16x16.png" type="image/png" sizes="16x16">
+    <script src="js/vendor/jquery.min.js"></script>
+    <script src="js/vendor/bootstrap.min.js"></script>
+    <script src="js/vendor/angular.min.js"></script>
+    <script src="js/vendor/angular-route.min.js"></script>
+    <script src="js/vendor/angular-cookies.min.js"></script>
+    <script src="js/pineapple.js"></script>
+    <script src="js/services.js"></script>
+    <script src="js/filters.js"></script>
+    <script src="js/controllers.js"></script>
+    <script src="js/directives.js"></script>
+    <script src="js/helpers.js"></script>
+</head>
+
+<nav class="navbar navbar-default navbar-static-top">
+    <div class="navbar-header">
+        <button type="button" class="navbar-toggle" data-toggle="collapse" data-target=".navbar-collapse">
+            <span class="sr-only">切换导航</span>
+            <span class="icon-bar"></span>
+            <span class="icon-bar"></span>
+            <span class="icon-bar"></span>
+        </button>
+        <a class="navbar-brand" href="#!/module/Dashboard">
+            <span class="brand-logo"></span>
+            <span class="brand-text"></span>
+        </a>
+        <ul class="nav navbar-nav navbar-right pull-right navbar-top-links">
+            <li class="dropdown" ng-controller="NotificationController" ng-show="notifications.length">
+                <a class="dropdown-toggle" data-toggle="dropdown" href="">
+                    <img width="18px" src="img/notify.png"/>
+                    <span class="caret"></span>
+                </a>
+                <ul class="dropdown-menu dropdown-menu-right dropdown-menu-top">
+                    <li ng-repeat="notification in notifications"><a>{{ notification.message }}</a></li>
+                    <li role="separator" class="divider"></li>
+                    <li ng-click="clearNotifications()"><a><span class="text-center"><i>- 清除 -</i></span></a></li>
+                </ul>
+            </li>
+            <li class="dropdown logout" ng-controller="AuthenticationController">
+                <a class="dropdown-toggle" data-toggle="dropdown" href="">
+                    <img width="18px" src="img/logout.png"/>
+                    <span class="caret"></span>
+                </a>
+                <ul class="dropdown-menu dropdown-menu-right dropdown-menu-top dropdown-menu-logout">
+                    <li ng-click="logout()"><a>注销</a></li>
+                    <li ng-click="rebootPineapple()"><a>重启</a></li>
+                    <li ng-click="haltPineapple()"><a>关机</a></li>
+                </ul>
+            </li>
+        </ul>
+    </div>
+</nav>
+
+<div class="navbar-default sidebar" role="navigation" ng-controller="NavigationController">
+    <div class="sidebar-nav navbar-collapse collapse">
+        <ul class="nav sidebar-nav">
+            <li ng-repeat-start="systemModule in systemModules" ng-class="getClass(systemModule.name)" module="{{ systemModule.name }}">
+                <a href="#!/modules/{{ systemModule.name }}" title="{{ systemModule.title }}">
+                    <img class="module-icon pull-right" ng-src="{{ systemModule.icon }}" ng-if="systemModule.icon != null"/>
+                    {{ systemModule.title }}
+                </a>
+            </li>
+            <li ng-if="$index == 3" ng-repeat-end>
+                <a ng-class="getModuleClass()" onclick="$('.module-nav').collapse('toggle')" href='' data-ignore="true">
+                    <img class="module-icon pull-right" src="/modules/ModuleManager/module_icon.svg"/>
+                    模块 <span class="caret"></span>
+                </a>
+                <ul class="nav module-nav collapse">
+                    <li ng-class="getClass('ModuleManager')" module="ModuleManager">
+                        <a href="#!/modules/ModuleManager" title="Manage Modules">管理模块</a>
+                    </li>
+                    <li ng-class="getClass(userModule.name)" ng-repeat="userModule in userModules" module="{{ userModule.name }}">
+                        <a href="#!/modules/{{ userModule.name }}" title="{{ userModule.title }}">
+                            <img class="module-icon pull-right" ng-src="{{ userModule.icon }}" ng-if="userModule.icon != null"/>
+                            <span class="module-icon module-text pull-right" ng-if="userModule.icon == null">{{ getAlias(userModule.title) }}</span>
+                            {{ userModule.title }}
+                        </a>
+                    </li>
+                </ul>
+            </li>
+            <li class="menu-toggle hidden-lg hidden-xs">
+                <a onclick="$('div.sidebar').toggleClass('sidebar-toggle')" href="">
+                    <img class="module-icon menu-toggle-icon pull-right" src="/img/chevron_down_gray.svg" data-ignore="true"/>
+                    切换菜单
+                </a>
+            </li>
+        </ul>
+    </div>
+</div>
+
+<div class="module-content" ng-view></div>
+
+<div id="loginModal" class="modal fade" role="dialog"  data-keyboard="false" ng-controller="AuthenticationController">
+    <div class="modal-dialog">
+        <div class="modal-content">
+            <div class="modal-header">
+                <h4 class="modal-title">WiFi Pineapple 登录</h4>
+            </div>
+            <div class="modal-body">
+                <div class="row">
+                    <img class="img-responsive login-logo" src="img/logo.png"/>
+                </div>
+                <form role="form" ng-submit="login()">
+                    <fieldset>
+                        <div class="form-group">
+                            <input class="form-control" value="root" type="text" ng-model="username" tabindex="2" autocomplete="false">
+                        </div>
+                        <div class="form-group">
+                            <input class="form-control" placeholder="Password" type="password" ng-model="password" autofocus="autofocus" tabindex="1" autocomplete="current-password">
+                        </div>
+                        <div class="form-group">
+                            <div class="alert alert-danger" ng-show="message">
+                                {{ message }}
+                            </div>
+                        </div>
+                        <input class="btn btn-lg btn-success btn-block" type="submit" id="submit" value="Login" />
+                    </fieldset>
+                </form>
+            </div>
+        </div>
+
+    </div>
+</div>
+
+<script type="text/javascript">
+    $(function() {
+        $('div.sidebar').click(function(event) {
+            if (!$(event.target).attr("data-ignore")) {
+                $('div.sidebar').removeClass('sidebar-toggle');
+                $('div.sidebar-nav').collapse('hide');
+            }
+        });
+    });
+</script>
+</body>
+</html>