This is the place where I share what I build and break, where I have fun.
pocc / merlink Goto Github PK
View Code? Open in Web Editor NEWThis program will connect desktop clients to Meraki firewalls
License: Apache License 2.0
This program will connect desktop clients to Meraki firewalls
License: Apache License 2.0
Add image advertisement + click-on-image ad link to login page
We need to package the files for macOS in a way that's portable.
Currently, we have a linux VPN script that works in isolation as well as the VPN GUI. It should be trivial to pass variables from the program to the linux script using Popen or similar.
When quit from the Mac's dock, Merlink says it's minimized and the notification lasts 1s. It's clearly quitting and the notification is wrong.
The powershell script correctly identifies that an error has occurred but returns 0 instead of 1.
Requires troubleshooting. This likely has something to do with the way that subprocess.call returns a value.
All linux VPN connections start with 'vpn-' using nmcli, regardless of what vpn_name is used.
On linux, command to build with cx_freeze
./venv/bin/python3 setup.py build
But it's going to diff on Windows
Verify that the Windows executable works as well
Finish basic validation tests that verify that simple mistakes have not been made.
Trigger if more arguments than argv[0] are specified on the command line (i.e. merlink -h triggers CLI where merlink launches the GUI). Planning on using argparse to achieve this.
merlink --username <username> --password <password> --org-id <org-id> --network-id <network-id>
merlink --username <username> --password <password> --org-name <org-name> --network-name <network-name>
This will not use dashboard at all and is a wrapper for the OS-dependent connect script. All parameters listed are required for a manual configuration.
merlink --username <username> --password <password> --address <address> --psk <psk> --vpn-name <vpn-name>
Add any additional powershell VPN options as preferences in the preferences dialog
macOS: Successful connection isn't registered
Add a section after connected status is confirmed
https://travis-ci.org/pocc/merlink/builds/400353842
https://travis-ci.org/pocc/merlink/builds/399901479
Traceback (most recent call last):
File "merlink/merlink.py", line 11, in
File "/home/travis/virtualenv/python3.6.3/lib/python3.6/site-packages/PyInstaller/loader/pyimod03_importers.py", line 714, in load_module
ModuleNotFoundError: No module named 'PyQt5.sip'
[13326] Failed to execute script merlink
Testing on virtual machine: Ubuntu 18.04
Add better documentation for data structures and functions
Error when I try to connect (in cmd):
C:\merlink\dist\scripts\connect_windows.ps1 : The term
'C:\merlink\dist\scripts\connect_windows.ps1' is not recognized as the name of a cmdlet, function, script
file, or operable program. Check the spelling of the name, or if a path was included, verify that the path is correct
and try again.
'g_io_module_load': /usr/lib/x86_64-linux-gnu/gio/modules/libgiolibproxy.so: undefined symbol: g_io_module_load
Failed to load module: /usr/lib/x86_64-linux-gnu/gio/modules/libgiolibproxy.so
'g_io_module_load': /usr/lib/x86_64-linux-gnu/gio/modules/libgiognomeproxy.so: undefined symbol: g_io_module_load
Failed to load module: /usr/lib/x86_64-linux-gnu/gio/modules/libgiognomeproxy.so
'g_io_module_load': /usr/lib/x86_64-linux-gnu/gio/modules/libgiognutls.so: undefined symbol: g_io_module_load
Failed to load module: /usr/lib/x86_64-linux-gnu/gio/modules/libgiognutls.so
When you are able to get it to work, give it tag 0.1.1
If users don't have a working internet connection, they're wasting time by trying to use this program as this is a requirement for VPN.
Create an installer that will put the settings and core files in the correct place (according to OS)
This error is shown in the GUI after attempting to connect for VPN connection named vpn-l2tp:
The VPN connection 'vpn-l2tp' failed because the VPN service failed to start
Currently pyinstaller --onefile will successfully create a single binary with everything in it, but won't contain directories internal to the binary that are required for the script. Specifically, images seem to be affected.
Looks like this is a known issue
Be able to login with any user who has been added in Client VPN
This will require a prompt in the MainWindow
Some administrators use TFA. Those that do won't be able to use this program unless TFA support is implemented.
Add a QDialog window popup when TFA is encountered. Use the same submit system that hitting the login_window's "login" button has.
Windows version generates a failure popup when the script succeeds
While I'm using the IP address I find at '{"public_ip":' in the HTML, I'm not sure it's actually the primary.
Edge cases that need to be tested:
As Merlink will often hide in the background once you've closed it, you can have many instances of Merlink open in the taskbar
This is likely due to cx_freeze globbing many libraries that aren't necessary.
To build, use this command from project root:
./venv/bin/python3 setup.py build
./venv/bin/python3 can be replaced with whichever python3
Components
"I'm feeling lucky" button that will get info for and connect you to a random security appliance
When connecting with a network-only or 1-org admin, dropdowns contain network URL
None. Troubleshooting required.
Looks like it's as simple as using the --windowed command for PyInstaller: https://stackoverflow.com/questions/41129537/hide-the-console-of-an-exe-file-created-with-pyinstaller
QDialog for set-vpnconnection options as well as linux and mac ones that keeps track of all VPN options
Should have the same functionality as Windows app (Preferences will have some same, some different functionality)
I have a main file that is nearing 1000 lines it's becoming hard to find things and understand flows between different functions
scutil and networksetup will fail if there are multiple VPN connections with the same name.
If a user successfully connects, they no longer need to see VPN options
This could be used by both login_window and the main_window classes in order to decrease code repetition
This application lacks python or PyQt5 testing.
None of the images or icons load.
This is probably related to the usage of relative paths.
A declarative, efficient, and flexible JavaScript library for building user interfaces.
๐ Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
An Open Source Machine Learning Framework for Everyone
The Web framework for perfectionists with deadlines.
A PHP framework for web artisans
Bring data to life with SVG, Canvas and HTML. ๐๐๐
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
Some thing interesting about web. New door for the world.
A server is a program made to process requests and deliver data to clients.
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
Some thing interesting about visualization, use data art
Some thing interesting about game, make everyone happy.
We are working to build community through open source technology. NB: members must have two-factor auth.
Open source projects and samples from Microsoft.
Google โค๏ธ Open Source for everyone.
Alibaba Open Source for everyone
Data-Driven Documents codes.
China tencent open source team.