Source

adapter/AdapterColneoPro.js

// ///@ts-check
/// <reference path="../tools/Authenticate.js" />

/**
 * $Id: AdapterColneoPro.js 9255 2025-11-08 12:45:26Z jochen.hanff $
 */

'use strict'

import { IModelViewer , ProjectContext } from "./IModelViewer.js";
import { AuthenticationServices } from "../tools/Authenticate.js";

////////////////////////////////////////////////////////
///   COLNEO pro
////////////////////////////////////////////////////////

/**
 *  
 *  @category Model Viewer
 * 
 */
export class AdptCOLNEOpro_10 extends IModelViewer {

    constructor() {        
        
        super( "COLNEOpro_10", "COLNEO pro", "1.0.1"  )
        
        cnCoreAPI.selectionStateChanged.connect(this.onSelectionChanged.bind(this));
        cnCoreAPI.visibilityStateChanged.connect(this.onVisibilityChanged.bind(this));

    }
    
    /**
     * 
     * @param {*} cb Call Back
     * returns : {
     * }
     * @param {*} user 
     */
    loginUser__idp( cb , user = null )  {
        
        console.log( '### <AdptCOLNEOpro_10.loginUser> ')
                        
        /////////////////////////////////////////
        cnApplicationAPI.getUser((ret_user) => {

            // console.log("ret user:")
            // console.log(JSON.stringify(ret_user))

            if (ret_user.status < 300) {

                this.setAccessToken( ret_user , (ret_accesstoken) => {
                    
                    return cb({
                        'status': ret_accesstoken.status,
                        'data': ret_accesstoken
                    })

                })

            } else {

                const urlParams = new URLSearchParams(window.location.search);

                const authcode = urlParams.get('authcode');
                const user = urlParams.get('user');

                if (authcode != undefined && authcode.length > 0) {

                    console.log("GOT AUTHCODE")

                    cnApplicationAPI.loginUser(user, authcode, (ret_login) => {

                        console.log("=> logged in")

                        cnApplicationAPI.getUser((ret_user) => {
                            this.setAccessToken(ret_user, (ret_accesstoken) => {
                                return cb({
                                    'status': ret_accesstoken.status,
                                    'data': ret_accesstoken
                                })
                            })
                        })

                    })

                } else {
                    const l = window.location
                    // window.location = `https://idp.colneo.services/cnapp_login?redirect=${l}&uselocalstorage=false&user=jochen.hanff@colneo.email`
                    let qu = ''
                    if( user ) {
                        qu = `&user=${qu}`
                    }
                    window.location = `https://idp.colneo.services/cnapp_login?redirect=${l}&uselocalstorage=false${qu}`
                }

            }

        })

    }
    
    /**
     * 
     * Get user,token
     * Uses 'old' IAM login for now.
     * 
     * returns {
     *      'status' :
     *      'data'  : {
     *          'user'  : " ... "
     *          'token' : " ... "
     *      }
     * }
     * 
     * @param {*} cb 
     * @param {*} user      
     * 
     */
    async loginUser( cb, user = null) {
        
        // Check if user already logged in with COLNEO pro.        
        // If not, use cn_login

        // will be changed later to -> IDP cnapp_login 
         
        cnApplicationAPI.getUser( async (ret_user) => {

            // console.log("ret user from app:")
            // console.log(JSON.stringify(ret_user))

            if (ret_user.status < 300) {

                // console.log("=> GOT USER")
 
                let u = ret_user.data.userid
                let rt = await cnApplicationAPI.getAccessToken()

                // console.log("RET TOKEN:")
                // console.log( JSON.stringify(rt) )
                
                let ret_iam_t = await AuthenticationServices.login_IAM( u , rt.data )

                let iam_t = ret_iam_t.data

                // console.log("RESPONSE IAM LOGIN")
                // console.log( JSON.stringify(ret_iam_t) )

                return cb({
                    'status': 200,
                    'data': {
                        'userid'    : u,
                        'token'     : iam_t.token
                    }
                })
               
            } else {

                let url = window.location // .href
                let auth_target_ = new URL(url.protocol + url.host + "/cn_login")

                console.log(`auth : ${auth_target_}`)

                //
                // check if user and token are stored in local storage
                // if so, return user/token, otherwise forward to
                // webpage ./cn_login

                let u = window.localStorage.getItem('user')
                let t = window.localStorage.getItem('token')

                if (user != undefined) {

                    if (u != user) {
                        t = null
                    }

                    u = user

                }

                if (t == undefined) {

                    let queryString = window.location.search;
                    let urlParams = new URLSearchParams(queryString);

                    urlParams.set('redirect', window.location) // window.location.href ???

                    if (typeof _default_userid_ != 'undefined') {
                        urlParams.set('userid', _default_userid_) // window.location.href ???
                    }

                    let target = auth_target_

                    target.search = urlParams.toString()

                    window.location = target

                } else {

                    cnApplicationAPI.loginUser(u, t, async (ret) => {

                        // alert('loggedin')
                        
                        return cb({
                            'status': 200,
                            'data': {
                                'userid': u,
                                'token' : t
                            }
                        })

                    })

                    
                }

            }

        })

    }

