Skip to content
Snippets Groups Projects
index.js 7.21 KiB
Newer Older
  • Learn to ignore specific revisions
  • i-vall's avatar
    i-vall committed
    const {
      BaseKonnector,
      log,
    
    i-vall's avatar
    i-vall committed
      errors,
      addData,
      hydrateAndFilter,
      cozyClient
    
    i-vall's avatar
    i-vall committed
    } = require('cozy-konnector-libs')
    
    i-vall's avatar
    i-vall committed
    const rp = require('request-promise')
    const cookiejar = rp.jar()
    const cheerio = require('cheerio')
    const qs = require('querystring')
    const moment = require('moment')
    
    const fs = require('fs')
    
    i-vall's avatar
    i-vall committed
    
    module.exports = new BaseKonnector(start)
    
    // The start function is run by the BaseKonnector instance only when it got all the account
    // information (fields). When you run this connector yourself in "standalone" mode or "dev" mode,
    // the account information come from ./konnector-dev-config.json file
    async function start(fields) {
      log('info', 'Authenticating ...')
    
    i-vall's avatar
    i-vall committed
      //await preAuth()
    
      const javaxFaces = await getJavaxFaces()
    
      //  console.log('first cookie jar:\n', cookiejar)
      console.log(javaxFaces)
    
      await authenticate(fields.login, fields.password, javaxFaces)
    
      //  console.log('\n\n\nsecond cookie jar:\n', cookiejar)
    
    
    i-vall's avatar
    i-vall committed
      log('info', 'Successfully logged in')
      // The BaseKonnector instance expects a Promise as return of the function
    
    i-vall's avatar
    i-vall committed
      log('info', 'Fetching the data')
      //await getData()
    
    i-vall's avatar
    i-vall committed
      log('info', 'Saving data to Cozy')
    }
    
    
    i-vall's avatar
    i-vall committed
    const startDate = moment()
      .subtract(3, 'day')
      .format('DD/MM/YYYY')
    const endDate = moment().format('DD/MM/YYYY')
    
    function preAuth() {
      const preAuthRequest = {
        method: 'GET',
        uri: 'https://monespace.grdf.fr/monespace/connexion',
        jar: cookiejar,
        headers: {
          Accept: 'text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8',
          'Cache-Control': 'max-age=0',
          Dnt: '1',
          'User-Agent':
            'Mozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:66.0) Gecko/20100101 Firefox/66.0',
          Accept: 'text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8',
          'Accept-Language': 'fr,fr-FR;q=0.8,en-US;q=0.5,en;q=0.3',
          Referer: 'https://www.grdf.fr/',
          Connection: 'keep-alive'
    
    i-vall's avatar
    i-vall committed
        }
    
    i-vall's avatar
    i-vall committed
      }
      return rp(preAuthRequest).catch(() => {
        throw new Error(errors.VENDOR_DOWN)
    
    i-vall's avatar
    i-vall committed
      })
    }
    
    
    i-vall's avatar
    i-vall committed
    function getJavaxFaces() {
      const javaxFacesRequest = {
        method: 'GET',
        uri: 'https://monespace.grdf.fr/monespace/connexion',
        jar: cookiejar,
        headers: {
          Host: 'monespace.grdf.fr'
    
    i-vall's avatar
    i-vall committed
        },
    
    i-vall's avatar
    i-vall committed
        followAllRedirects: true,
        transform: function(body) {
          const $ = cheerio.load(body)
          return $('.mdpOublie')
            .next()
            .val() //!!!\\ il y en a 10, c'est le 5e
    
    i-vall's avatar
    i-vall committed
        }
    
    i-vall's avatar
    i-vall committed
      }
    
      return rp(javaxFacesRequest).catch(() => {
        throw new Error(errors.VENDOR_DOWN)
      })
    }
    
    async function authenticate(login, password, javaxFaces) {
      const authRequest = {
        method: 'POST',
        uri:
          'https://monespace.grdf.fr/web/guest/monespace?p_p_id=EspacePerso_WAR_EPportlet&p_p_lifecycle=2&p_p_state=normal&p_p_mode=view&p_p_cacheability=cacheLevelPage&p_p_col_id=column-2&p_p_col_count=1&_EspacePerso_WAR_EPportlet__jsfBridgeAjax=true&_EspacePerso_WAR_EPportlet__facesViewIdResource=%2Fviews%2FespacePerso%2FseconnecterEspaceViewMode.xhtml',
        jar: cookiejar,
        headers: {
          'User-Agent':
            'Mozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:66.0) Gecko/20100101 Firefox/66.0',
          Accept: 'application/xml, text/xml, */*; q=0.01',
          'Accept-Language': 'fr-FR,en-US;q=0.7,en;q=0.3',
          Referer: 'https://monespace.grdf.fr/monespace/connexion',
          'Content-Type': 'application/x-www-form-urlencoded; charset=UTF-8',
          'Faces-Request': 'partial/ajax',
          'X-Requested-With': 'XMLHttpRequest',
          Connection: 'keep-alive',
          //Cookie: 'dtCookie=DE9B4CA6869881C055D6E699F3CFDFB8|1|2||1; JSESSIONID_EP=25559043075796265A8F2087CF27E404; ROUTEID_EP=.2; COOKIE_SUPPORT=true; GUEST_LANGUAGE_ID=fr_FR',
          Pragma: 'no-cache',
          'Cache-Control': 'no-cache',
          DNT: '1'
        },
        /*form: {
          'javax.faces.partial.ajax': 'true',
          'javax.faces.source': '_EspacePerso_WAR_EPportlet_:seConnecterForm%3AmeConnecter',
          'javax.faces.partial.execute':'_EspacePerso_WAR_EPportlet_:seConnecterForm',
          'javax.faces.partial.render': '_EspacePerso_WAR_EPportlet_:global+_EspacePerso_WAR_EPportlet_:groupTitre',
          'javax.faces.behavior.event': 'click',
          'javax.faces.partial.event': 'click',
          '_EspacePerso_WAR_EPportlet_:seConnecterForm': '_EspacePerso_WAR_EPportlet_:seConnecterForm',
          'javax.faces.encodedURL': 'https://monespace.grdf.fr/web/guest/monespace?p_p_id=EspacePerso_WAR_EPportlet&p_p_lifecycle=2&p_p_state=normal&p_p_mode=view&p_p_cacheability=cacheLevelPage&p_p_col_id=column-2&p_p_col_count=1&_EspacePerso_WAR_EPportlet__jsfBridgeAjax=true&_EspacePerso_WAR_EPportlet__facesViewIdResource=%2Fviews%2FespacePerso%2FseconnecterEspaceViewMode.xhtml',
          '_EspacePerso_WAR_EPportlet_:seConnecterForm:email': 'raphael.youssoufian@club-internet.fr',
          '_EspacePerso_WAR_EPportlet_:seConnecterForm:passwordSecretSeConnecter': 'MDEmde77',
          'javax.faces.ViewState': '880647373313844401:-7107293260060007058'
        }*/
        body:
          'javax.faces.partial.ajax=true&javax.faces.source=_EspacePerso_WAR_EPportlet_%3AseConnecterForm%3AmeConnecter&javax.faces.partial.execute=_EspacePerso_WAR_EPportlet_%3AseConnecterForm&javax.faces.partial.render=_EspacePerso_WAR_EPportlet_%3Aglobal+_EspacePerso_WAR_EPportlet_%3AgroupTitre&javax.faces.behavior.event=click&javax.faces.partial.event=click&_EspacePerso_WAR_EPportlet_%3AseConnecterForm=_EspacePerso_WAR_EPportlet_%3AseConnecterForm&javax.faces.encodedURL=https%3A%2F%2Fmonespace.grdf.fr%2Fweb%2Fguest%2Fmonespace%3Fp_p_id%3DEspacePerso_WAR_EPportlet%26p_p_lifecycle%3D2%26p_p_state%3Dnormal%26p_p_mode%3Dview%26p_p_cacheability%3DcacheLevelPage%26p_p_col_id%3Dcolumn-2%26p_p_col_count%3D1%26_EspacePerso_WAR_EPportlet__jsfBridgeAjax%3Dtrue%26_EspacePerso_WAR_EPportlet__facesViewIdResource%3D%252Fviews%252FespacePerso%252FseconnecterEspaceViewMode.xhtml&_EspacePerso_WAR_EPportlet_%3AseConnecterForm%3Aemail=' +
          login +
          '&_EspacePerso_WAR_EPportlet_%3AseConnecterForm%3ApasswordSecretSeConnecter=' +
          password +
          '&javax.faces.ViewState=' +
          javaxFaces
      }
    
      try {
        const response = await rp(authRequest)
        console.log(response)
        fs.writeFile('response.html', response, err => {
          if (err) throw err
          console.log('The file has been saved!')
        })
        //console.log(cookiejar)
      } catch (error) {
        fs.writeFile('error.html', error, err => {
          if (err) throw err
          console.log('The file has been saved!')
        })
        console.log(error)
        //console.log(cookiejar)
        throw new Error(errors.LOGIN_FAILED)
      }
    
    i-vall's avatar
    i-vall committed
    }
    
    
    i-vall's avatar
    i-vall committed
    async function getData() {
      const dataRequest = {
        method: 'POST',
        uri:
          'https://monespace.grdf.fr/web/guest/monespace/particulier/consommation/consommations?p_p_id=eConsoconsoDetaille_WAR_eConsoportlet&p_p_lifecycle=2&p_p_state=normal&p_p_mode=view&p_p_cacheability=cacheLevelPage&p_p_col_id=column-3&p_p_col_count=6&p_p_col_pos=3&_eConsoconsoDetaille_WAR_eConsoportlet__jsfBridgeAjax=true&_eConsoconsoDetaille_WAR_eConsoportlet__facesViewIdResource=/views/conso/detaille/consoDetailleViewMode.xhtml',
        jar: cookiejar,
        headers: {
          Host: 'monespace.grdf.fr',
          'Content-Type': 'application/x-www-form-urlencoded'
        },
        body: ''
      }
    
      try {
        const response = await rp(dataRequest)
        var data = /donneesCourante = ".+"/.exec(response)
        console.log(response)
      } catch (error) {
        throw new Error(errors.VENDOR_DOWN)
      }
    
    i-vall's avatar
    i-vall committed
    }