---
# System prepended metadata

title: OVCT 的初步構想

---

# OVCT 的初步構想 
> [name= team B] 

Public open vpn reference source : [VPN gate][id]

[id]: https://www.vpngate.net/cn/

參考的 github tool 檔案架構 : https://github.com/Rafficer/linux-cli-community

## 功能預想：
預想的操作指令提示：
```
What will you do next?
1. initialize(可重複選擇)
   > 刪除原有站點清單與.ovpn 檔案，載入當前站點清單
2. update
   > 將現行網站清單與初始化清單進行比對，並新增原本沒有的站點至清單中
3. connection
   > 驅動 OpenVPN 連線掛載
```
Q : 是否可進行重複初始化?或本工具只能進行一次初始化
<!--Q2:是否保留filter功能-->

---

## 專案細節確認
Q : 作業系統：Linux | Windows

檔案架構圖：
![](https://i.imgur.com/PSh7KED.png)
list 存放站點清單
ovpn 存放連線檔案
command 存放功能指令(initialize, update, connect, etc)

### Initialize
* 若/ovpn內有資料則刪除所有檔案並清空station_list.csv
* 爬取reference並新增清單的站點儲存於 station_list.csv
* 依station_list 將所有 .ovpn 儲存於 /ovpn

### Update
* 爬取目前 vpn gate 的 station 清單
* 比對未在 station_list.csv 中出現的 station，新增 station 記錄至 station_list.csv
* 將新增 station 紀錄的 .opvn 存入/ovpn

<!--## 延展性：
透過 OOP 把清單(前10個?) station 實例化
station 是指不同的 open vpn server 站點, 儲存資料包含 station ip, speed, ovpn file
```
class Station():
     def __inity__(self, serverName, ip, country, speed, ovpn):
         self.serverName = serverName
         self.ip = ip
         self.country = country
         self.speed = speed
         self.ovpn = ovpn
     @method
     ...
```
OOP意義 : 
-->
--------------------------------------
其他功能方向：

Case 1 : 
```
Do you initialization ? (Yes/No)(啟動工具後僅問一次)
> Yes. File already loaded.
> No. Default file already loaded.
What will you do?
1. update
    > 將現行網站清單與初始化清單進行比對，並新增原本沒有的站點至清單中
2. connection
    > 驅動 openVPN 連線掛載
```

-----------------------------------
Case 2 : 
```
Initialize Finished.(啟動工具的同時執行)
1. update
2. connection
```