| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354 | package mainimport (	"net/http"	"time"	prout "imuslab.com/arozos/mod/prouter"	"imuslab.com/arozos/mod/security/csrf")/*	Security.go	Author: tobychui	This module handles the system security related functions.	If you are looking for authentication or login related features, see auth.go*/var (	CSRFTokenManager  *csrf.TokenManager	tokenExpireTime   int64 = 10                        //Token expire in 10 seconds	tokenCleaningTime int   = int(tokenExpireTime) * 12 //Tokens are cleared every 12 x tokenExpireTime)//Initiation functionfunc security_init() {	//Create a default permission router accessable by everyone	router := prout.NewModuleRouter(prout.RouterOption{		ModuleName:  "",		AdminOnly:   false,		UserHandler: userHandler,		DeniedHandler: func(w http.ResponseWriter, r *http.Request) {			sendErrorResponse(w, "Permission Denied")		},	})	//Creat a new CSRF Token Manager and token expire in 30 seconds	CSRFTokenManager = csrf.NewTokenManager(userHandler, tokenExpireTime)	//Register functions related to CSRF Tokens	router.HandleFunc("/system/csrf/new", CSRFTokenManager.HandleNewToken)	//Create a timer to clear expired tokens	ticker := time.NewTicker(time.Duration(tokenCleaningTime) * time.Second)	go func() {		for {			select {			case <-ticker.C:				CSRFTokenManager.ClearExpiredTokens()			}		}	}()}
 |