Mscolab - A Flight Path Collaboration Platform

Mscolab has been developed to make mss workable in a collaborative environment, with additional features such as chat-messages, keeping track of the made changes, permissions of the collaborators.

Configuring Your Mscolab Server

The mscolab server comes with a default configuration, built on top of sqlite3. One can override these settings by making a copy of the following file in a location in $PYTHONPATH.

Description of the variables can be found in comments.

mscolab_settings.py

# -*- coding: utf-8 -*-
"""

    mslib.mscolab.conf.py.example
    ~~~~~~~~~~~~~~~~~~~~

    config for mscolab.

    This file is part of mss.

    :copyright: Copyright 2019 Shivashis Padhi
    :copyright: Copyright 2019-2021 by the mss team, see AUTHORS.
    :license: APACHE-2.0, see LICENSE for details.

    Licensed under the Apache License, Version 2.0 (the "License");
    you may not use this file except in compliance with the License.
    You may obtain a copy of the License at

       http://www.apache.org/licenses/LICENSE-2.0

    Unless required by applicable law or agreed to in writing, software
    distributed under the License is distributed on an "AS IS" BASIS,
    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
    See the License for the specific language governing permissions and
    limitations under the License.
"""
import os
import logging

# Set base directory where you want to save Mscolab data
BASE_DIR = os.path.abspath(os.path.dirname(__file__))

# Directory in which all data related to Mscolab is stored
DATA_DIR = os.path.join(BASE_DIR, "colabdata")

# Where mscolab project files are stored on the server
MSCOLAB_DATA_DIR = os.path.join(DATA_DIR, 'filedata')

# Directory where uploaded images and documents in the chat are stored
UPLOAD_FOLDER = os.path.join(DATA_DIR, 'uploads')

# Max image/document upload size in mscolab chat (default 2MB)
MAX_UPLOAD_SIZE = 2 * 1024 * 1024

# Set your secret key for token generation
SECRET_KEY = 'MySecretKey'

# Set the database connection string:
# Examples for different DBMS:
# MySQL: "mysql+pymysql://<username>:<password>@<host>/<db_name>?charset=utf8mb4"
# PostgreSQL: "postgresql://<username>:<password>@<host>/<db_name>"
# SQLite: "sqlite:///<path_to_db>"
SQLALCHEMY_DB_URI = 'sqlite:///' + os.path.join(DATA_DIR, 'mscolab.db')

enable_basic_http_authentication = False

# text to be written in new mscolab based ftml files.
STUB_CODE = """<?xml version="1.0" encoding="utf-8"?>
<FlightTrack version="1.7.6">
  <ListOfWaypoints>
    <Waypoint flightlevel="250" lat="67.821" location="Kiruna" lon="20.336">
      <Comments></Comments>
    </Waypoint>
    <Waypoint flightlevel="250" lat="78.928" location="Ny-Alesund" lon="11.986">
      <Comments></Comments>
    </Waypoint>
  </ListOfWaypoints>
</FlightTrack>
"""

Protecting Login

The login to the mscolab server can be protected by an additional auth method.

mss_mscolab_auth.py

class mss_mscolab_auth(object):
     password = "please use the methods to save only the encrypted value"
     allowed_users = [("user", hashlib.md5(password.encode('utf-8')).hexdigest())),]

Steps to Run Mscolab Server

  • The mscolab server comes included in the MSS python package.

  • Once mss is installed, if you’re running the mscolab server for the first time, run the command mscolab db --init to initialise your database.

  • To start the server run mscolab start.

  • If you ever want to reset or add dummy data to your database you can use the commands mscolab db --reset and mscolab db --seed respectively.

Steps to Open the Mscolab Application Window

  • To open the mscolab window in the application select the mscolab option from the menu bar of Mission Support System’s main window.

  • Mscolab UI will be in the future, the new main UI. For now, to get also users experience included we add it as a new menu in the tool-bar. We evolve the new UI by these inputs of more users and will deprecate in this process the old one.

User based features

  • A user can register and login.

  • A user can also delete his/her account.

