Snippets

Zen LIU LinOTP configure Maria DB RDS

Created by Zen LIU last modified
#!/bin/bash
#    version 3
#
#    LinOTP - the open source solution for two factor authentication
#    Copyright (C) 2010 - 2018 KeyIdentity GmbH
#
#    This file is part of LinOTP server.
#
#    This program is free software: you can redistribute it and/or
#    modify it under the terms of the GNU Affero General Public
#    License, version 3, as published by the Free Software Foundation.
#
#    This program is distributed in the hope that it will be useful,
#    but WITHOUT ANY WARRANTY; without even the implied warranty of
#    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
#    GNU Affero General Public License for more details.
#
#    You should have received a copy of the
#               GNU Affero General Public License
#    along with this program.  If not, see <http://www.gnu.org/licenses/>.
#
#
#    E-mail: support@keyidentity.com
#    Website: http://www.keyidentity.com
#

LANG=C
ENCKEY=encKey
LINOTP_CONF_DIR=/etc/linotp2
LINOTP_INI=$LINOTP_CONF_DIR/linotp.ini
#DB_HOST=localhost
DB_NAME=LINOTP
DB_USER=linotp
SERVICE=mariadb.service
#Colors
#DEFAULT='\e[39m'
DEFAULT='\e[0m'
RED='\e[91m'
#YELLOW='\e[93m'
#BLUE='\e[34m'
GREEN='\e[32m'
BOLD='\e[1m'

#handle parameters
if [ $# -lt 3 ]; then
    echo "Missing parameters! Usage: $0 <rds hostname> <db usernmae> <db password>"
    exit 2
fi

DB_HOST=$1
DB_USERNAME=$2
DB_PASSWORD=$3

function print_support_information {
    echo -e "Please contact ${BOLD}support@keyidentity.com${DEFAULT} or ${BOLD}+49615186086115${DEFAULT} for assistance."
        }
validate_reply () {
    ret=0
    if [ -z "$1" ]; then
        reply=y
        return $ret
    fi
    case $1 in
        y|Y|yes|Yes|YES) reply=y ;;
        n|N|no|No|NO)    reply=n ;;
        *) ret=1 ;;
    esac
    return $ret
}

clear
echo -e "${BOLD}Welcome to the database setup script for LinOTP!${DEFAULT}"
echo "Please be aware that you have to install LinOTP before you start this script."
echo "------------------------------------------------------------------------------------------"

if [ $UID -ne 0 ]
  then
	echo "This script has to be executed as root user." 1>&2
	echo "Exiting script....." 1>&2
	exit 1
fi

echo -e "${GREEN}Starting MariaDB setup...${DEFAULT}"
echo ""

#Check if the database key exists as a nonempty file and create one in case it is not present.
if ! [ -s /etc/linotp2/encKey ]
then
	#echo "Generiere Datenbankschlüssel - dies kann eine Weile dauern, bitte haben Sie Geduld."
    echo "Create database key - this may take a while. Please be patient."
	echo "--------------------------------------------------"
    if ! ( dd if=/dev/urandom of="$LINOTP_CONF_DIR/$ENCKEY" bs=1 count=128 && chown linotp "$LINOTP_CONF_DIR/$ENCKEY" && chmod 640 "$LINOTP_CONF_DIR/$ENCKEY" )
    then
		echo -e "${RED}Creating of database key failed. Exiting script...${DEFAULT}" 1>&2
        exit 6
	  else
		 echo -e "Database key was ${GREEN}successfully generated.${DEFAULT}"
    fi
fi

unset DB_PASS
DB_PASS=$(pwgen -cnsB 32 1)
if [ -z "$DB_PASS" ]
then
    echo -e "${RED}Password could not be generated" 1>&2
    echo -e "Exiting program${DEFAULT}" 1>&2
    exit 10
fi
echo "Generated password is $DB_PASS" 

echo ""
echo "--------------------------------------------------"
echo ""

echo -e "${BOLD}Creating database and database users...${DEFAULT}"
echo "Connect will be done with MariaDB account: $DB_USERNAME"

