1 package com.example.lede2;
\r
3 import android.app.ProgressDialog;
\r
4 import android.content.Intent;
\r
5 import android.content.ClipData;
\r
6 import android.content.ClipboardManager;
\r
7 import android.content.Context;
\r
8 import android.net.ConnectivityManager;
\r
9 import android.net.NetworkInfo;
\r
10 import android.net.wifi.WifiConfiguration;
\r
11 import android.net.wifi.WifiInfo;
\r
12 import android.net.wifi.WifiManager;
\r
13 import android.os.SystemClock;
\r
14 import android.support.design.widget.Snackbar;
\r
15 import android.support.design.widget.CoordinatorLayout;
\r
16 import android.support.v7.app.AppCompatActivity;
\r
17 import android.os.Bundle;
\r
18 import android.view.View;
\r
19 import android.view.WindowManager;
\r
20 import android.view.inputmethod.InputMethodManager;
\r
21 import android.widget.Button;
\r
22 import android.widget.EditText;
\r
23 import android.widget.TextView;
\r
24 import android.widget.Toast;
\r
25 import android.util.Log;
\r
27 import java.util.ArrayList;
\r
28 import java.util.List;
\r
29 import java.io.File;
\r
30 import java.util.Random;
\r
31 import java.lang.Thread;
\r
35 * Created by kevin on 4/3/2018.
\r
38 public class RegistrationRouterCheck extends AppCompatActivity implements View.OnClickListener{
\r
39 private SSH routerConnection;
\r
40 private SSH routerConnection2;
\r
41 private String command;
\r
42 public String temp_dhcp_filename;
\r
43 public String initial_dhcp_filename;
\r
44 public String initialDHCP;
\r
45 private String tempDHCP;
\r
46 private String newpsk;
\r
47 private TextView password;
\r
48 private boolean initialDHCPCall;
\r
49 public String commandRouter = "cat /tmp/dhcp.leases";
\r
50 private WifiManager manager;
\r
51 ProgressDialog dialog;
\r
59 protected void onCreate(Bundle savedInstanceState) {
\r
60 super.onCreate(savedInstanceState);
\r
61 setContentView(R.layout.registration_layout);
\r
62 getWindow().addFlags(WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON);
\r
63 Context context = getApplicationContext();
\r
64 WifiManager manager = (WifiManager) context.getSystemService(Context.WIFI_SERVICE);
\r
68 password = (TextView) findViewById(R.id.newPassword);
\r
69 back = (Button) findViewById(R.id.back);
\r
70 load = (Button) findViewById(R.id.load);
\r
71 check = (Button) findViewById(R.id.check);
\r
73 back.setOnClickListener(this);
\r
74 load.setOnClickListener(this);
\r
75 check.setOnClickListener(this);
\r
77 command = "cat /tmp/dhcp.leases";
\r
78 temp_dhcp_filename = "temp_DHCP.txt";
\r
79 initial_dhcp_filename = this.getString(R.string.initial_DHCP);
\r
80 initialDHCPCall = false;
\r
81 newpsk = generateRandomPassword();
\r
82 password.setText(newpsk);
\r
84 Snackbar mySnackBar = Snackbar.make(findViewById(R.id.main_layout_id), "Please Wait Until Wifi is Connected!", 2000);
\r
88 routerConnection = new SSH();
\r
89 routerConnection.execute("-ch " + newpsk);
\r
91 } catch (Exception e) {
\r
92 Log.d("SLEEP EXCEPTION", "SLEEP EXCEPTION occurs in onCreate method of EnrollDeviceActivity");
\r
95 List<WifiConfiguration> list = manager.getConfiguredNetworks();
\r
96 for( WifiConfiguration i : list ) {
\r
97 if(i.SSID.equals("\"LEDE2\"")){
\r
98 manager.removeNetwork(i.networkId);
\r
99 manager.saveConfiguration();
\r
100 System.out.println("deleted");
\r
103 WifiConfiguration wifiConfig = new WifiConfiguration();
\r
104 wifiConfig.SSID = String.format("\"%s\"", "LEDE2");
\r
105 wifiConfig.preSharedKey = String.format("\"%s\"", newpsk);
\r
107 int netId = manager.addNetwork(wifiConfig);
\r
108 manager.disconnect();
\r
109 manager.enableNetwork(netId, true);
\r
110 manager.reconnect();
\r
112 ClipboardManager clipboard = (ClipboardManager) getSystemService(Context.CLIPBOARD_SERVICE);
\r
113 ClipData clip = ClipData.newPlainText("new password", newpsk);
\r
114 clipboard.setPrimaryClip(clip);
\r
117 boolean isNetworkAvailable() {//check whether wifi connection is or not
\r
118 Context context = getApplicationContext();
\r
119 ConnectivityManager cm = (ConnectivityManager) context.getSystemService(Context.CONNECTIVITY_SERVICE);
\r
120 NetworkInfo activeNetwork = cm.getActiveNetworkInfo();
\r
121 boolean isConnected = activeNetwork != null && activeNetwork.isConnectedOrConnecting();
\r
122 return isConnected;
\r
126 public void onClick(View v){
\r
128 if (isNetworkAvailable() == false) {//without wifi connection
\r
129 Toast t = Toast.makeText(this, R.string.connect, Toast.LENGTH_SHORT);
\r
131 //choosing wifi connection
\r
132 Intent intent = new Intent(WifiManager.ACTION_PICK_WIFI_NETWORK);
\r
133 intent.putExtra("only_access_points", true);
\r
134 intent.putExtra("extra_prefs_show_button_bar", true);
\r
135 intent.putExtra("wifi_enable_next_on_connect", true);
\r
136 startActivityForResult(intent,1);
\r
137 //startActivity(new Intent(WifiManager.ACTION_PICK_WIFI_NETWORK));
\r
140 List<String> routerOutput = new ArrayList<>();
\r
142 routerConnection = new SSH();
\r
143 routerConnection.execute("-ch 1qaz2wsx3edc");
\r
144 Thread.sleep(1000);
\r
145 } catch(Exception ex){
\r
146 ex.printStackTrace();
\r
147 Log.d("Sleep exception", "exception at Router SSH");
\r
149 ClipboardManager clipboard = (ClipboardManager) getSystemService(Context.CLIPBOARD_SERVICE);
\r
150 ClipData clip = ClipData.newPlainText("old password", "1qaz2wsx3edc");
\r
151 clipboard.setPrimaryClip(clip);
\r
153 Context context = getApplicationContext();
\r
154 WifiManager manager = (WifiManager) context.getSystemService(Context.WIFI_SERVICE);
\r
155 List<WifiConfiguration> list = manager.getConfiguredNetworks();
\r
156 for( WifiConfiguration i : list ) {
\r
157 if(i.SSID.equals("\"LEDE2\"")){
\r
158 manager.removeNetwork(i.networkId);
\r
159 manager.saveConfiguration();
\r
160 System.out.println("deleted");
\r
163 WifiConfiguration wifiConfig = new WifiConfiguration();
\r
164 wifiConfig.SSID = String.format("\"%s\"", "LEDE2");
\r
165 wifiConfig.preSharedKey = String.format("\"%s\"", context.getResources().getString(R.string.default_rpwd));
\r
167 int netId = manager.addNetwork(wifiConfig);
\r
168 manager.disconnect();
\r
169 manager.enableNetwork(netId, true);
\r
170 manager.reconnect();
\r
176 if (isNetworkAvailable() == false) {//without wifi connection
\r
177 Toast t = Toast.makeText(this, R.string.connect, Toast.LENGTH_SHORT);
\r
179 //choosing wifi connection
\r
180 Intent intent = new Intent(WifiManager.ACTION_PICK_WIFI_NETWORK);
\r
181 intent.putExtra("only_access_points", true);
\r
182 intent.putExtra("extra_prefs_show_button_bar", true);
\r
183 intent.putExtra("wifi_enable_next_on_connect", true);
\r
184 startActivityForResult(intent,1);
\r
185 //startActivity(new Intent(WifiManager.ACTION_PICK_WIFI_NETWORK));
\r
188 List<String> routerOutput = new ArrayList<>();
\r
189 if(initialDHCP == null) {
\r
191 routerConnection = new SSH();
\r
192 routerConnection.execute(commandRouter);
\r
193 Thread.sleep(1000);
\r
194 routerOutput = routerConnection.getResultLines();
\r
195 while (routerOutput.size() == 0) {
\r
197 routerOutput = routerConnection.getResultLines();
\r
199 addSSHResultsToConfig(routerOutput, initial_dhcp_filename);
\r
200 initialDHCP = ConfigFileIO.readFromFile(initial_dhcp_filename, this);
\r
201 } catch (Exception ex) {
\r
202 ex.printStackTrace();
\r
206 Snackbar mySnackBar = Snackbar.make(findViewById(R.id.main_layout_id), "Already Loaded.", Snackbar.LENGTH_LONG);
\r
214 if (isNetworkAvailable() == false) {//without wifi connection
\r
215 Toast t = Toast.makeText(this, R.string.connect, Toast.LENGTH_SHORT);
\r
217 //choosing wifi connection
\r
218 Intent intent = new Intent(WifiManager.ACTION_PICK_WIFI_NETWORK);
\r
219 intent.putExtra("only_access_points", true);
\r
220 intent.putExtra("extra_prefs_show_button_bar", true);
\r
221 intent.putExtra("wifi_enable_next_on_connect", true);
\r
222 startActivityForResult(intent,1);
\r
223 //startActivity(new Intent(WifiManager.ACTION_PICK_WIFI_NETWORK));
\r
226 if(initialDHCP != null) {
\r
227 List<String> routerOutput = new ArrayList<>();
\r
229 routerConnection = new SSH();
\r
230 routerConnection.execute(command);
\r
231 Thread.sleep(1000);
\r
232 routerOutput = routerConnection.getResultLines();
\r
233 while (routerOutput.size() == 0) {
\r
235 routerOutput = routerConnection.getResultLines();
\r
237 addSSHResulToConfig(routerOutput, temp_dhcp_filename);
\r
238 tempDHCP = ConfigFileIO.readFromFile(temp_dhcp_filename, this);
\r
239 } catch (Exception ex) {
\r
240 Log.d("SLEEP EXCEPTION", "SLEEP EXCEPTION occurs in onClick method of EnrollDeviceActivity");
\r
243 if (!comparison(initialDHCP, tempDHCP)) {
\r
244 Intent i = new Intent(this, RegisterDeviceAdding.class);
\r
245 i.putExtra("newpsk", newpsk);
\r
250 Snackbar mySnackBar = Snackbar.make(findViewById(R.id.main_layout_id), "Please Connect a New Device Before Clicking Check.", Snackbar.LENGTH_LONG);
\r
255 Snackbar mySnackBar = Snackbar.make(findViewById(R.id.main_layout_id), "Please Click Load!", Snackbar.LENGTH_LONG);
\r
265 private boolean comparison(String initialDeviceDat, String tempDeviceDat){
\r
266 return initialDeviceDat.equals(tempDeviceDat);
\r
269 private void addSSHResulToConfig(List<String> results, String filename){
\r
270 File dir = getFilesDir();
\r
271 File file = new File(dir, filename);
\r
273 for (int i = 0; i < results.size(); i++) {
\r
274 ConfigFileIO.writeToFile(filename, results.get(i), this);
\r
278 /******************************************************************************************************************************************************************/
\r
279 // Generate a random password and return it
\r
280 /******************************************************************************************************************************************************************/
\r
281 public String generateRandomPassword() {
\r
282 String password = new String();
\r
284 StringBuffer rndpassword = new StringBuffer();
\r
285 Random rnd = new Random();
\r
287 // Generate random 20digit password with upper / lower case alphabet + numbers
\r
288 // There are 10 int nums, 26 lower alphabets, 26 upper alphabets. Total 62
\r
289 // So 2/12 possiblity of int, 5/12 lower, 5/12 upper alphabets.
\r
290 for (int i = 0; i < digitnum; i++) {
\r
291 int rIndex = rnd.nextInt(12);
\r
292 if (rIndex >= 0 && rIndex < 2) { // 0 - 9
\r
293 rndpassword.append((rnd.nextInt(10)));
\r
294 } else if (rIndex >= 2 && rIndex < 7) { // a-z
\r
295 rndpassword.append((char) ((int) (rnd.nextInt(26)) + 97));
\r
297 rndpassword.append((char) ((int) (rnd.nextInt(26)) + 65));
\r
300 password = rndpassword.toString();
\r
304 /******************************************************************************************************************************************************************/
\r
305 //Detect you are connected to a specific network.
\r
306 /******************************************************************************************************************************************************************/
\r
307 public String getWifiName(Context context) {
\r
308 if (manager.isWifiEnabled()) {
\r
309 WifiInfo wifiInfo = manager.getConnectionInfo();
\r
310 if (wifiInfo != null) {
\r
311 NetworkInfo.DetailedState state = WifiInfo.getDetailedStateOf(wifiInfo.getSupplicantState());
\r
312 if (state == NetworkInfo.DetailedState.CONNECTED || state == NetworkInfo.DetailedState.OBTAINING_IPADDR) {
\r
313 return wifiInfo.getSSID();
\r
320 public void addSSHResultsToConfig(List<String> results, String filename) {
\r
321 File dir = getFilesDir();
\r
322 File file = new File(dir, filename);
\r
324 for (int i = 0; i < results.size(); i++) {
\r
325 ConfigFileIO.writeToFile(filename, results.get(i), this);
\r