Adding config file for sharing.
[iot2.git] / others / lede-gui / src / main / java / com / example / lede2 / RegistrationRouterCheck.java
1 package com.example.lede2;\r
2 \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
26 \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
32 \r
33 \r
34 /**\r
35  * Created by kevin on 4/3/2018.\r
36  */\r
37 \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
52     Button back;\r
53     Button check;\r
54     Button load;\r
55 \r
56 \r
57 \r
58     @Override\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
65 \r
66 \r
67 \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
72 \r
73         back.setOnClickListener(this);\r
74         load.setOnClickListener(this);\r
75         check.setOnClickListener(this);\r
76 \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
83 \r
84         Snackbar mySnackBar = Snackbar.make(findViewById(R.id.main_layout_id), "Please Wait Until Wifi is Connected!", 2000);\r
85         mySnackBar.show();\r
86 \r
87         try{\r
88             routerConnection = new SSH();\r
89             routerConnection.execute("-ch " + newpsk);\r
90             Thread.sleep(1000);\r
91         } catch (Exception e) {\r
92             Log.d("SLEEP EXCEPTION", "SLEEP EXCEPTION occurs in onCreate method of EnrollDeviceActivity");\r
93         }\r
94 \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
101             }\r
102         }\r
103         WifiConfiguration wifiConfig = new WifiConfiguration();\r
104         wifiConfig.SSID = String.format("\"%s\"", "LEDE2");\r
105         wifiConfig.preSharedKey = String.format("\"%s\"", newpsk);\r
106 \r
107         int netId = manager.addNetwork(wifiConfig);\r
108         manager.disconnect();\r
109         manager.enableNetwork(netId, true);\r
110         manager.reconnect();\r
111 \r
112         ClipboardManager clipboard = (ClipboardManager) getSystemService(Context.CLIPBOARD_SERVICE);\r
113         ClipData clip = ClipData.newPlainText("new password", newpsk);\r
114         clipboard.setPrimaryClip(clip);\r
115     }\r
116 \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
123     }\r
124 \r
125     @Override\r
126     public void onClick(View v){\r
127         if(v == back){\r
128             if (isNetworkAvailable() == false) {//without wifi connection\r
129                 Toast t = Toast.makeText(this, R.string.connect, Toast.LENGTH_SHORT);\r
130                 t.show();\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
138             }\r
139             else{\r
140                 List<String> routerOutput = new ArrayList<>();\r
141                 try{\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
148                 }\r
149                 ClipboardManager clipboard = (ClipboardManager) getSystemService(Context.CLIPBOARD_SERVICE);\r
150                 ClipData clip = ClipData.newPlainText("old password", "1qaz2wsx3edc");\r
151                 clipboard.setPrimaryClip(clip);\r
152 \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
161                     }\r
162                 }\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
166 \r
167                 int netId = manager.addNetwork(wifiConfig);\r
168                 manager.disconnect();\r
169                 manager.enableNetwork(netId, true);\r
170                 manager.reconnect();\r
171                 finish();\r
172             }\r
173         }\r
174 \r
175         if(v == load){\r
176             if (isNetworkAvailable() == false) {//without wifi connection\r
177                 Toast t = Toast.makeText(this, R.string.connect, Toast.LENGTH_SHORT);\r
178                 t.show();\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
186             }\r
187             else{\r
188                 List<String> routerOutput = new ArrayList<>();\r
189                 if(initialDHCP == null) {\r
190                     try {\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
196                             Thread.sleep(500);\r
197                             routerOutput = routerConnection.getResultLines();\r
198                         }\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
203                     }\r
204                 }\r
205                 else{\r
206                     Snackbar mySnackBar = Snackbar.make(findViewById(R.id.main_layout_id), "Already Loaded.", Snackbar.LENGTH_LONG);\r
207                     mySnackBar.show();\r
208                 }\r
209             }\r
210         }\r
211 \r
212 \r
213         if(v == check){\r
214             if (isNetworkAvailable() == false) {//without wifi connection\r
215                 Toast t = Toast.makeText(this, R.string.connect, Toast.LENGTH_SHORT);\r
216                 t.show();\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
224             }\r
225             else{\r
226                 if(initialDHCP != null) {\r
227                     List<String> routerOutput = new ArrayList<>();\r
228                     try {\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
234                             Thread.sleep(500);\r
235                             routerOutput = routerConnection.getResultLines();\r
236                         }\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
241                     }\r
242 \r
243                     if (!comparison(initialDHCP, tempDHCP)) {\r
244                         Intent i = new Intent(this, RegisterDeviceAdding.class);\r
245                         i.putExtra("newpsk", newpsk);\r
246                         startActivity(i);\r
247                         finish();\r
248                     }\r
249                     else{\r
250                         Snackbar mySnackBar = Snackbar.make(findViewById(R.id.main_layout_id), "Please Connect a New Device Before Clicking Check.", Snackbar.LENGTH_LONG);\r
251                         mySnackBar.show();\r
252                     }\r
253                 }\r
254                 else{\r
255                     Snackbar mySnackBar = Snackbar.make(findViewById(R.id.main_layout_id), "Please Click Load!", Snackbar.LENGTH_LONG);\r
256                     mySnackBar.show();\r
257                 }\r
258             }\r
259         }\r
260 \r
261 \r
262     }\r
263 \r
264 \r
265     private boolean comparison(String initialDeviceDat, String tempDeviceDat){\r
266         return initialDeviceDat.equals(tempDeviceDat);\r
267     }\r
268 \r
269     private void addSSHResulToConfig(List<String> results, String filename){\r
270         File dir = getFilesDir();\r
271         File file = new File(dir, filename);\r
272         file.delete();\r
273         for (int i = 0; i < results.size(); i++) {\r
274             ConfigFileIO.writeToFile(filename, results.get(i), this);\r
275         }\r
276     }\r
277 \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
283 \r
284         StringBuffer rndpassword = new StringBuffer();\r
285         Random rnd = new Random();\r
286         int digitnum = 20;\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
296             } else {    // A-Z\r
297                 rndpassword.append((char) ((int) (rnd.nextInt(26)) + 65));\r
298             }\r
299         }\r
300         password = rndpassword.toString();\r
301         return password;\r
302     }\r
303 \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
314                 }\r
315             }\r
316         }\r
317         return null;\r
318     }\r
319 \r
320     public void addSSHResultsToConfig(List<String> results, String filename) {\r
321         File dir = getFilesDir();\r
322         File file = new File(dir, filename);\r
323         file.delete();\r
324         for (int i = 0; i < results.size(); i++) {\r
325             ConfigFileIO.writeToFile(filename, results.get(i), this);\r
326         }\r
327     }\r
328 \r
329 \r
330 }\r