=======
thvapp
=======

thvapp is a remote visual application plugin to th system on novnc  

thvapp used in iframe in django template

detail documentation is in the "docs" directory

Quick start

-----------

1. pip install django-thvapp

2. Add "thvapp" to your INSTALLED_APPS setting like this::

    INSTALL_APPS = [
        ...
        'thvapp',
    ]

3. Include the thvapp URLconf in your project urls.py like this::
    
    from thvapp import urls as thVAppsUrls
    urlpatterns = [...] + thVAppsUrls.urlpatterns,

4. Set IFrame Option in settings.py like this:
    X_FRAME_OPTIONS = 'ALLOWALL'

5. Add the thvapp in your html tempalte by iframe like this:
    
    1)、add path in project urls like this:
        path('vapps/', main.vApps),
    2)、in main views.py:
        @login_required
        def vApps(request):
		
		  return render(request,'vapps.html',{})
    3)、write the xterm.html tempalte file like:
        ...
        <div class="page-row"><iframe id="webthvisual" src="/thva/apps#/applist" frameborder="0" width="100%" style="min-height: 82vh" scrolling="yes"></iframe>
        </div>
        ...

6. Setup thuri appid and appid in settings.py like this；
    THTERMCONF = {
        'server':'{ visual<shell> backend server }',
        'appid':'{appid}',
        'appkey':'{appkey}'
		
    }
    TH_VISUALAPP_CONFIG = {
        
		'VAPP_BACKEND_HOST':'{ visualbackend server }',
		
        'VAPP_BACKEND_APPID':'{ appid }',
		
        'VAPP_BACKEND_APPKEY':'{appkey}',
		
        'VAPP_DEFAULT_IMGAGE_URL':'/media/visual.png', # default image url in front page 
        'FOOTER_HEIGHT':70,  # your iframe's parent page's footer height
        'SCREEN_RATIO':16 / 9,  # if you want to set the remote screen ratio
        'VAPP_ICONS':{
		
            '{thcluster1}':{"app1": {"video": "app1 image url"}, "app2": {"video": "{app2 video url}"}, ...}
        
		} # vapp icons (image or video) you can get th visual applications from THVisual client SDK then config your own icons in settings or database
    
	}
    
7. Add th user 、cluster and visual applications' icons to session when user login like this:
    request.session["systemUsername"] = "{thsystem user name}"
    request.session["cluster] = "{thcluster1}"
    request.session["vapp_icons"] = json.dumps(settings.TH_VISUALAPP_CONFIG.get('VAPP_ICONS'))
	
8. Use nginx proxy the porject port like this:
     server {
        listen       80;
        server_name  _;
		
		port_in_redirect off;

        location /visual/ {
            proxy_pass { visualbackend server }

            proxy_http_version 1.1;
            proxy_read_timeout 600s;
            proxy_redirect off;
            proxy_set_header Upgrade $http_upgrade;
            proxy_set_header Connection "upgrade";
            proxy_set_header Host $host:$server_port;
            proxy_set_header X-Real-IP $remote_addr;
            proxy_set_header REMOTE-HOST $remote_addr;
            proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
			
        }

        location / {
            proxy_set_header  Host  $host;
            proxy_set_header  X-real-ip $remote_addr;
            proxy_set_header  X-Forwarded-For $proxy_add_x_forwarded_for;
            proxy_pass { django server:port };
			
        }
    
9. Start the development server and visit http://yourhost:80/vapps/ you will see the web term