    logoutUser( cb ) {
        
        console.log("LOGOUT")
        
        cnApplicationAPI.logoutUser()       //aab causing issue function not found in colneo pro

        window.localStorage.removeItem('token')
        window.localStorage.removeItem('user')        
        // window.location.reload()
        window.location.replace(window.location.origin + window.location.pathname);
        
        return cb({
            'status' : 200
        })

    }
    
    /**
     * 
     * @param {Context} context 
     * @param {*} cb      
     */
    async restoreProjectContext( context, cb ) {
       
        const is = await cnProjectAPI.getInfohubSettings()

        if ( is.status < 300 ) {

            const scope         = is.data.scope_id
            const project_sid   = is.data.project_shortid
            const connectedby   = is.data.connected_by

            this._infohub_project_ctx.setScopeProject( scope, project_sid , connectedby );
            context.setScopeAndProjectShortId( scope, project_sid )

            return cb({
                'status': 200,
                'data': this._infohub_project_ctx
            })

        } else {
            return cb({
                'status' : is.status
            })
        }
        
    }

    async resetProjectContext( context , cb ) {

         return cb({
                'status': 200,
                'data': this._infohub_project_ctx
            })
            
    }

    /**
     * @since 2025-10-14, aab
     */
    setInfohubSettings( settings ) {

        return cnProjectAPI.setInfohubSettings(settings)

    }

    /**
     * @since 2025-10-14, aab
     */
    getInfohubSettings( ) {

        return cnProjectAPI.getInfohubSettings()

    }
    // ======== Project Methods ========

    getProjectDirectory() {
        return cnProjectAPI.getInfo().then(result => {
            return {
                status: result.status,
                message: result.message,
                data: result.data?.filePath || null
            };
        });
    }            

    setAccessToken( ret_user , cb ) {

        cnApplicationAPI.getAccessToken((ret_token) => {

            console.log("RET TOKEN")
            console.log(JSON.stringify(ret_token))

            if (ret_token.status < 300) {
                return cb({
                    'status': 200,
                    'token': ret_token.data,
                    'userid': ret_user.data.userid,
                    'avatar': ret_user.data.avatar,
                    'name': ret_user.data.name
                })
            } else {
                return cb({
                    'status': ret_token.status,
                    'message': "Access denied"
                })
            }

        })

    }

    /**
     * 
     * Open URL/Link in external browser or in webform module
     * 
     * @param {*} url 
     * @param {*} target      
     */
    openUrl(url, target = '') {
        // target empty uses the default browser
        return cnGuiAPI.openUrl(url, target || '');
    }


    getSelectedObjectIds(domains) {
        // console.log( '### COLNEOpro.getSelectedObjectIds()')
        // const resp = await cnCoreAPI.getSelectedObjectIds( domains )
        // console.log( JSON.stringify(resp) )
        // return resp.data
        return cnCoreAPI.getSelectedObjectIds( domains ).then(function (result) {
            return result.data;
        })
    }

    getObjects(objIdList, opt ) {
        return cnCoreAPI.getObjects(objIdList, opt ).then(function (result) {
            return result.data;
        })
    }

    getObjectIds(domains) {
        return cnCoreAPI.getObjectIds(domains).then(function (result) {
            return result.data;
        })
    }
     
    filterObjectsByProperties( objIds, filterExpression) {
         return cnCoreAPI.filterObjectsByProperties(objIds,filterExpression).then(function (result) {
            return result.data;
        })
    }

}

/**
 *
 *  @category Model Viewer
 *
 */
export class COLNEOproAdapterServices {

    constructor() {
    }

    /**
     *  Create instance of correct DESITE version API class
     *
     *  @returns {Promise<IModelViewer>} Adapter instrance
     *
     */
    static async createAdapter() { 
        return new AdptCOLNEOpro_10(); 
    }

}