2016년 12월 21일 수요일

gSubfolder - List Google Drive foldes

gSubfolder는 인터넷 브라우저에서 사용할 수 있는 웹 앱입니다.

Google 드라이브에서 작업할 폴더의 주소(URL)를 복사하여 gSubfolder에 붙여 넣고 Submit 버튼을 클릭합니다.

작업 내용은 입력 받은 폴더의 하위 폴더 목록을 Google spreadsheet에 저장해서 보여줍니다.

또한 Sheet의 하위 폴더를 Tree 형태로 정렬하는 Google Apps script를 지원합니다.


gSubfolder needs your permission to access your data on Google. 



gSubfolder에서 다음을 요청합니다. 
  • Google 드라이브에서 파일 보기 및 관리
  • Google 드라이브에서 스프레드시트 보기 및 관리
  • 애플리케이션과 연결된 데이터 보기 및 관리
  • 부재중 이 애플리케이션을 실행하도록 허용
허용을 클릭하면 이 앱과 Google에서 서비스 약관 및 개인정보처리방침에 따라 내 정보를 사용하도록 허용하게 됩니다. 언제든지 이 권한 및 다른 계정 권한을 변경할 수 있습니다.




2016년 8월 24일 수요일

Saving data - Firebase Database REST API

Using a Firebase app secret in apps script에 이어서 Apps script를 사용하여 Database에 data를 저장해 봤습니다.

참조:
Installation & Setup for REST API - Firebase Database
Saving Data - Firebase database REST





  • apps script - Index.html



  • 브라우저에서 Apps script web app 실행
  • Firebase Database 결과: https://eojjigas.firebaseio.com/

2016년 8월 21일 일요일

Using a Firebase app secret in apps script

Google apps script에서 Firebase app secret을 사용하여 OAuth Authorization Flow 없이 Database를 사용할 수 있습니다.


  • Firebase console에서 새 프로젝트 만들기버튼으로 eojjiGas 프로젝트를 생성했습니다.
  • eojjiGas 프로젝트에서 설정 버튼 클릭하고 데이터베이스 탭에서 비밀번호를 복사합니다.







  • Google Apps script 에디터 메뉴 - 파일 - 프로젝트 속성
  • - 스크립트 속성 - fb-secret 속성 추가 : 값은 위에서 복사한 데이터베이스 비밀번호




  • Google Apps script 에디터 메뉴 게시- 웹 앱으로 배포




  • Google Apps script 에디터 메뉴 게시- 웹 앱으로 배포
  • - 앱을 실행할 사용자: 웹 앱을 액세스하는 사용자로 설정


  • 현재 웹 앱 URL: 




  • firebase - 데이터베이스 - 데이터







참고 자료:



  • Real-time notifications in add-ons with Firebase

July 29, 2015
http://googleappsdeveloper.blogspot.kr/2015/07/real-time-notifications-in-add-ons-with.html


Implementation
Inside the loop, each time an email is sent (i.e. each time we use the method GmailApp.sendEmail()), we use the Apps Script UrlFetch service to write into Firebase using its REST API. Firebase's capabilities makes this easy & secure and there’s no need for an OAuth Authorization Flow, just a Firebase app secret, as shown in the following example:


function addNewUserToFirebase() {
 var dbUrl = "https://test-apps-script.firebaseio.com";
 var secret = PropertiesService.getScriptProperties().getProperty("fb-secret");
 var path = "/users/";
 var userData = {
   romainvialard:{
     firstName:"Romain",
     lastName:"Vialard",
     registrationDate: new Date()
   }
 };
 var params = {
   method: "PUT",
   payload : JSON.stringify(userData)
 }
  UrlFetchApp.fetch(dbUrl + path + ".json?auth=" + secret, params);
}


  • Firebase REST

User Authenticating
Authenticating Servers


Authenticating Servers


If we are running a trusted server that is connecting to our Firebase database, we can authenticate it in several ways:


  1. Using a Firebase app secret: All authentication methods can accept a Firebase app secret instead of a JWT token. This will grant the server complete read and write access to the entire Firebase database. This access will never expire unless it is revoked via the App Dashboard.
  2. Using a secure JWT with the optional admin claim set to true: This method will grant a server complete read and write access to the entire Firebase database. This token will expire normally, so it is important to set the expiration times accordingly.
  3. Using a secure JWT designed to give access to only the pieces of data a server needs to touch: This method is more complicated, but it is the safest way to authenticate a server as it lets the Security and Firebase Rules prevent the server from doing anything it's not supposed to, even if it becomes compromised in some way.

  • Firebase reference

REST
Realtime Database


Retrieving and Updating Firebase Realtime Database Rules