mysql -h $DB_HOST -u $DB_USERNAME -p$DB_PASSWORD -e "CREATE DATABASE IF NOT EXISTS $DB_NAME; grant all privileges on $DB_NAME.* to $DB_USER@'%' identified by '$DB_PASS'; flush privileges"

if [ $? -ne 0 ]
then
	echo -e "${RED}Database initialization failed. Exiting script...${DEFAULT}" 1>&2
	exit 8
fi

echo "--------------------------------------------------"
echo ""
echo "Preparing linotp.ini for initial setup...."
DATE=$(date +%Y%m%d-%H%M%S)

if [ -e /etc/linotp2/linotp.ini ]
then
	echo "$LINOTP_INI already exists. A backup is created..."
	cp -a "$LINOTP_INI" "$LINOTP_INI.backup.$DATE"
fi

echo "Creating $LINOTP_INI from $LINOTP_CONF_DIR/linotp.ini.example for initial setup..."

cp -a $LINOTP_CONF_DIR/linotp.ini.example $LINOTP_INI
sed -i -re "s%^sqlalchemy.url =.*%sqlalchemy.url = mysql://$DB_USER:$DB_PASS@$DB_HOST/$DB_NAME%" $LINOTP_INI
echo "--------------------------------------------------"
echo ""

echo -e "${BOLD}Setup for LinOTP ${GREEN}succeeded.${DEFAULT}"
echo "Please proceed with the web server setup"

