Versions Compared

Key

  • This line was added.
  • This line was removed.
  • Formatting was changed.
  • brew setup:

    • Setup .zprofile

      Code Block
      # Set PATH, MANPATH, etc., for Homebrew.
      eval "$(/opt/homebrew/bin/brew shellenv)"
      export PATH=/Users/mbodkin/.local/bin:$PATH
    • Install the following Packages. Note this list is attached file.

    • Development Font Setup:

      • brew tap homebrew/cask-fonts

      • brew install --cask font-source-code-pro

    • Dart Setup

      • brew install dart

      • brew install dart@2.14

      • brew unlink dart && brew unlink dart@2.14 && brew link dart@2.14

      • dart pub global activate webdev

  • Iterm2 Setup:

    • Install Iterm2 App: Download from here https://iterm2.com/

    • Fix LVIM backspace issue

      • curl -LO https://invisible-island.net/datafiles/current/terminfo.src.gz && gunzip terminfo.src.gz see attachments.

      • sudo /usr/bin/tic -xe tmux-256color terminfo.src

      • set -g default-terminal "xterm-256color"

      • Modify Default Font: Iterm2 → Settings → Select “Profile” Tab → Select “Default” profile name → Select “Text” tab → Select “Source Code Pro” as the “Font” three from bottom.

  • Zshell Setup:

    • Install Oh my shell (https://ohmyz.sh/ ): sh -c "$(wget https://raw.github.com/ohmyzsh/ohmyzsh/master/tools/install.sh -O -)

    • My zshrc:

      • Set theme to gnzh:ZSH_THEME="gnzh"

      • Add the following:

        Code Block
        alias docker=podman
        set -o vi
        
        #THIS MUST BE AT THE END OF THE FILE FOR SDKMAN TO WORK!!!
        export SDKMAN_DIR="$HOME/.sdkman"
        [[ -s "$HOME/.sdkman/bin/sdkman-init.sh" ]] && source "$HOME/.sdkman/bin/sdkman-init.sh"
        
        export SUNWAVE_HOME=~/.config/sunwave/
        
        
        export PATH="$PATH":"$HOME/.pub-cache/bin"
  • LunarVim Setup:

    • Installation: LV_BRANCH='release-1.2/neovim-0.8' bash <(curl -s https://raw.githubusercontent.com/lunarvim/lunarvim/master/utils/installer/install.sh)

    • Add python module: python3 -m pip install neovim

  • Sdkman Setup for managing java and maven ()

    • Install

      • curl -s "https://get.sdkman.io" | bash

      • source "$HOME/.sdkman/bin/sdkman-init.sh"

    • Setup Java and mvn

      • sdk list java

      • sdk install java-8.0.352-amzn

      • Install the latest mvn version that supports Java 8: sdk install maven

  • Git

    • Install Github Desktop App: https://desktop.github.com/

    • Configure:

      • Get line endding right for mac: git config --global core.autocrlf input

      • Use lvim for editing comments: git config --global core.editor lvim

      • Make “less” more friendly on logs and diff runs: git config --global core.pager "less --LONG-PROMPT --tabs=3 --quit-at-eof --quit-if-one-screen --tilde --jump-target=3 --ignore-case --status-column"

      • My git config:

        Code Block
        [filter "lfs"]
        	clean = git-lfs clean -- %f
        	smudge = git-lfs smudge -- %f
        	process = git-lfs filter-process
        	required = true
        [user]
        	name = Michael Bodkin
        	email = michael.bodkin@sunwavehealth.com
        [core]
        	autocrlf = input
        	editor = lvim
        	pager = less --LONG-PROMPT --tabs=3 --quit-at-eof --quit-if-one-screen --tilde --jump-target=3 --ignore-case --status-column
      • Info Large File Storage (lfs filter): https://shuhrat.github.io/programming/git-lfs-tips-and-tricks.html

  • Intellij Setup

  • Podman Setup:

    • Install: brew install podman

    • Mysql Database setup

      • docker volume create db_dump20220714

      • docker run -p 13306:3306 --platform linux/amd64 --mount type=volume,src=db_dump20220714,target=/var/lib/mysql --name mysql -e MYSQL_ROOT_PASSWORD=Welcome1 -d mysql:5.6.51 --lower_case_table_names=1

      • docker exec -i mysql sh -c "exec mysql -uroot -pPassword1! -e 'create database sunwave3;'"

      • docker exec -i mysql sh -c "exec mysql -uroot -pPassword1! sunwave3" < Dump20220714.sql

      • docker exec -i mysql sh -c "exec mysql -uroot -pWelcome1 sunwave3" < hack.sql

  • SunwaveEMR Setup:

    • IntelliJ

      • Run Config

        Image Added
      • Deployment - Note “Application Context: /SunwaveEMR"

        Image Added
      • Edit Deployment

        Image Added
      • Logs - Choose all so they show up in IntelliJ

        Image Added
      • Startup Shutdown Point to Tomcat home directory.

        Image Added
    • config.properties see attachments.

      Code Block
      languagejava
      #SFb8TVhuMAh6tgE sw
      #App Info
      appName="Sunwave ERM"
      
      mail.support.username=daniel.fernandez@sunwavehealth.com 
      mail.support.password=xxx
      
      api_key=1234567890
      
      ##Stripe
      #days for wait before show verification form
      daysBeforeVerification = 2
      secretStripeKey = sk_test_HzSHs8Fg7lQQtk1IOlmitd3U
      publishableStripeKey = pk_test_Lb8tJqBEyDJFDXhhtuZ42Pg8
      authorize_net_url=https://apitest.authorize.net/xml/v1/request.api
      
      #CMS 1500 form
      cms1500.path = /Users/mbodkin/.config/sunwave/DATA/nosql/CMS1500-0212-MDCW.pdf
      #UF04
      ub04.path = /Users/mbodkin/.config/sunwave/DATA/nosql/ub04_interactive.pdf
      
      useJNDI=false
      jdbcURL=jdbc:mysql://localhost:3306/sunwave3?user=root&password=Welcome1&zeroDateTimeBehavior=convertToNull
      production=false
      basePath=/Users/mbodkin/.config/sunwave/DATA/nosql
      
      GOOGLE_CALENDAR_API_KEY=AIzaSyBN6FQnCwXg7YYdGajycVVSOI2wVZ2Dlac
      GOOGLE_CALENDAR_CLIENT_ID=7726274540401-lmh7p4utod4l5k80vgv9kpejpnau4gub.apps.googleusercontent.com
      GOOGLE_CALENDAR_CLIENT_SECRET=UTA4hrZ_xmGkYlRTudhHcXYp
      GOOGLE_CALENDAR_REDIREC_URL=/SunwaveEMR/Processor/googleCalendarApi
      
      useS3=false
      bucketName=sunwave.s3.bucket01
      
      intuit_oAuth2AppClientId = ABiGZkBQjZrj30Fl6oY8kQ74st4yO39r1dhJ1IBV9lwZ6mO5GE
      intuit_oAuth2AppClientSecret = BgGCN764FezZX8PZYcjgc9Q6yZe1TH6rB93v0crZ
      intuit_oAuth2AppRedirectUri = https://localhost:8443/SunwaveEMR/Processor/intuitIntegrationProcessor/?method=oauth2redirect
      intuit_intuitAccountingAPIHost = https://sandbox-quickbooks.api.intuit.com
      intuit_discoveryAPIHost = https://developer.api.intuit.com/.well-known/openid_sandbox_configuration/
      
      GOOGLE_GMAIL_AUTH_URI=https://accounts.google.com/o/oauth2/auth
      GOOGLE_GMAIL_TOKEN_URI=https://oauth2.googleapis.com/token
      GOOGLE_GMAIL_REDIRECT_URI=https://localhost:8443/SunwaveEMR/Processor/emailGoogleOAuth2Processor/?method=oauth2redirect
      #GOOGLE_GMAIL_CLIENT_ID=593886932269-7hel7eg14vgbkvl0f3ac8frlgi19ae29.apps.googleusercontent.com
      #GOOGLE_GMAIL_SECRET=vXu6XMRG3LfQhfHGpZ9WYXvU
      #GOOGLE_GMAIL_CLIENT_ID=559573570591-6iakfoe9k4fclt22614hafjtebjvukc5.apps.googleusercontent.com
      #GOOGLE_GMAIL_SECRET=sEFdB5wid8VxuzPmaGcVYCup
      #sunwave data
      GOOGLE_GMAIL_CLIENT_ID=922325029689-6jni457s2ppjr827hhd2ilkk6l2e7fok.apps.googleusercontent.com
      GOOGLE_GMAIL_SECRET=HBTRTbS0MTuH1Za3mGTMhGdy
      
      
      MICROSOFT_OUTLOOK_CLIENT_ID=e339f42c-7fec-4a33-9754-50f8251d2e4d
      MICROSOFT_OUTLOOK_SECRET=9fF-2bV_eM5.meQ69QYt-82xLLz2-Wd495
      MICROSOFT_OUTLOOK_REDIRECT_URI=https://localhost:8443/SunwaveEMR/Processor/emailMicrosoftOAuth2Processor/
      MICROSOFT_OUTLOOK_TOKEN_URI=https://login.microsoftonline.com/common/oauth2/v2.0/token
      MICROSOFT_OUTLOOK_AUTH_URI=https://login.microsoftonline.com/common/oauth2/v2.0/authorize
      
      #https://login.microsoftonline.com/
      
      #CERTIFICATION Env
      QUEST_ORDER_DOCUMENT_ENDPOINT=https://cert.hub.Care360.com/rest/orders/v1/document
      #PRODUCTION Env.
      #QUEST_ORDER_DOCUMENT_ENDPOINT=https://hubservices.medplus.com/rest/orders/v1/document
      
      #Quest Retrieval, CERTIFICATION Env    getResults|acknowledgeResults 
      QUEST_RETRIEVAL_RESULTS_ENDPOINT=https://cert.hub.Care360.com/rest/results/v1/retrieval
      #Quest Retrieval, PRODUCTION Env
      #QUEST_RETRIEVAL_RESULTS_ENDPOINT=https://hubservices.medplus.com/rest/results/v1/retrieval
      
      #Quest Test Code Retrieval, CERTIFICATION Env 
      QUEST_TEST_CODE_ENDPOINT=https://cert.hub.care360.com/webdav/cdc
      #Quest Test Code Retrieval, PRODUCTION Env
      #QUEST_TEST_CODE_ENDPOINT=https://hubservices.MedPlus.com/webdav/cdc
      
      MAX_FORM_NUMBER_PER_EXPORTED_PDF=10
      
      server_name=MyLocal
      
      medical_records_export_server=localhost:8443
      #dev
      LABCORP_ABN_ENDPOINT=https://emrsvcs-stage.labcorpbeacon.com:7360/emr-service/services
      #prod
      #LABCORP_ABN_ENDPOINT=https://emrsvcs.labcorpbeacon.com:7360/emr-service/services
      
      LABCORP_ABN_USERNAME=emrt_sunwavehlth
      LABCORP_ABN_PASSWORD=k2WakJZK
      
      CONCURRENT_MANAGER_SERVER=true
      eprescribe_url=https://engine201.staging.drfirst.com/servlet/rcopia.servlet.EngineServlet
      #              https://update201.staging.drfirst.com/servlet/rcopia.servlet.EngineServlet
      eprescribe_sso_url=https://web.staging.drfirst.com/sso/portalServices?
      
      MEDIK_ONLINE_ENDPOINT=https://medikonlinews.test.medikonline.com
      
      SYMMETRIC_ENCRYPTION_KEY=123
      
      telehealth_url=https://localhost:8443
      env_host=https://localhost:8443
      server_name=uat
      
    • server.xml see attachments.

      Code Block
      <?xml version="1.0" encoding="UTF-8" ?>
      <!--   
        Licensed to the Apache Software Foundation (ASF) under one or more
        contributor license agreements.  See the NOTICE file distributed with
        this work for additional information regarding copyright ownership.
        The ASF licenses this file to You 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.
      -->
      <!-- Note:  A "Server" is not itself a "Container", so you may not
           define subcomponents such as "Valves" at this level.
           Documentation at /docs/config/server.html
       -->
      <Server port="8005" shutdown="SHUTDOWN">
        <Listener className="org.apache.catalina.startup.VersionLoggerListener" />
        <!-- Security listener. Documentation at /docs/config/listeners.html
        <Listener className="org.apache.catalina.security.SecurityListener" />
        -->
        <!--APR library loader. Documentation at /docs/apr.html -->
        <Listener className="org.apache.catalina.core.AprLifecycleListener" SSLEngine="on" />       
        <!-- Prevent memory leaks due to use of particular java/javax APIs-->
        <Listener className="org.apache.catalina.core.JreMemoryLeakPreventionListener" />
        <Listener className="org.apache.catalina.mbeans.GlobalResourcesLifecycleListener" />
        <Listener className="org.apache.catalina.core.ThreadLocalLeakPreventionListener" />
      
        <!-- Global JNDI resources
             Documentation at /docs/jndi-resources-howto.html
        -->
        <GlobalNamingResources>
          <!-- Editable user database that can also be used by
               UserDatabaseRealm to authenticate users    
          <Resource name="UserDatabase" auth="Container"
                    type="org.apache.catalina.UserDatabase"
                    description="User database that can be updated and saved"
                    factory="org.apache.catalina.users.MemoryUserDatabaseFactory"
                    pathname="conf/tomcat-users.xml" />
      	-->		  
      			  
      	<Resource  name="jdbc/sunwave"
      		   auth="Container" 
      		   type="javax.sql.DataSource"
      		   username="root" 
      		   password="Welcome1" 
      		   driverClassName="com.mysql.jdbc.Driver"
      		   url="jdbc:mysql://localhost:3306/sunwave3?verifyServerCertificate=false&amp;useSSL=false&amp;requireSSL=false&amp;zeroDateTimeBehavior=convertToNull"
      		   defaultAutoCommit="false"		   
      		    maxActive="10"
      			logAbandoned="true"
      			maxIdle="5"
      			validationQuery="select 1"
      		   
      	/>
      	
      	 <Resource  name="jdbc/cm"
      		   auth="Container" 
      		   type="javax.sql.DataSource"
      		   username="root" 
      		   password="Welcome1" 
      		   driverClassName="com.mysql.jdbc.Driver"
      		   url="jdbc:mysql://localhost:3306/quartz?verifyServerCertificate=false&amp;useSSL=false&amp;requireSSL=false"
      		   defaultAutoCommit="false"		   
      		    maxActive="20"
      			maxIdle="10"
      			validationQuery="select 1"
      		   
      	/> 
      	
      	<!-- 
      	
      	Other params
      	
      	   maxTotal="100" 
      		   maxWaitMillis="10000"
      		   maxActive="15"
      		   maxIdle="10"
      		   maxWait="5000"
      		   removeAbandoned="true"
      		   removeAbandonedTimeout="20"
      		   logAbandoned="true"
      		   factory="org.apache.tomcat.jdbc.pool.DataSourceFactory"
      		   validationQuery="select 1"
      		   minEvictableIdleTimeMillis="3600000"
      		   timeBetweenEvictionRunsMillis="1800000"
      		   numTestsPerEvictionRun="10"
      		   testWhileIdle="true"
      		   testOnBorrow="true"
      		   testOnReturn="false"
      		   
      	-->
      		   
        </GlobalNamingResources>
      
        <!-- A "Service" is a collection of one or more "Connectors" that share
             a single "Container" Note:  A "Service" is not itself a "Container",
             so you may not define subcomponents such as "Valves" at this level.
             Documentation at /docs/config/service.html
         -->
        <Service name="Catalina">
      
          <!--The connectors can use a shared executor, you can define one or more named thread pools-->
          <!--
          <Executor name="tomcatThreadPool" namePrefix="catalina-exec-"
              maxThreads="150" minSpareThreads="4"/>
          -->
      
      
          <!-- A "Connector" represents an endpoint by which requests are received
               and responses are returned. Documentation at :
               Java HTTP Connector: /docs/config/http.html
               Java AJP  Connector: /docs/config/ajp.html
               APR (HTTP/AJP) Connector: /docs/apr.html
               Define a non-SSL/TLS HTTP/1.1 Connector on port 8080
          -->
      	
          <Connector port="8079" protocol="HTTP/1.1"
                     connectionTimeout="20000"
                     redirectPort="8443" />
      			   
      <!--			   
      	<Connector 
      		SSLEnabled="true" 
      		acceptCount="800" 
      		clientAuth="false"
      		disableUploadTimeout="true" 
      		enableLookups="false" 
      		maxThreads="300"
      		port="8443" 
      		keystoreFile="${user.home}\.keystore" 
      		keystorePass="santiago"
      		protocol="org.apache.coyote.http11.Http11NioProtocol" 
      		scheme="https"
      		secure="true" 
      		sslProtocol="TLS" />	
      		
      -->
      	
      <Connector 
      	port="8443" 
      	maxThreads="150" 
      	scheme="https" 
      	secure="true" 
      	SSLEnabled="true" 
        keystoreFile="/Users/mbodkin/.config/sunwave/keys/server.p12" 
      	keystorePass="password" 
      	keystoreType="PKCS12" 
      	clientAuth="false" 
      	keyAlias="tomcat" 
        sslProtocol="TLS"
        useSendfile="false"
        compression="force"
        compressionMinSize="1024"
      />	
      
      
      <!--
      <Connector
             protocol="org.apache.coyote.http11.Http11AprProtocol"
             port="8443" 
      	   maxThreads="200"
             scheme="https" 
      	   secure="true" 
      	   SSLEnabled="true"
             SSLCertificateFile="C:/temp/openssl/server.crt" 
             SSLCertificateKeyFile="C:/temp/openssl/server.pem"
             SSLVerifyClient="optional" 
      	   SSLProtocol="TLSv1+TLSv1.1+TLSv1.2"/>
      -->		
      		
      		
          <!-- A "Connector" using the shared thread pool-->
          <!--
          <Connector executor="tomcatThreadPool"
                     port="8080" protocol="HTTP/1.1"
                     connectionTimeout="20000"
                     redirectPort="8443" />
          -->
          <!-- Define a SSL/TLS HTTP/1.1 Connector on port 8443
               This connector uses the NIO implementation. The default
               SSLImplementation will depend on the presence of the APR/native
               library and the useOpenSSL attribute of the
               AprLifecycleListener.
               Either JSSE or OpenSSL style configuration may be used regardless of
               the SSLImplementation selected. JSSE style configuration is used below.
          -->
          <!--
          <Connector port="8443" protocol="org.apache.coyote.http11.Http11NioProtocol"
                     maxThreads="150" SSLEnabled="true">
              <SSLHostConfig>
                  <Certificate certificateKeystoreFile="conf/localhost-rsa.jks"
                               type="RSA" />
              </SSLHostConfig>
          </Connector>
          -->
          <!-- Define a SSL/TLS HTTP/1.1 Connector on port 8443 with HTTP/2
               This connector uses the APR/native implementation which always uses
               OpenSSL for TLS.
               Either JSSE or OpenSSL style configuration may be used. OpenSSL style
               configuration is used below.
          -->
          <!--
          <Connector port="8443" protocol="org.apache.coyote.http11.Http11AprProtocol"
                     maxThreads="150" SSLEnabled="true" >
              <UpgradeProtocol className="org.apache.coyote.http2.Http2Protocol" />
              <SSLHostConfig>
                  <Certificate certificateKeyFile="conf/localhost-rsa-key.pem"
                               certificateFile="conf/localhost-rsa-cert.pem"
                               certificateChainFile="conf/localhost-rsa-chain.pem"
                               type="RSA" />
              </SSLHostConfig>
          </Connector>
          -->
      
          <!-- Define an AJP 1.3 Connector on port 8009 -->
          <Connector port="8009" protocol="AJP/1.3" redirectPort="8443" />
      
      
          <!-- An Engine represents the entry point (within Catalina) that processes
               every request.  The Engine implementation for Tomcat stand alone
               analyzes the HTTP headers included with the request, and passes them
               on to the appropriate Host (virtual host).
               Documentation at /docs/config/engine.html -->
      
          <!-- You should set jvmRoute to support load-balancing via AJP ie :
          <Engine name="Catalina" defaultHost="localhost" jvmRoute="jvm1">
          -->
          <Engine name="Catalina" defaultHost="localhost">
      
            <!--For clustering, please take a look at documentation at:
                /docs/cluster-howto.html  (simple how to)
                /docs/config/cluster.html (reference documentation) -->
            <!--
            <Cluster className="org.apache.catalina.ha.tcp.SimpleTcpCluster"/>
            -->
      
            <!-- Use the LockOutRealm to prevent attempts to guess user passwords
                 via a brute-force attack -->
      	   
      	  <Realm 
      		className="org.apache.catalina.realm.DataSourceRealm" 
      		dataSourceName="jdbc/sunwave"
      		userTable="mb2_user" 
      		userNameCol="EMAIL" 
      		userCredCol="TM_PASSWORD"
      		userRoleTable="mb2_user_group" 
      		roleNameCol="GROUP_NAME" >
      		
      		<CredentialHandler
                className="org.apache.catalina.realm.MessageDigestCredentialHandler"     
      		  algorithm="SHA-256"  
      		  iterations="1" 
      		  saltLength="0" 
      		/>
      		
      
      		<!-- digest -a SHA-256 -s 0 santiago    encoding="ISO-8859-1"  
      		com.sunwave.emr.server.util.PasswordComparator   -->
      	</Realm>
       
      	  
      
            <Host name="localhost"  appBase="webapps"
                  unpackWARs="true" autoDeploy="true">
      
              <!-- SingleSignOn valve, share authentication between web applications
                   Documentation at: /docs/config/valve.html -->
              <!-- -->
              <Valve className="org.apache.catalina.authenticator.SingleSignOn" />
              
      
              <!-- Access log processes all example.
                   Documentation at: /docs/config/valve.html
                   Note: The pattern used is equivalent to using pattern="common" -->
              <Valve className="org.apache.catalina.valves.AccessLogValve" directory="logs"
                     prefix="localhost_access_log" suffix=".txt"
                     pattern="%h %l %u %t &quot;%r&quot; %s %b" />
      
            </Host>
          </Engine>
        </Service>
      </Server>
      
    • Dart

    • WebContext

  • Aws Setup:

    • Config

    • Usage

  • Security Setup

    • gnugp

    • Firewall

    • Password Rules required for handling HIPAA info.