The REST API can also be used to retrieve and update the Firebase Realtime Database Rules for your Firebase app. You'll need your Firebase app's secret, which you can find under the Secrets panel of your Firebase app's dashboard.
curl 'https://samplechat.firebaseio-demo.com/.settings/rules.json?auth=FIREBASE_SECRET'
curl -X PUT -d '{ "rules": { ".read": true } }' 'https://samplechat.firebaseio-demo.com/.settings/rules.json?auth=FIREBASE_SECRET'


  • 기본 권한 규칙을 사용하면 사용자가 인증을 받아야 합니다.
Get Started with Database Rules https://firebase.google.com/docs/database/security/quickstart





Public
// These rules give anyone, even people who are not users of your app,// read and write access to your database{  "rules": {    ".read": true,    ".write": true  }}

2016년 8월 19일 금요일

Share a Google Form as “View Only”

Google Form을 보기 가능으로 공유하려고 했는데 실패했습니다.

Tutorial: Expense Report Approval - Simple workflow application
에서 복사한 시트를 참조하여 Form을 만들고 이것을 보기 가능으로 공유하려고 했는데 안됩니다.

참조한 사이트는 아래와 같습니다.
http://www.coffeenancy.com/2015/04/share-a-google-form-as-view-only/

At the top of your form, click the View responses button.

view responses

When the spreadsheet opens, click the blue Share button and add your collaborators, giving them view only access. Instruct them to make their own copy of the spreadsheet.

Once they have opened their copy of your spreadsheet, all they have to do is go to the Form menu and select Edit form. This will give them access to their copy of your original form, which they can edit and change to meet their own needs.


https://developers.google.com/apps-script/articles/expense_report_approval

OPEN TEMPLATE SPREADSHEET
위의 링크를 사용하여 열린 구글 스프레드시트에 Form 메뉴가 없습니다.

그래서 Form을 만들고 위의 Share a Google Form as “View Only”를 참조하여 테스트한 결과 구글 스프레드시트를 공유해서는 폼을 공유할 수 없었습니다.

현재로서는 폼을 수정 가능으로 공유하고 사용자가 폼의 사본 만들기를 사용해서 사용하기를 바래야 합니다.

form 공유 주소: https://docs.google.com/forms/d/11N3FbZ4FxwAAQHIZh4v37DVAbmaEnONNFtMUS--nW18/edit?usp=sharing


2016년 8월 18일 목요일

[test] Tutorial: Expense Report Approval


Tutorial: Expense Report Approval - Simple workflow application에서 만든 지출 품의서를 테스트합니다.

Tutorial: Expense Reports 설문지 보내기

  • Expense Reports - form 설정



  • form 설정 - 사용자 제한 체크 해지







  • Tutorial Expense Reports 폼 응답


  • Tutorial: Expense Reports sheet 결과
TimestampEmail AddressAmountDescriptionManager's Email Address
8/17/2016 3:41:54khs@eojji.net50000testkhs@eojji.net
8/17/2016 20:33:02backup@eojji.net3000테스트
ㅁㅁㅁ
a@eojji.com



Tutorial: Expense Reports - Script Trigger 설정

  • 리소스 - 현재 프로젝트의 트리거


  • 리소스 - 트리거 - onReportOrApprovalSubmit



  • 프로젝트 속성 - 시간대 (GMT+09::00) 서울




  • Manager's Email - Expense Report Approval Request




  • email - Expense Report Approval Request



Tutorial Expense Report Approvals

  • email - Expense Report Approval Request - 링크 클릭
  • form Tutorial Expense Report Approvals 응답




  • 보기 - 실행 트랜스크립트
[16-08-17 19:25:56:011 PDT] MailApp.sendEmail([a@eojji.com, Expense Report Approval Request, , {htmlBody=backup@eojji.net has requested your approval for an expense report.Amount: $3000Description: 테스트
ㅁㅁㅁReport Id: 3Please appr}]...)[0.25초]
[16-08-17 19:25:56:011 PDT] Sheet.getRange([3, 6])[0초]
[16-08-17 19:25:56:012 PDT] Range.setValue([khs@eojji.net])[0초]
[16-08-17 19:25:56:058 PDT] 실행 성공[총 실행 시간: 1.352초]
  • sheet Tutorial Expense Reports State


Google 포토 앨범: https://goo.gl/photos/jWLRo6z49uYeN9Jr9


2016년 8월 17일 수요일

Tutorial: Expense Report Approval - Simple workflow application

Tutorial: Expense Report Approval

위의 사이트를 참조하여 지출 품의서를 만들어 봤습니다.

Section 1: Setting up the Expense Report Form의 spreadsheet template에 폼이 없어서 만드는 과정만 추가 되었습니다. 나머지는 사이트의 설명을 따라하면 됩니다.