Comments (1)

  1. uzanti hesap

    O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O. O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O. O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O .O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O. O.O.O.O.O.O.O.O.O rssfeeds.usatoday.com/~/t/0/0/mmajunkie/~https:/agariounblocked.org/www.researchgate.net/deref/http://agariounblocked.orghobby.idnes.cz/peruanske-palive-papricky-rocoto-dlz-/redir.aspx?url=http%3A%2F%2Fagariounblocked.orgoptimize.viglink.com/page/pmv?url=https://agariounblocked.orgtrello.com/add-card?source=mode=popup&name=click%2Bhere&desc=http%3A%2F%2Fagariounblocked.orgsound2sense.archiveweb.mus.cam.ac.uk/?URL=agariounblocked.orgfeeds.businessinsider.com.au/~/t/0/0/businessinsideraustralia/~https:/agariounblocked.org/www.astro.wisc.edu/?URL=https%3A%2F%2Fagariounblocked.orgimages.google.com/url?sa=t&url=https%3A%2F%2Fagariounblocked.orgm.odnoklassniki.ru/dk?st.cmd=outLinkWarning&st.rfn=https%3A%2F%2Fagariounblocked.org%2Fwww.jobzone.ny.gov/views/jobzone/leaving_site.jsf?id=304&url=https%3A%2F%2Fagariounblocked.orgtvtropes.org/pmwiki/no_outbounds.php?o=https%3A%2F%2Fagariounblocked.org%2Frssfeeds.freep.com/~/t/0/_/freep/home/~/https:/agariounblocked.org/community.acer.com/en/home/leaving/agariounblocked.orgredirects.tradedoubler.com/utm/td_redirect.php?td_keep_old_utm_value=1&tduid=991a03343b6089cca9cbe799f011b89c&url=https%3A%2F%2Fagariounblocked.orgfcaw.library.umass.edu/goto/https:/agariounblocked.org/guru.sanook.com/?URL=https%3A%2F%2Fagariounblocked.org%2Fblog.ss-blog.jp/_pages/mobile/step/index?u=https://agariounblocked.orgold.post-gazette.com/pets/redir.asp?url=https%3A%2F%2Fagariounblocked.org%2Faccounts.cancer.org/login?redirectURL=https://agariounblocked.orgwww.fhwa.dot.gov/reauthorization/reauexit.cfm?link=https%3A%2F%2Fagariounblocked.orgsitereport.netcraft.com/?URL=https%3A%2F%2Fagariounblocked.org%2Fgo.onelink.me/v1xd?pid=Patch&c=Mobile%20Footer&af_web_dp=https%3A%2F%2Fagariounblocked.org%2Fprofiles.newsmax.com/sso/signup.aspx?ReturnURL=https%3A%2F%2Fagariounblocked.org%2Fdomain.opendns.com/agariounblocked.orgapp.feedblitz.com/f/f.fbz?track=https%3A%2F%2Fagariounblocked.orgjump.5ch.net/?agariounblocked.orgdol.deliver.ifeng.com/c?z=ifeng&la=0&si=2&cg=1&c=1&ci=2&or=7549&l=28704&bg=28703&b=37275&u=https%3A%2F%2Fagariounblocked.orgfeeds.gizmodo.com.au/~/t/0/0/gizmodoaustralia/~/https:/agariounblocked.org/www.etis.ford.com/externalURL.do?url=https%3A%2F%2Fagariounblocked.org%2Fid.telstra.com.au/register/crowdsupport?gotoURL=https%3A%2F%2Fagariounblocked.org%2Ffeeds.hanselman.com/~/t/0/0/scotthanselman/~https:/agariounblocked.org/bbs.pku.edu.cn/v2/jump-to.php?url=https%3A%2F%2Fagariounblocked.org%2Fdaemon.indapass.hu/http/session_request?redirect_to=https%3A%2F%2Fagariounblocked.org&partner_id=bloghuuk.advfn.com/ct.php?ct=OTk1OTg=&redir=https%3A%2F%2Fagariounblocked.org%2Fimages-fames.b-cdn.net/spai/w_1920+q_lossy+ret_img/https:/agariounblocked.org/rssfeeds.wfaa.com/~/t/0/0/wfaa/local/~https:/agariounblocked.org/rssfeeds.khou.com/~/t/0/0/khou/sports/~https:/agariounblocked.org/extras.seattlepi.com/redirect.php?url=https%3A%2F%2Fagariounblocked.org%2Fmember.yam.com/EDM_CLICK.aspx?EDMID=7948&EMAIL=qqbuyme.cosmo925@blogger.com&CID=103443&EDMURL=https%3A%2F%2Fagariounblocked.org%2Fgleam.io/zyxKd-INoWr2EMzH?l=http%3A%2F%2Fagariounblocked.orgwww.justjaredjr.com/flagcomment.php?cl=10842755&el=https%3A%2F%2Fagariounblocked.orgwww.edaily.co.kr/_template/popup/t_popup_click.asp?Mrseq=830&MrT=https%3A%2F%2Fagariounblocked.org%2Fssl.cosme.net/cosme/asp/buy/buy0002.asp?rurl=https%3A%2F%2Fagariounblocked.org%2Fwww.google.tn/url?sa=t&url=https%3A%2F%2Fagariounblocked.orgrssfeeds.wkyc.com/~/t/0/0/wkyc/news/~https:/agariounblocked.org/www2.ogs.state.ny.us/help/urlstatusgo.html?url=https://agariounblocked.orgfeeds.kotaku.com.au/~/t/0/0/kotakuaustralia/~/https:/agariounblocked.org/aquaculture.seagrant.uaf.edu/click-thru.html?id=151&url=https%3A%2F%2Fagariounblocked.org%2Fscanmail.trustwave.com/?c=8510&d=4qa02KqxZJadHuhFUvy7ZCUfI_2L10yeH0EeBz7FGQ&u=https%3A%2F%2Fagariounblocked.orgrssfeeds.13newsnow.com/~/t/0/0/wvec/local/~https:/agariounblocked.org/scribd.page.link/?amv=9.1.0&apn=com.scribd.app.reader0&ibi=com.scribd.iscribd&imv=9.1.1&isi=542557212&link=https%3A%2F%2Fagariounblocked.org%2Fforums.thesims.com/en_uS/home/leaving/agariounblocked.orgposts.google.com/url?sa=t&url=https%3A%2F%2Fagariounblocked.org%2Fxat.com/web_gear/chat/linkvalidator.php?link=https%3A%2F%2Fagariounblocked.orgadvisor.wmtransfer.com/SiteDetails.aspx?url=agariounblocked.orgwww.nordbayern.de/logoutservlet?logout_referer=https%3A%2F%2Fagariounblocked.org%2Fwww.bad.org.uk/for-the-public/patient-information-leaflets/androgenetic-alopecia/?showmore=1&returnlink=https%3A%2F%2Fagariounblocked.org%2Frssfeeds.kens5.com/~/t/0/0/business/~https:/agariounblocked.org/%2Fwww.winnipegfreepress.com/s?action=doLogout&rurl=http%3A%2F%2Fagariounblocked.orgfjb.kaskus.co.id/redirect?url=https%3A%2F%2Fagariounblocked.org%2Fpantip.com/l/https:%E0%B8%AF%E0%B9%91%E0%B8%AF%E0%B8%AF%E0%B9%91%E0%B8%AFagariounblocked.org%2F/3918rssfeeds.wbir.com/~/t/0/0/wbir/local_news/~https:/agariounblocked.org/innuityweb.myregisteredsite.com/admin/membership_agreement.php?partnerID=3185&domain=agariounblocked.orgfeeds.lifehacker.com.au/~/t/0/0/lifehackeraustralia/~/https:/agariounblocked.org/www.london.umb.edu/?URL=https%3A%2F%2Fagariounblocked.org%2Fwww.fito.nnov.ru/go.php?url=https%3A%2F%2Fagariounblocked.orgwww.vreddiehgdl.cucsh.udg.mx/sites/all/modules/pubdlcnt/pubdlcnt.php?file=https%3A%2F%2Fagariounblocked.org%2F&nid=126passport-us.bignox.com/sso/logout?service=https%3A%2F%2Fagariounblocked.org%2Fwww.talgov.com/Main/exit.aspx?url=https%3A%2F%2Fagariounblocked.orgf5.glitch.me/proxy/https%3A%2F%2Fagariounblocked.org%2Fsc.hkexnews.hk/TuniS/agariounblocked.org/www.curseforge.com/linkout?remoteUrl=https%3A%2F%2Fagariounblocked.org%2Fclient.paltalk.com/client/webapp/client/External.wmt?url=http%3A%2F%2Fagariounblocked.orgtools.folha.com.br/print?url=https%3A%2F%2Fagariounblocked.orges.catholic.net/ligas/ligasframe.phtml?liga=https%3A%2F%2Fagariounblocked.org%2Fwww.interempresas.net/estadisticas/r.asp?idsector=129&e=221083&c=195&d=https%3A%2F%2Fagariounblocked.org%2Fsinp.msu.ru/ru/ext_link?url=https%3A%2F%2Fagariounblocked.org%2Frssfeeds.mycentraljersey.com/~/t/0/0/bridgewater/home/~https:/agariounblocked.org/sherlock.scribblelive.com/r?u=agariounblocked.orggeomorphology.irpi.cnr.it/map-services/android-guide/@@reset-optout?came_from=https%3A%2F%2Fagariounblocked.org%2Fceskapozice.lidovky.cz/redir.aspx?url=http%3A%2F%2Fagariounblocked.orgtrack.effiliation.com/servlet/effi.redir?id_compteur=22157233&effi_id=leparfroid244&url=https%3A%2F%2Fagariounblocked.org%2Fwww.spiritfanfiction.com/link?l=https%3A%2F%2Fagariounblocked.orgfeeds.osce.org/~/t/0/0/oscelatestnews/~https:/agariounblocked.org/%2Fwww.omnigroup.com/omnifocus/?URL=agariounblocked.orgreelgood.com/https:/agariounblocked.org/www.triathlon.org/?URL=agariounblocked.org/stmassey.f2s.com/?URL=https%3A%2F%2Fagariounblocked.org%2Fmisc.symbaloo.com/redirect.php?network=tradetracker&campaignID=480&url=https%3A%2F%2Fagariounblocked.org%2Frd.alice.it/r3/redir.asp?URL=https%3A%2F%2Fagariounblocked.org%2Farctic.nyheter24.se/rdb/nyheter24_eed6ad4b451f2fb8193922f832bc91ed/5?url=https%3A%2F%2Fagariounblocked.org%2Fams.ceu.edu/optimal/optimal.php?url=https%3A%2F%2Fagariounblocked.org%2Fwww.meetme.com/apps/redirect/?url=agariounblocked.org/clients1.google.tk/url?q=https%3A%2F%2Fagariounblocked.orgwww.aaronsw.com/2002/display.cgi?t=%3Ca+href=https%3A%2F%2Fagariounblocked.orgwww.kichink.com/home/issafari?uri=https%3A%2F%2Fagariounblocked.org%2Flaw.spbu.ru/aboutfaculty/teachers/teacherdetails/a7fb1dbb-e9f3-4fe9-91e9-d77a53b8312c.aspx?returnurl=https%3A%2F%2Fagariounblocked.orgenseignants.flammarion.com/Banners_Click.cfm?ID=86&URL=agariounblocked.org/odmp.org/link?url=https%3A%2F%2Fagariounblocked.org%2Fwww.swrve.com/?URL=agariounblocked.orgsc.hkex.com.hk/TuniS/agariounblocked.org/redir.speedbit.com/redir.asp?id=8030&urldirect=https%3A%2F%2Fagariounblocked.orgmitsui-shopping-park.com/lalaport/iwata/redirect.html?url=https%3A%2F%2Fagariounblocked.org%2Fmarketplace.salisburypost.com/AdHunter/salisburypost/Home/EmailFriend?url=https%3A%2F%2Fagariounblocked.org%2Fwww.popcouncil.org/scripts/leaving.asp?URL=http%3A%2F%2Fagariounblocked.orgnou-rau.uem.br/nou-rau/zeus/auth.php?back=https%3A%2F%2Fagariounblocked.org%2F&go=x&code=x&unit=xredirect.camfrog.com/redirect/?url=https%3A%2F%2Fagariounblocked.org%2Fdavidbyrne.com/?URL=agariounblocked.orgfeeds.ligonier.org/~/t/0/0/ligonierministriesblog/~/https:/agariounblocked.org/feeds.gty.org/~/t/0/0/gtyblog/~/https:/agariounblocked.org/foro.infojardin.com/proxy.php?link=https%3A%2F%2Fagariounblocked.orgwww.ppa.com/?URL=agariounblocked.orgimaginingourselves.globalfundforwomen.org/pb/External.aspx?url=https%3A%2F%2Fagariounblocked.org%2Fshorefire.com/?URL=agariounblocked.orgtimberlinelodge.com/?URL=agariounblocked.orgwww.earth-policy.org/?URL=agariounblocked.org/chtbl.com/track/118167/agariounblocked.org/wfc2.wiredforchange.com/dia/track.jsp?v=2&c=hdorrh%2BHcDlQ%2BzUEnZU5qlfKZ1Cl53X6&url=https%3A%2F%2Fagariounblocked.orgwww.cheapassgamer.com/redirect.php?url=https%3A%2F%2Fagariounblocked.orgregister.scotland.org/Subscribe/WidgetSignup?url=http%3A%2F%2Fagariounblocked.orginterpals.net/url_redirect.php?href=https%3A%2F%2Fagariounblocked.org%2Fmyemma.com/?URL=agariounblocked.orgintellectualventures.com/?URL=agariounblocked.orgfooyoh.com/wcn.php?url=https%3A%2F%2Fagariounblocked.org%2Flinabanner.jobstreet.com/redirect.asp?bid=23996&track=0&uid=&url=https%3A%2F%2Fagariounblocked.org%2Fwww.usich.gov/?URL=agariounblocked.orgwww.sunvalley.com/?URL=agariounblocked.orgipb.ac.id/lang/s/ID?url=https%3A%2F%2Fagariounblocked.org%2Fmoshtix.com.au/v2/ForceDesktopView?callingURL=https%3A%2F%2Fagariounblocked.org%2Ftapestry.tapad.com/tapestry/1?ta_partner_id=950&ta_redirect=https%3A%2F%2Fagariounblocked.org%2Fwww.chuys.com/?URL=agariounblocked.organalytics.bluekai.com/site/16231?phint=event=click&phint=campaign=BRAND-TAB&phint=platform=search&done=agariounblocked.orgshop.wki.it/shared/sso/sso.aspx?sso=G7OBN320AS3T48U0ANSN3KMN22&url=https%3A%2F%2Fagariounblocked.org%2Fwww.kunstsammlung.de/?URL=agariounblocked.orgwww.malcolmturnbull.com.au/?URL=agariounblocked.orgsc.sie.gov.hk/TuniS/agariounblocked.org/ref.webhostinghub.com/scripts/click.php?ref_id=nichol54&desturl=https%3A%2F%2Fagariounblocked.org%2Fthewomens.org.au/?URL=agariounblocked.orgwww.hockney.com/?URL=agariounblocked.orgwww.ch7.com/?URL=agariounblocked.orgwww.asma.org/impakredirect.aspx?url=agariounblocked.org/www.venez.fr/error.fr.html?id=1&uri=https%3A%2F%2Fagariounblocked.org%2Fwww.octranspo.com/en/about-us/confederation-line-1-website?URL=agariounblocked.orglogin.mephi.ru/login?allow_anonymous=true&service=https%3A%2F%2Fagariounblocked.org%2Fww4.cef.es/trk/r.emt?h=agariounblocked.org/cientec.or.cr/ligas-externas/redir.phtml?link=agariounblocked.org/fr.grepolis.com/start/redirect?url=https%3A%2F%2Fagariounblocked.org%2Farchives.midweek.com/?URL=https%253A%252F%252Fagariounblocked.org/www.ahewar.org/links/dform.asp?url=https%3A%2F%2Fagariounblocked.org%2Flogin.aup.edu/cas/login?service=https%3A%2F%2Fagariounblocked.org%2F/&gateway=truewww.sitesimilar.net/agariounblocked.orgyumi.rgr.jp/puku-board/kboard.cgi?mode=res_html&owner=proscar&url=agariounblocked.org/intranet.canadabusiness.ca/?URL=agariounblocked.org/sc.devb.gov.hk/TuniS/agariounblocked.org/anonym.to/?http%3A%2F%2Fagariounblocked.org/www.ait.ie/?URL=agariounblocked.orgnews.url.google.com/url?q=https%3A%2F%2Fagariounblocked.orgm.ok.ru/dk?st.cmd=outLinkWarning&st.rfn=https%3A%2F%2Fagariounblocked.org%2F  P P P P P P P P P P P P P P P P P P P P P P P P P P P P P P P P P P P P P P P P P P P P P P P P P P P P P P P P P P P P P P P P P P P P P P P P P P P P P P P P P P P P P P P P P P P P P P P P P P P P P P P P P P P P P P P P P P P P P P P P P P P P P P  P P P P P P P P P P P P P P P P P P P P P P P P P P P P P P P P P P P P P P P P P P P P P P P P P P P P P P P P P P P P P P P P P P P P P P P P P P P P P P P P P P P P P P P P P P P P P P P P P P P P P P P P P P P P P P P P P P P P P P P P P P P P P P P  P P P P P P P P P P P P P P P P P P P P P P P P P P P P P P P P P P P P P P P P P P P P P P P P P P P P P P P P P P P P P P P P P P P P P P P P P P P P P P P P P P P P P P P P P P P P P P P P P P P P P P P P P P P P P P P P P P P P P P P P P P P P P P P P P  P P P P P P P  P P P P P P P P P P P P P P P P P P P P P P P P P P P P P P P P P P P P P P P P P P P P P P P P P P P P P P P P P P P P P P P P P P P P P P P P P P P P P P P P  P P P P P P P P P P P P P P P P P P P P P P P P P P P P P P P P P P P P P P P P P P P P P P P P P P P P P P P P P  P P P P P P P P P P P P P P P P P P P P P P P P P P P P P P P

HTTPS SSH

You can clone a snippet to your computer for local editing. Learn more.