Project based features

  • In Mscolab, each flight track is referred to as a project.

  • A project can be created by a user, once he/she has logged in.

  • The users can either select a starting FTML file while creating the project or can later import a FTML file to the project.

  • All the projects the user has created or has been added to can be found in Mscolab’s main window along with the user’s access level.

  • To start working on a project the user needs to select it which enables all the project related buttons.

  • Any change made to a project by a user will be shared with everyone in real-time unless Work Locally is turned on.(More on this later)

Project Permissions

There are 4 different access levels of user:

  • Creator

    Creator is the user who creates the project, they have all the rights which ‘admins’ have. Additionally, they can delete the project, make administrators and revoke administrators’ status.

  • Admins

    Admins can add users to the project and can update their access levels. They can also view the version history of the project and revert to a previous version if need arises. They have all the capabilities of a collaborator.

  • Collaborators

    Collaborators can make changes to the project and have access to the chat room. Additionally, they can view the version history of the project.

  • Viewer

    Viewers can only view the flight track and have the least amount of access.

All the changes to users’ permission are in real-time.

Adding Users To Your Project

To add users to a project, you need to be the admin or creator of that project. Select the desired project and click on the Manage Users button in Mscolab’s main window. An admin window will open where you can manage the permission of all the users in bulk by selecting multiple users at once and add, updating or deleting their access to the project. If you have another project and want to have the same users as on that project you can use the Clone Permissions option in the admin window to quickly add all the users of a project to your selected one.

Chatting With Project Members

If a user has the permission of collaborator or above, they can use the chat window in Mscolab. You can send normal text messages or use markdown to format them. The currently supported markdown syntax is:

  • # : Headings

  • **text** : Bold text

  • *text* : Italicise Text

  • [text](link) : Add hyper-link to text

You can use the Preview button to see how your text is formatted before sending it.

There is also support for image/document upload. You can set the upload size limit in the mscolab_settings.py file. The default limit is 2 MBs.

Right-clicking on a message would open a context-menu giving you options to copy, edit, delete or reply to a message.

Managing Project Versions

If you have the access level of collaborator or higher to a project you can view all the change history of the project by clicking on the Version History button in Mscolab’s main window. A new version history window will be opened where you can view all the changes made to the project and compare them with the current flight track by selecting a previous version. You can also set names to important versions to keep track of all the important milestones.

Working Locally on a Project

If you want to try out your changes on a project without disturbing the common shared file. You can use the Work Locally toggle in the Mscolab main window. You can turn that toggle on at any time which would send you into local work mode. In this mode you will have a copy of the project on your system and all your changes will be made to this file. Once you’re done with all your local work and think you’re ready to push your changes to everyone, you can use the Save to Server button. This would prompt you with a dialog where you can compare your local flight track and the common flight track on the server and select what you would like to keep. You can also fetch the common flight track to your local file at any time using the Fetch from Server button which prompts you with a similar dialog. You can turn the Work Locally toggle off at any points and work on the common shared file on the server. All your local changes are saved and you can return to them at any point by toggling the checkbox back on.

Notes for server administrators

If you’re configuring mscolab server, there is a manage users GUI to add or manage users to a project. There is a command line tool available with the installation of mss, mscolab. It can import users to the database and can handle joins to projects.

Make a text file with the following format to import many users to the mscolab database

suggested_username name <email>
suggested_username2 name2 <email2>
$ mscolab db --users_by_file /path/to/file

After executed you get informations to exchange with users.

Are you sure you want to add users to the database? (y/[n]):
y
Userdata: email suggested_username 30736d0350c9b886

"MSCOLAB_mailid": "email",
"MSCOLAB_password": "30736d0350c9b886",


Userdata: email2 suggested_username2 342434de34904303

"MSCOLAB_mailid": "email2",
"MSCOLAB_password": "342434de34904303",

Further options can be listed by mscolab db -h

Instructions to use mscolab wsgi

make a file called server.py and install

mamba install eventlet==0.30.2 gunicorn

server.py:

from mslib.mscolab.server import _app as app

Then run the following commands.

$ mamba install gunicorn eventlet
$ gunicorn -b 0.0.0.0:8087 server:app

For further options read https://flask.palletsprojects.com/en/1.1.x/deploying/wsgi-standalone/#gunicorn