Section 1: Setting up the Expense Report Form

  • Tutorial Expense Reports - 파일 - 사본 만들기



  • Tutorial Expense Reports - 삽입 - 설문지



  • Tutorial Expense Reports - 삽입 - 설문지 편집



  • Tutorial Expense Reports - 설문지 - 현재 설문지로 이동



  • Tutorial Expense Reports - 설문지 - 현재 설문지 - 응답



  • Tutorial Expense Reports - 응답 보기




Section 4: Running the example script

4. As an administrator, manually run again the script onReportOrApprovalSubmit. Notice how in the expense reports spreadsheet the 'State' column for your expense report changes to 'APPROVED' or 'DENIED'.

  • expense report approval - 실행 - onReportOrApprovalSubmit



운영하기: [test] Tutorial: Expense Report Approval

2016년 8월 15일 월요일

Connect a Custom Domain - Firebase Hosting

Google Sheets as a Database – Authenticated INSERT with Apps Script using Execution API를 참조하여 웹 앱을 만들고 Firebase에 호스팅했습니다.
호스팅 과정은 Eojji log using firebase hosting을 참조하세요.

Google Apps script로 만든 웹 앱이라서 실행하면 Error 400 (OAuth2 Error)가 발생합니다.
이때 웹 앱의 개발자 콘솔에서 자바스크립트 원본에 새로 만든 주소를 등록해야 합니다.

https://app.eojji.com



Firebase로 연결되도록 도메인의 DNS 레코드를 업데이트하세요.
CNAME 레코드는 Firebase 앱 도메인에 도메인 이름의 별칭을 지정합니다. 도메인 등록기관에서 업데이트된 레코드를 전파하면 사이트의 서비스가 개시됩니다.
하위 도메인 리디렉션
호스트 : app.eojji.com
레코드 : eojjilog.firebaseapp.com



브라우저에서 사이트로 이동하면 권한을 묻는 과정에서 Error 400 (OAuth2 Error) 같은 오류가 발생한다면 승인된 자바스크립트 원본에 맞춤 도메인을 추가해 주세요.
Setting up OAuth 2.0 - Google API Console Help


Authorize access to Google Apps Script Execution API




400. That’s an error.
Error: origin_mismatch

Application: Log using sheet


  • 개발자 console - 사용자 인증 정보 - 웹 애플리케이션용 클라이언트 ID - 승인된 자바스크립트 원본 - https://app.eojji.com 추가


게시물 관련 이미지 앨범: 

2016년 8월 12일 금요일

Eojji log using firebase hosting


방명록 Firebase hosting : https://app.eojji.com/ 


작업순서

  1. Google Apps script로 웹에서 name과 comment를 입력 받아 Google sheet에 저장하는 기능을 만들었습니다.
  2. 이 기능을 Execution API로 배포했습니다.
  3. Firebase Hosing에서 사용합니다.



  • Firebase eojji log app 실행



  • Google spreadsheet에 저장






  • Firebase Hosting

















  • Firebase init





  • 맞춤 도메인
사용자가 사이트를 방문할 때 표시할 정확한 도메인 이름을 입력하세요. 루트 도메인(yourdomain.com)이나 하위 도메인(www.yourdomain.com 또는 app.yourdomain.com)일 수 있습니다.



도메인의 소유권을 확인하려면 제공된 값을 사용하여 도메인 도메인 등록기관에 다음 TXT 레코드를 추가하세요.
도메인을 확인하는 데 최대 24시간이 걸릴 수 있습니다. 확인이 완료되면 이메일 알림이 전송됩니다.
처음에 log.eojji.com을 신청하고 TXT 레코드를 추가했지만 오류가 났습니다.
app.eojji.com형태로 바꿔서 신청해서 성공했습니다.

Continue: Connect a Custom Domain - Firebase Hosting

2016년 8월 11일 목요일

Firebase Hosting with Apps Script using Execution API


Firebase hosting app - eojjisheet


방명록 기능입니다.
이메일이 기록됩니다.




  • firebase hosting app - eojjisheet - 링크가 있는 모든 사용자가 수정할 수 있음




  • firebase hosting app - eojjisheet - API 실행 가능으로 배포 - 모든 사용자



웹에서 name과 comment를 입력 받아서 Google sheet에 저장하는 기능을 Firebase에 Hosing했습니다.

  1. Google Sheet의 Apps script 함수를 웹에서 호출할 수 있도록 Execution API로 배포합니다.
  2. Firebase Hosing에 Execution API를 호출하는 index.html을 upload하였습니다.
  3. Google 로그인이 필요합니다. Authorize access to Google Apps Script Execution API 



Google Sheets as a Database – Authenticated INSERT에서 다음을 요청합니다.
Google에서 내 정보 확인
내 이메일 주소를 봅니다.
Google 드라이브에서 스프레드시트 보기 및 관리

