diff --git a/FreeTAKServer/README.md b/FreeTAKServer/README.md index d24d53ad..32aa9dec 100644 --- a/FreeTAKServer/README.md +++ b/FreeTAKServer/README.md @@ -4,27 +4,32 @@ Welcome to the FreeTakServer (FTS) git repository. -FTS is a Python3 implementation of the TAK Server for devices like CivTAK , WinTAK and ITAK, it is cross-platform. We use the Flask framework for web services. -it's free and open source (released under the Eclipse Public License). +FTS is a Python3 implementation of the TAK Server for devices like CivTAK , WinTAK and ITAK, it is cross-platform. We use the Flask framework for web services. +it's free and open source (released under the Eclipse Public License). ## User Documentation -For documentation on installation and usage visit https://freetakteam.github.io/FreeTAKServer-User-Docs/ + +For documentation on installation and usage visit ## Supported Use cases + FTS allows you to connect ATAK clients to share geo information, to chat with all the connected clients, exchange files and more. It intends to support all the major use cases of the original TAK server. ![the domain model with all the know objects used by CIVTAK/ wintak](https://github.com/Tapawingo/TAKlib/blob/master/docs/FreeTakServer%20specs/FreeTak%20Use%20Case%20model.png?raw=true) [Live version](http://pldemo.sparxsystems.us/TVHOG) -## Community -This code is currently in *Early Production Stage*. +## Community + +This code is currently in _Early Production Stage_. Check out our roadmap [@FreeTakServer#25](https://github.com/FreeTAKTeam/FreeTakServer/issues/25) to see what is planned -If you have any issues don't hesitate to [bring it up](https://github.com/Tapawingo/FreeTakServer/issues), as TAKFreeServer is in contionous development. +If you have any issues don't hesitate to [bring it up](https://github.com/Tapawingo/FreeTakServer/issues), as TAKFreeServer is in continuos development. ### Donate back -the FTS team is working daily on the development of a open and free solution. We plan to do more that simply replicate the functionalities of the legacy TAK server, our road map includes integration with open source systems like LORA's Meshtastic, porting it to Android, having an open API and much more. -We are doing it for free because we believe that donating personal time to a cause its a endeavour that is worthy per-se, However, a part time, we are also spending our own money to: +the FTS team is working daily on the development of a open and free solution. We plan to do more that simply replicate the functionalities of the legacy TAK server, our road map includes integration with open source systems like LORA's Meshtastic, porting it to Android, having an open API and much more. + +We are doing it for free because we believe that donating personal time to a cause its a endeavour that is worthy per-se, However, a part time, we are also spending our own money to: + - Maintain a Public server and a test server - Investing in different technologies for R&D @@ -37,83 +42,102 @@ NOTE: not a big fan of Paypal, but that is the easier way I found for an initial attempt. We may go to some more ethical system in future. ### Public instance + we support a [public instance](https://www.reddit.com/r/ATAK/wiki/index/freetakserver) of FTS. + - download the configuration [here](https://drive.google.com/file/d/1IK1LfPN13EWikHaMyOuDDwIerNGz-Wli/view?usp=sharing) - use the Import manager in ATAK to import the configuration -### Tell us what you think! +### Tell us what you think + to discuss with the developer team -Use the reddit server -https://www.reddit.com/r/ATAK/ +Use the reddit server + and the Discord chat -https://discordapp.com/invite/XEPyhHA + ## Architecture -TAKFreeServer uses a MVC pattern, the concept of a COT is described in a set of Domain classes, generated from the UML model using a Model Driven Architecture approach. + +TAKFreeServer uses a MVC pattern, the concept of a COT is described in a set of Domain classes, generated from the UML model using a Model Driven Architecture approach. ![the domain model with all the know objects used by CIVTAK/ wintak](https://github.com/FreeTAKTeam/FreeTakServer/blob/master/docs/FreeTAKServer%20Model.png) [Live version](http://pldemo.sparxsystems.us/Ldsd4T) [generated documentation of the COT description](https://github.com/FreeTAKTeam/FreeTakServer/blob/master/docs/FreeTakServer%20specs/COTDomainModel.pdf) ## Documentation + under /docs, you can find various documents including an UML model of the Domain classes involved in a COT event. ## Requirements -- Python 3.6 (or better) -following Python libraries are required and will be installed automatically by Pip: flask, lxml, pathlib, tabulate, sqlalchemy, setuptools, Flask-SQLAlchemy + +- Python 3.6 (or better) + following Python libraries are required and will be installed automatically by Pip: flask, lxml, pathlib, tabulate, sqlalchemy, setuptools, Flask-SQLAlchemy ## Installing and using FreeTakServer -For documentation on installation and usage visit https://freetakteam.github.io/FreeTAKServer-User-Docs/Installation/PyPi/Linux/Install/ + +For documentation on installation and usage visit ### Windows -go to the start menu and type ```cmd``` to start a command prompt + +go to the start menu and type `cmd` to start a command prompt open a console with admin rights Powershell has issues so do not use it + ``` python3 -m FreeTAKServer.controllers.services.FTS -DataPackageIP [YourIP] ``` ### Troubleshooting + #### package not found' + if, trying to start FTS you get an error 'package not found' + ``` 'package not found' ``` + navigate to the physical location where the controllers are installed and start the server from there. You may also check for missing libraries and install then using Pip #### issue connecting in WinTAK + if you have issues connecting winTAK to FTS, try to deactivate the TAKChat plugin, under the plugin section ## Update FreeTakServer + if you already installed FTS with pip you can use + ``` pip install FreeTAKServer --upgrade ``` + subscribe to this feed to be automatically informed about new versions: -https://pypi.org/rss/project/freetakserver/releases.xml + ### client2client datapackages If you have issues sending datapackages directly to clients via FTS, make sure -IP you specified can be reached from your device. A quick way to test if it works is to take a picture with Quick Pic in ATAK and send it to another client. Please also note that for that test ATAK clients needs to be on different network (ie one on mobile and one on wifi), because if you run them in same network (wifi, vpn, etc) they will just use same multicast group, bypassing FTS completely. -When you post package to specific contact in ATAK, following happens: +When you post package to specific contact in ATAK, following happens: - 1) Datapackage is uploaded to server, recorded in database and stored in FTS directory - 2) Client receives payload with URL pointing to datapackage so ATAK can download it +1. Datapackage is uploaded to server, recorded in database and stored in FTS directory +2. Client receives payload with URL pointing to datapackage so ATAK can download it -Assuming you want to run open-to-everyone FTS instance, and you have server hosted somewhere, you need to specify _public_ IP address in -IP argument. And just in case, -IP also accepts domain names. +Assuming you want to run open-to-everyone FTS instance, and you have server hosted somewhere, you need to specify _public_ IP address in -IP argument. And just in case, -IP also accepts domain names. If you run it at home and port forward on router doesn't work, check if you receive actual IP address and not being NATed and ports 8080 and 8087 are not filtered - you can ask your ISP about that. ## Additional Documentation - * Since version 1.2 FTS supports a[REST API](https://github.com/FreeTAKTeam/FreeTakServer/blob/master/REST_APIDoc.md) -## Project Structure +- Since version 1.2 FTS supports a[REST API](https://github.com/FreeTAKTeam/FreeTakServer/blob/master/REST_APIDoc.md) + +## Project Structure + - TakFreeServer - **Controllers**: Contains all the business Logic - **Models**: Contains all the COT object model - - **TAKLinuxService**: a demon for linux OS - - **TakWinService**: a service for the windows OS + - **TAKLinuxService**: a demon for linux OS + - **TakWinService**: a service for the windows OS - Docs: Useful documentation regarding COTS and different logs to understand how those are implemented -- Model: a UML model in Sparx EnterpriseArchitect format (see https://sparxsystems.com/products/ea/trial/request.html). +- Model: a UML model in Sparx EnterpriseArchitect format (see ). - Old: Legacy versions diff --git a/README.md b/README.md index 73769698..30d064ba 100644 --- a/README.md +++ b/README.md @@ -1,61 +1,71 @@ # FreeTAKServer [![Downloads](https://pepy.tech/badge/freetakserver)](https://pepy.tech/project/freetakserver) ![PyPI](https://img.shields.io/pypi/v/FreeTAKServer) ![GitHub release (latest by date)](https://img.shields.io/github/v/release/FreeTAKTeam/FreeTakServer) ![Lines of code](https://img.shields.io/tokei/lines/github.com/FreeTAKTeam/FreeTakServer) - ![the Parrot is not dead](https://user-images.githubusercontent.com/60719165/226138056-a2b1076c-fd4c-4488-b330-55e57f9ecc78.png) Welcome to the FreeTakServer (FTS) git repository. -FTS is a Python3 implementation of a TAK Server for devices like [ATAK](https://play.google.com/store/apps/details?id=com.atakmap.app.civ), [WinTAK](https://1drv.ms/u/s!AtMVrrXVTu4YgSanKtSHIslxfRu5?e=ftVio7 ), and ITAK, it is cross-platform and runs from a multi node installation on AWS down to the Android edition. +FTS is a Python3 implementation of a TAK Server for devices like [ATAK](https://play.google.com/store/apps/details?id=com.atakmap.app.civ), [WinTAK](https://1drv.ms/u/s!AtMVrrXVTu4YgSanKtSHIslxfRu5?e=ftVio7), and ITAK, it is cross-platform and runs from a multi node installation on AWS down to the Android edition. It's free and open source (released under the [Eclipse Public License](https://www.eclipse.org/legal/epl-2.0/). ## User Documentation + ![FTS UI 1.8](https://user-images.githubusercontent.com/60719165/118400921-0731e180-b63a-11eb-976e-c38ee052a013.png) For documentation on installation and usage visit our [FreeTAKServer Documentation page](https://freetakteam.github.io/FreeTAKServer-User-Docs/) ## Use Cases + FTS allows you to connect ATAK clients to share geo information, to chat with all the connected clients, exchange files and more. It intends to support all the major use cases of the original TAK server. -- Web administration + +- Web administration - Federation Service (Connecting two or more FTS instances) -- Data Package upload, share with all connected users and retrieval +- Data Package upload, share with all connected users and retrieval - Image transfer and storage - COT recording in a database -- Execution of common task list (*using the ExCheck plugin for WinTAK; ATAK plugin only available to users with takmaps.com access*) +- Execution of common task list (_using the ExCheck plugin for WinTAK; ATAK plugin only available to users with takmaps.com access_) - SSL Encryption - KML generation - Command Line Interface -- [Extensive REST API](https://freetakteam.github.io/FreeTAKServer-User-Docs/API/REST_APIDoc/) for intgrations and extensions +- [Extensive REST API](https://freetakteam.github.io/FreeTAKServer-User-Docs/API/REST_APIDoc/) for integrations and extensions ![some use cases](https://github.com/Tapawingo/TAKlib/blob/master/docs/FreeTakServer%20specs/FreeTak%20Use%20Case%20model.png?raw=true) ## Project Status -This code is currently in *Production Stage*. + +This code is currently in _Production Stage_. Check out our roadmap [@FreeTakServer#25](https://github.com/FreeTAKTeam/FreeTakServer/issues/25) to see what is planned Also subscribe to this feed to be automatically informed about PIP new versions: -https://pypi.org/rss/project/freetakserver/releases.xml + ### Public instance + We support a public instance of FTS. the IP address is TCP: 137.184.101.250:8087 + - download the configuration [here](https://drive.google.com/file/d/1IK1LfPN13EWikHaMyOuDDwIerNGz-Wli/view?usp=sharing) - use the Import manager in ATAK to import the configuration - [more details](https://freetakteam.github.io/FreeTAKServer-User-Docs/Usage/Connecting%20ATAK/) -### Tell us what you think! +### Tell us what you think + To discuss with the developer team: -- Visit the ATAK subreddit -https://www.reddit.com/r/ATAK/ + +- Visit the ATAK subreddit + - or join the Discord chat -https://discordapp.com/invite/XEPyhHA + ## Architecture + TAKFreeServer uses a MVC pattern, the concept of a COT (Cursor On Target) is described in a set of Domain classes, generated from the UML model using a Model Driven Architecture approach. ## Documentation + See [user docs](https://freetakteam.github.io/FreeTAKServer-User-Docs/) for various information including an UML model of the Domain classes involved in a COT event. ## Requirements + - Python 3.11 - Dependencies: - `flask` @@ -63,28 +73,34 @@ See [user docs](https://freetakteam.github.io/FreeTAKServer-User-Docs/) for vari - `pathlib` - `tabulate` - `sqlalchemy` - - `setuptools` + - `setuptools` - `Flask-SQLAlchemy` ## Installing and using FreeTakServer + For installation [go here](https://freetakteam.github.io/FreeTAKServer-User-Docs/Installation/Linux/1_Install/). -## Project Structure +## Project Structure + - [FreeTakServer](./FreeTAKServer/) - **Controllers**: Contains FTS business Logic - - **Models**: Contains all the FTS object model - - **Views**: contains the access to FTS + - **Models**: Contains all the FTS object model + - **Views**: contains the access to FTS + +## Community -## Community If you have any issues don't hesitate to [bring it up](https://github.com/Tapawingo/FreeTakServer/issues), as FreeTAKServer is in continuous development. To discuss with the developer team you may use: + - The [subreddit](https://www.reddit.com/r/ATAK/) - The [public ATAK Discord Server](https://discordapp.com/invite/XEPyhHA) ## Donate -The FTS team is working daily on the development of an open and free solution. We plan to do more than simply replicate the functionalities of the legacy TAK server, our road map includes integration with open source systems like LORA's Meshtastic, porting it to Android, having an open API, and much more. + +The FTS team is working daily on the development of an open and free solution. We plan to do more than simply replicate the functionalities of the legacy TAK server, our road map includes integration with open source systems like LORA's Meshtastic, porting it to Android, having an open API, and much more. We are doing it for free because we believe that donating personal time to a cause is an endeavour that is worthy per-se, However, we are also spending our own time and money to: + - Maintain a Public server and a test server - Invest in different technologies for R&D @@ -93,16 +109,18 @@ If you feel that FTS is useful to you and you can donate in those challenging ti You can also support the project by buying one of our [t-shirts](http://tee.pub/lic/elARpZYCmaw). -***NOTE***: +**_NOTE_**: + > Not a big fan of Paypal, but that is the easiest way I found for an initial attempt. We may go to some more ethical system in future. -Finally you can help the project by spamming FTS information, starring our repositories in github and Pip and upvoting us. +> Finally you can help the project by spamming FTS information, starring our repositories in github and Pip and upvoting us. [![Star History Chart](https://api.star-history.com/svg?repos=FreeTAKTeam/FreeTakServer,tkuester/taky,TAK-Product-Center/Server&type=Date)](https://star-history.com/#FreeTAKTeam/FreeTakServer&tkuester/taky&TAK-Product-Center/Server&Date) - ## Open Source Notes + FTS was made possible by the following Open Source projects. We'd like to thank the following individuals and organizations for providing crucial support and making FTS possible. + - [flask](https://flask.palletsprojects.com/en/2.0.x/) - [lxml](https://lxml.de/) - [pathlib](https://pathlib.readthedocs.io/en/pep428/) diff --git a/README_DOCKER.md b/README_DOCKER.md index 620b2eb8..c9704f69 100644 --- a/README_DOCKER.md +++ b/README_DOCKER.md @@ -2,44 +2,47 @@ :warning: **THIS IS NOT WELL SUPPORTED BY THE FTS TEAM RIGHT NOW, YOU ARE IN UNCHARTED TERRITORY** :warning: -I'd like to set this repo up to use github actions to push to pip and docker hub at the same time. Until that happens, here's how you can build and use this repo to build a docker image and run a container from it. It assumes you've already cloned it where you plan to use it. It _also_ means you'll be running whatever's in development, _not_ what's been released / in Pypi. +I'd like to set this repo up to use github actions to push to pip and docker hub at the same time. Until that happens, here's how you can build and use this repo to build a docker image and run a container from it. It assumes you've already cloned it where you plan to use it. It _also_ means you'll be running whatever's in development, _not_ what's been released / in Pypi. :warning: **That means you might be running unreleased code with this method** ## Persistence -By default, docker will save pretty much nothing between runs of this container. So before we run this, we _really_ want somewhere for FreeTAKServer to store data. This container expects you to mount that volume at `/opt/fts/` inside the container. Let's put this in your home directory, for now. + +By default, docker will save pretty much nothing between runs of this container. So before we run this, we _really_ want somewhere for FreeTAKServer to store data. This container expects you to mount that volume at `/opt/fts/` inside the container. Let's put this in your home directory, for now. ```shell # This should work for all dockers, linux, windows, etc -docker volume create ftsdata +docker volume create ftsdata ``` -:warning: FTS will store its database, data packages, ExCheck lists, and importantly, your _certificates_ in this volume. Keep all of these safe. +:warning: FTS will store its database, data packages, ExCheck lists, and importantly, your _certificates_ in this volume. Keep all of these safe. + +## Creating a docker image from this repo -## Creating a docker image from this repo. `docker build . -t fts:local` ## Run the container + OK, there's a lot to put in this command line, because there's lots of options we want to pass. Let's run this interactively to start, so we can control the server. This assumes you want to use your public IP for the relevant IP Address configurations. ```shell docker run -it \ # run the container interactively (hold the shell open) - -e FTS_DP_ADDRESS="$(curl ifconfig.me)" \ # dynamically get your address from iconfig.me for datapackages - --mount src=ftsdata,target=/opt/fts \ # mount the volume for persistent data - -p 8080:8080 -p 8087:8087 -p 8443:8443 \ # expose ports - -p 9000:9000 -p 19023:19023 \ #expose more ports. Check the docs for explanations - fts:local # the container for docker to run + -e FTS_DP_ADDRESS="$(curl ifconfig.me)" \ # dynamically get your address from iconfig.me for datapackages + --mount src=ftsdata,target=/opt/fts \ # mount the volume for persistent data + -p 8080:8080 -p 8087:8087 -p 8443:8443 \ # expose ports + -p 9000:9000 -p 19023:19023 \ #expose more ports. Check the docs for explanations + fts:local # the container for docker to run ``` -Once this is running, point your ATAK clients at it, and make sure it works. Once your sure it works, we're gonna set it to run in the background and restart all the time, unless you intentionally stop it for some reason, with `docker stop`. +Once this is running, point your ATAK clients at it, and make sure it works. Once your sure it works, we're gonna set it to run in the background and restart all the time, unless you intentionally stop it for some reason, with `docker stop`. -```shell +```shell docker run --restart unless-stopped \ # run the container forever, unless stopped intentionally - -e FTS_DP_ADDRESS="$(curl ifconfig.me)" \ # dynamically get your address from iconfig.me for datapackages - --mount src=ftsdata,target=/opt/fts \ # mount the volume for persistent data - -p 8080:8080 -p 8087:8087 -p 8443:8443 \ # expose ports - -p 9000:9000 -p 19023:19023 \ #expose more ports. Check the docs for explanations - fts:local # the container for docker to run + -e FTS_DP_ADDRESS="$(curl ifconfig.me)" \ # dynamically get your address from iconfig.me for datapackages + --mount src=ftsdata,target=/opt/fts \ # mount the volume for persistent data + -p 8080:8080 -p 8087:8087 -p 8443:8443 \ # expose ports + -p 9000:9000 -p 19023:19023 \ #expose more ports. Check the docs for explanations + fts:local # the container for docker to run ``` diff --git a/REST_APIDoc.md b/REST_APIDoc.md index 28ba5107..c95f4970 100644 --- a/REST_APIDoc.md +++ b/REST_APIDoc.md @@ -1,2 +1,3 @@ # FreeTAKServer REST API Documentation + moved to the [User Docs](https://freetakteam.github.io/FreeTAKServer-User-Docs/Usage/API/REST_APIDoc/) diff --git a/SECURITY.md b/SECURITY.md index 4836f036..a90c6345 100644 --- a/SECURITY.md +++ b/SECURITY.md @@ -6,10 +6,10 @@ FTS is currently supporting those versions with security updates. | Version | Supported | | ------- | ------------------ | -| >1.8.x | :x: | -| 1.9.x | :white_check_mark: | -| < 2.X | :white_check_mark: | +| >1.8.x | :x: | +| 1.9.x | :white_check_mark: | +| < 2.X | :white_check_mark: | ## Reporting a Vulnerability -please report a vulnerrability as an issue, our team will evaluate it and address in the proper time +please report a vulnerability as an issue, our team will evaluate it and address in the proper time