Thu, 26 Mar 2015 6:13 pm
Pusing sama tanggal am & pm, otak ane perlu loading sebentar untuk paham #fyuuh
Thu, 26 Mar 2015 6:02 pm
Login system sms-admin juga ready, base juga dipisahkan,jadi 4 base; sms-admin_base, sms-admin_base_noauth, sms-user_base, sms-user_base_noauth #project
Thu, 26 Mar 2015 12:48 am
sms-server.go
package main
import (
"fmt"
"github.com/gorilla/mux"
"github.com/gorilla/sessions"
// "github.com/fzzy/radix/redis"
// "github.com/fatih/structs"
"net"
"net/http"
"html/template"
"gopkg.in/mgo.v2"
"gopkg.in/mgo.v2/bson"
"regexp"
"strings"
"crypto/rand"
"time"
"strconv"
// "encoding/json"
// "reflect"
)
var (
// MongoDB
mongoConfig = "mongodb://localhost:27017/admin"
MongoSession, err = mgo.Dial(mongoConfig)
MDB = MongoSession.DB("admin")
BlogCol = MDB.C("blog")
UserCol = MDB.C("user")
// Session
store = sessions.NewCookieStore([]byte("something-very-secret"))
// Blog
skipHome = 0
limit = 10
rowsNum = 10
// Tag Factory
tagPattern = "#([a-z]|[A-Z]|[_])+"
// Path
templatePath = "D:\\PROJECTS\\GO-APP\\webkoe\\templates\\"
publicPath = "D:\\PROJECTS\\GO-APP\\webkoe\\public\\"
)
func cekKodeJabatan(r *http.Request) string {
session,_ := store.Get(r, "session-name")
kode_jabatan := fmt.Sprintf("%s", session.Values["kode_jabatan"])
return kode_jabatan
}
func SmsHomeHandler(w http.ResponseWriter, r *http.Request) {
if cekKodeJabatan(r) == "" {
http.Redirect(w, r, "/login", 301)
fmt.Println(cekKodeJabatan(r))
fmt.Println("*** @home -> No Data ")
}else{
templates := template.Must(template.New("").ParseFiles(templatePath + "sms-base.html", templatePath + "sms-home.html"))
err := templates.ExecuteTemplate(w, "base", cekKodeJabatan(r))
if err != nil {
http.Error(w, err.Error(), http.StatusInternalServerError)
}
}
}
func SmsLoginFormHandler(w http.ResponseWriter, r *http.Request) {
if cekKodeJabatan(r) == "" {
templates := template.Must(template.New("").ParseFiles(templatePath + "sms-base.html", templatePath + "sms-loginform.html"))
err := templates.ExecuteTemplate(w, "base", nil)
if err != nil {
http.Error(w, err.Error(), http.StatusInternalServerError)
}
}else{
http.Redirect(w, r, "/", 301)
}
}
func SmsPostLoginHandler(w http.ResponseWriter, r *http.Request) {
if cekKodeJabatan(r) == "" {
username := r.FormValue("username")
password := r.FormValue("password")
var results map[string]interface{}
err = UserCol.Find(bson.M{"username": username, "password" : password}).One(&results)
if err != nil {
http.Redirect(w, r, "/#error", 301)
}else{
kode_jabatan, _ := results["kode_jabatan"]
session, _ := store.Get(r, "session-name")
session.Values["kode_jabatan"] = kode_jabatan
session.Save(r, w)
http.Redirect(w, r, "/", 301)
}
}else{
http.Redirect(w, r, "/", 301)
}
}
func SmsLogoutHandler(w http.ResponseWriter, r *http.Request) {
session, _ := store.Get(r, "session-name")
session.Values["kode_jabatan"] = ""
session.Save(r, w)
http.Redirect(w, r, "/", 301)
}
func safehtml(text string) template.HTML {
text = text + " "
text = strings.Replace(text, "<", "<", -1)
text = strings.Replace(text, ">", ">", -1)
text = strings.Replace(text, "", "
", -1)
text = strings.Replace(text, "
", "", -1)
text = strings.Replace(text, "", "", -1)
text = strings.Replace(text, "", "", -1)
text = strings.Replace(text, "", "", -1)
text = strings.Replace(text, "", "", -1)
text = strings.Replace(text, "", "", -1)
text = strings.Replace(text, "=", "=", -1)
text = strings.Replace(text, "<a href=", "", "", -1)
text = strings.Replace(text, "<img src=", "
", ">", -1)
regexPagar, _ := regexp.Compile(tagPattern)
tags := regexPagar.FindAllString(text, -1)
for _ , value := range tags {
tagAscii := strings.Replace(value, "#", "#", 1)
tagOnly := strings.Replace(value, "#", "", 1)
text = strings.Replace(text, value, "" + tagAscii + "", 1)
}
return template.HTML(text)
}
func timeFormatter(text string) template.HTML {
text = strings.Replace(text, " ", "-", -1)
text = strings.Replace(text, ":", "-", -1)
split := strings.Split(text, "-")
tahun, _ := strconv.Atoi(split[0])
bulan, _ := strconv.Atoi(split[1])
tanggal, _ := strconv.Atoi(split[2])
jam, _ := strconv.Atoi(split[3])
menit, _ := strconv.Atoi(split[4])
detik, _ := strconv.Atoi(split[5])
var _bulan time.Month
if bulan == 1 {
_bulan = time.January
}else if bulan == 2 {
_bulan = time.February
}else if bulan == 3{
_bulan = time.March
}else if bulan == 4{
_bulan = time.April
}else if bulan == 5{
_bulan = time.May
}else if bulan == 6{
_bulan = time.June
}else if bulan == 7{
_bulan = time.July
}else if bulan == 8{
_bulan = time.August
}else if bulan == 9{
_bulan = time.September
}else if bulan == 10{
_bulan = time.October
}else if bulan == 11{
_bulan = time.November
}else if bulan == 12{
_bulan = time.December
}
// const layout = "Mon Jan 2, 2006 at 3:04pm (MST)" (MST) --> WITA
const layout = "Mon, 2 Jan 2006 3:04 pm"
t := time.Date(tahun, _bulan, tanggal, jam, menit, detik, 0, time.Local)
return template.HTML(t.Format(layout))
}
func randStr(strSize int, randType string) string {
var dictionary string
if randType == "alphanum" {
dictionary = "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz"
}
if randType == "alpha" {
dictionary = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz"
}
if randType == "number" {
dictionary = "0123456789"
}
var bytes = make([]byte, strSize)
rand.Read(bytes)
for k, v := range bytes {
bytes[k] = dictionary[v%byte(len(dictionary))]
}
return string(bytes)
}
func GetIP(r *http.Request) string {
if ipProxy := r.Header.Get("X-FORWARDED-FOR"); len(ipProxy) > 0 {
return ipProxy
}
ip, _, _ := net.SplitHostPort(r.RemoteAddr)
return ip
}
func main() {
mx := mux.NewRouter()
// *** home ***
mx.HandleFunc("/", SmsHomeHandler)
// *** login ***
mx.HandleFunc("/login", SmsLoginFormHandler).Methods("GET")
mx.HandleFunc("/login", SmsPostLoginHandler).Methods("POST")
// *** logout ***
mx.HandleFunc("/logout", SmsLogoutHandler).Methods("GET")
// *** static server ***
mx.PathPrefix("/").Handler(http.FileServer(http.Dir( publicPath )))
http.ListenAndServe(":80", mx)
}
#go #script
Wed, 25 Mar 2015 8:30 pm
Wed, 25 Mar 2015 7:58 pm
#warung_padang nya berubah layout,pintu masuk pindah ke kanan (kalo dr dalam) #rawasari
Wed, 25 Mar 2015 4:31 pm
Saat sakit dianjurkan juga untuk bekam, bekam yang dianjurkan dengan goresan bukan tusukan. Dianjurkan juga untuk makan kurma Ajwa (kurma Nabi) #ngaji
Wed, 25 Mar 2015 4:28 pm
Org sakit sunnah rasulnya berobat, dan sebaik baik obat adalah jintan hitam dan madu (hadits Rasul) #ngaji
Wed, 25 Mar 2015 4:16 pm
Shalat wajib dilakukan selama masih ada kesadaran, walaupun dalam keadaan sakit #ngaji
Wed, 25 Mar 2015 4:12 pm
Sabar dan puasa punya makna yang mirip, sabar = menggenggam dgn erat, puasa = menahan #ngaji
Wed, 25 Mar 2015 4:09 pm
Sakit yang disikapi dengan ridho akan menjadi penghapus dosa baginya #ngaji
Wed, 25 Mar 2015 4:05 pm
@masjid-kantor lagi ada pengajian ... membahas tentang sakit. Sakit adalah ketetapan dari Allah. Jika kita tidak melakukan dosa dan sakit, maka insya Allah sakit tersebut bukan bagian dari adzab Allah #ngaji
Wed, 25 Mar 2015 3:27 pm
Eselon III dan II lagi pada sedang ke menuju Ujung Pandang #kantor
Wed, 25 Mar 2015 11:26 am
Wed, 25 Mar 2015 8:45 am
Berita gembira, di android, javascript bakal punya banyak kemampuan layaknya native #nice
Tue, 24 Mar 2015 4:07 pm
Sedang heboh "vitamin DJP" ... Kalo benar yang berlaku adalah "perpres itu" ... vitamin buat para eselon doank. Mmm ... intinya bukan tentang tidak mensyukuri dengan yang ada, ini tentang keadilan (cieee) #kantor
Mon, 23 Mar 2015 7:28 pm
Tadi hbis jalan-jalan sama #aim n #ayang, beli roti bou, bubur ayam tanpa vetsin di amd n buah di depan rawasari #jalanjalan