참조:

Create a Target Project for the Apps Script Execution API

Before you can begin any of the quickstarts, you will need a target Apps Script for the API to call. Follow these steps to create a simple script and enable it for API access.

Step 1: Create the script

  1. Open this Google Sheet and File > Make a copy and copy your new Sheet document id from your browser address bar:






Firebase Hosting | Firebase
Firebase Hosting provides fast and secure static hosting for your web app. Next Steps: Get Started wi...

2016년 8월 8일 월요일

Firebase Hosting eojjiFolder

Firebase Hosting | Firebase


Firebase Hosting provides fast and secure static hosting for your web app.


Next Steps:


Get Started with Hosting and deploy your web app or static assets.



console.firebase - 프로젝트 만들기 - eojjiFolder



console.firebase - eojjiFolder - Hosting


console.firebase - eojjiFolder - Hosting - 설정


호스팅 설정 
사이트를 호스팅하려면 npm(Node.js)을 사용해 Firebase 명령줄 도구를 설치해야 합니다.
Firebase 도구 설치 코드:$ npm install -g firebase-tools명령어가 작동하지 않나요? npm 권한을 변경해야 할 수도 있습니다.


참조: Firebase CLI Reference
console.firebase - eojjiFolder - Hosting - cmd





console.firebase - eojjiFolder - Hosting - 배포


C:\Program Files\nodejs>firebase login
Already logged in as a@eojji.com


C:\Program Files\nodejs>firebase init


    ######## #### ########  ######## ########     ###     ######  ########
    ##        ##  ##     ## ##       ##     ##  ##   ##  ##       ##
    ######    ##  ########  ######   ########  #########  ######  ######
    ##        ##  ##    ##  ##       ##     ## ##     ##       ## ##
    ##       #### ##     ## ######## ########  ##     ##  ######  ########


You're about to initialize a Firebase project in this directory:


 C:\Program Files\nodejs


Before we get started, keep in mind:


 * You are currently outside your home directory


? Are you ready to proceed? Yes
? What Firebase CLI features do you want to setup for this folder? Database: De
ploy Firebase Realtime Database Rules, Hosting: Configure and deploy Firebase H
osting sites


=== Project Setup


First, let's associate this project directory with a Firebase project.
You can create multiple project aliases by running firebase use --add,
but for now we'll just set up a default project.


? What Firebase project do you want to associate as default? eojjiFolder (eojji
folder)


=== Database Setup


Firebase Realtime Database Rules allow you to define how your data should be
structured and when your data can be read from and written to.


? What file should be used for Database Rules? database.rules.json
+  Database Rules for eojjifolder have been downloaded to database.rules.json.
Future modifications to database.rules.json will update Database Rules when you run
firebase deploy.


=== Hosting Setup


Your public directory is the folder (relative to your project directory) that
will contain Hosting assets to uploaded with firebase deploy. If you
have a build process for your assets, use your build's output directory.


? What do you want to use as your public directory? public
? Configure as a single-page app (rewrite all urls to /index.html)? Yes
+  Wrote public/index.html


i  Writing configuration info to firebase.json...
i  Writing project information to .firebaserc...


+  Firebase initialization complete!
C:\Program Files\nodejs>firebase deploy


=== Deploying to 'eojjifolder'...


i  deploying database, hosting
+  database: rules ready to deploy.
i  hosting: preparing public directory for upload...
+  hosting: public folder uploaded successfully
+  hosting: 1 files uploaded successfully
i  starting release process (may take several minutes)...


+  Deploy complete!


Hosting Site: https://eojjifolder.firebaseapp.com
Dashboard: https://console.firebase.google.com/project/eojjifolder/overview


Visit the URL above or run firebase open


C:\Program Files\nodejs>


C:\Program Files\nodejs\public\index.html

Welcome to Firebase Hosting

You're seeing this because you've successfully setup Firebase Hosting. Now it's time to go build something extraordinary!

OPEN HOSTING DOCUMENTATION


웹사이트 배포:
$ firebase deploy

https://eojjifolder.firebaseapp.com/



apps script ‘Eojji folder Service’ Index.html copy and paste


C:\Program Files\nodejs>firebase deploy  -m "index.html" --only "hosting"


=== Deploying to 'eojjifolder'...


i  deploying hosting
i  hosting: preparing public directory for upload...
+  hosting: public folder uploaded successfully
+  hosting: 1 files uploaded successfully
i  starting release process (may take several minutes)...


+  Deploy complete!


Hosting Site: https://eojjifolder.firebaseapp.com
Dashboard: https://console.firebase.google.com/project/eojjifolder/overview


Visit the URL above or run firebase open


C:\Program Files\nodejs>