feat: persian locales + auth fix

This commit is contained in:
NGPixel 2017-09-11 21:38:23 -04:00
parent cac3d21c6e
commit 759b66469c
5 changed files with 216 additions and 16 deletions

View File

@ -5,7 +5,6 @@
const Promise = require('bluebird')
const express = require('express')
const router = express.Router()
const passport = require('passport')
const ExpressBrute = require('express-brute')
const ExpressBruteRedisStore = require('express-brute-redis')
const moment = require('moment')
@ -45,16 +44,16 @@ router.get('/login', function (req, res, next) {
router.post('/login', bruteforce.prevent, function (req, res, next) {
new Promise((resolve, reject) => {
// [1] LOCAL AUTHENTICATION
passport.authenticate('local', function (err, user, info) {
wiki.auth.passport.authenticate('local', function (err, user, info) {
if (err) { return reject(err) }
if (!user) { return reject(new Error('INVALID_LOGIN')) }
resolve(user)
})(req, res, next)
}).catch({ message: 'INVALID_LOGIN' }, err => {
if (appconfig.auth.ldap && appconfig.auth.ldap.enabled) {
if (_.has(wiki.config.auth.strategy, 'ldap')) {
// [2] LDAP AUTHENTICATION
return new Promise((resolve, reject) => {
passport.authenticate('ldapauth', function (err, user, info) {
wiki.auth.passport.authenticate('ldapauth', function (err, user, info) {
if (err) { return reject(err) }
if (info && info.message) { return reject(new Error(info.message)) }
if (!user) { return reject(new Error('INVALID_LOGIN')) }
@ -94,19 +93,19 @@ router.post('/login', bruteforce.prevent, function (req, res, next) {
* Social Login
*/
router.get('/login/ms', passport.authenticate('windowslive', { scope: ['wl.signin', 'wl.basic', 'wl.emails'] }))
router.get('/login/google', passport.authenticate('google', { scope: ['profile', 'email'] }))
router.get('/login/facebook', passport.authenticate('facebook', { scope: ['public_profile', 'email'] }))
router.get('/login/github', passport.authenticate('github', { scope: ['user:email'] }))
router.get('/login/slack', passport.authenticate('slack', { scope: ['identity.basic', 'identity.email'] }))
router.get('/login/azure', passport.authenticate('azure_ad_oauth2'))
router.get('/login/ms', wiki.auth.passport.authenticate('windowslive', { scope: ['wl.signin', 'wl.basic', 'wl.emails'] }))
router.get('/login/google', wiki.auth.passport.authenticate('google', { scope: ['profile', 'email'] }))
router.get('/login/facebook', wiki.auth.passport.authenticate('facebook', { scope: ['public_profile', 'email'] }))
router.get('/login/github', wiki.auth.passport.authenticate('github', { scope: ['user:email'] }))
router.get('/login/slack', wiki.auth.passport.authenticate('slack', { scope: ['identity.basic', 'identity.email'] }))
router.get('/login/azure', wiki.auth.passport.authenticate('azure_ad_oauth2'))
router.get('/login/ms/callback', passport.authenticate('windowslive', { failureRedirect: '/login', successRedirect: '/' }))
router.get('/login/google/callback', passport.authenticate('google', { failureRedirect: '/login', successRedirect: '/' }))
router.get('/login/facebook/callback', passport.authenticate('facebook', { failureRedirect: '/login', successRedirect: '/' }))
router.get('/login/github/callback', passport.authenticate('github', { failureRedirect: '/login', successRedirect: '/' }))
router.get('/login/slack/callback', passport.authenticate('slack', { failureRedirect: '/login', successRedirect: '/' }))
router.get('/login/azure/callback', passport.authenticate('azure_ad_oauth2', { failureRedirect: '/login', successRedirect: '/' }))
router.get('/login/ms/callback', wiki.auth.passport.authenticate('windowslive', { failureRedirect: '/login', successRedirect: '/' }))
router.get('/login/google/callback', wiki.auth.passport.authenticate('google', { failureRedirect: '/login', successRedirect: '/' }))
router.get('/login/facebook/callback', wiki.auth.passport.authenticate('facebook', { failureRedirect: '/login', successRedirect: '/' }))
router.get('/login/github/callback', wiki.auth.passport.authenticate('github', { failureRedirect: '/login', successRedirect: '/' }))
router.get('/login/slack/callback', wiki.auth.passport.authenticate('slack', { failureRedirect: '/login', successRedirect: '/' }))
router.get('/login/azure/callback', wiki.auth.passport.authenticate('azure_ad_oauth2', { failureRedirect: '/login', successRedirect: '/' }))
/**
* Logout

View File

@ -0,0 +1,82 @@
{
"profile": {
"displayname": "نام کامل",
"displaynameexample": "علی علوی",
"email": "ایمیل",
"lastprofileupdate": "آخرین زمان به روز رسانی پروفایل",
"membersince": "عضو از تاریخ",
"password": "گذرواژه",
"passwordverify": "تکرار گذرواژه",
"provider": "سرویس‌دهنده",
"savechanges": "ذخیره تغییرات",
"subtitle": "اطلاعات پروفایل و سیستم احراز هویت",
"tfa": "احراز هویت دو مرحله‌ای",
"tfadisable": "غیرفعال کردن سیستم احراز هویت دو مرحله‌ای",
"tfadisabled": "غیرفعال",
"tfaenable": "فعال کردن سیستم احراز هویت دو مرحله‌ای",
"tfaenabled": "فعال"
},
"stats": {
"subtitle": "آمار کلی وبسایت",
"entries": "مدخل",
"uploads": "آپلودها",
"users": "کاربران"
},
"settings": {
"subtitle": "مدیریت تنظیمات وبسایت"
},
"system": {
"subtitle": "ابزارها و اطلاعات برای ویکی شما",
"systemversion": "نسخه سیستم",
"currentversion": "نسخه فعلی",
"latestversion": "آخرین نسخه",
"upgrade": "به روز رسانی",
"reinstall": "نصب مجدد نسخه فعلی",
"versioncheckfailed": "امکان پیدا کردن آخرین نسخه نرم افزار وجود ندارد. لطفا بعدا امتحان کنید.",
"administrativetools": "ابزارهای مدیریت",
"flushcache": "پاک کردن کش و بازسازی فهرست‌ها",
"flushcachetext": "اگر به نظر میرسد محتوای وبسایت به روز نیست یا آخرین تغییرات در آن وجود ندارد، پاک کردن کش احتمالا میتواند به حل این مشکل کمک کند.",
"flushcachebtn": "پاک کردن و بازسازی",
"resetaccounts": "ریست کردن حسابهای کاربری به حالت پیش‌فرض",
"resetaccountstext": "حسابهای کاربری سیستمی (مثل حساب مهمان) به حالت پیش‌فرض برخواهند گشت.",
"resetaccountsbtn": "ریست کردن حسابهای سیستمی",
"flushsessions": "پاک کردن نشست تمام کاربران آنلاین",
"flushsessionstext": "نشست تمام کاربرانی که در حال حاضر مشغول استفاده از وبسایت هستند پاک و باید مجددا وارد سیستم شوند.",
"flushsessionsbtn": "پاک‌کردن نشست‌ها",
"hostinfo": "اطلاعات مربوط به سیستم میزبان",
"os": "سیستم عامل",
"nodeversion": "نسخه نود‌جی‌اس",
"hostname": "نام میزبان",
"cores": "تعداد هسته‌های پردازنده",
"totalmem": "مجموع حافظه",
"cwd": "دایرکتوری کاری"
},
"theme": {
"subtitle": "تغییر ظاهر وبسایت",
"primarycolor": "رنگ اصلی",
"primarycolordesc": "در نوار جهت‌یابی بالا، سرساز، پیوند‌ها و غیره استفاده میشود.",
"altcolor": "رنگ دوم",
"altcolordesc": "در نوارابزار گوشه استفاده میشود (با رنگ کمی تیره‌تر)",
"footercolor": "رنگ پاورقی",
"footercolordesc": "برای پاورقی پایین صفحه استفاده میشود (با رنگ کمی روشن‌تر)",
"codeblock": {
"title": "قطعات کد",
"dark": "استفاده از تم تیره",
"colorize": "رنگ‌آمیزی کد بر اساس سینتکس"
},
"savechanges": "ذخیره تغییرات",
"reset": "برگشت تغییرات به وضعیت پیش‌فرض"
},
"users": {
"createauthorize": "مدیریت کاربران",
"subtitle": "ایجاد یا تغییر دسترسی کاربران به وبسایت",
"name": "نام",
"email": "آدرس ایمیل",
"provider": "سرویس‌دهنده",
"createdon": "ساخته شده در تاریخ",
"updatedon": "به روز رسانی شده در تاریخ",
"returntousers": "بازگشت به لیست کاربران",
"edituser": "ویرایش کاربر",
"uniqueid": "شناسه یکتا"
}
}

View File

@ -0,0 +1,32 @@
{
"loginrequired": "باید وارد سیستم شوید",
"loginusing": "وارد شدن به وسیله...",
"loginusingalt": "یا وارد شدن به وسیله...",
"fields": {
"emailuser": "ایمیل/شناسه کاربری",
"password": "گذرواژه"
},
"actions": {
"login": "ورود"
},
"errors": {
"invalidlogin": "شناسه کاربری نادرست",
"invalidloginmsg": "آدرس ایمیل یا گذرواژه نادرست است.",
"invaliduseremail": "آدرس ایمیل نادرست",
"loginerror": "خطا در ورود به سیستم",
"notyetauthorized": "هنوز اجازه ورود به وبسایت به شما داده نشده است.",
"toomanyattempts": "تلاش‌های ناموفق زیاد!",
"toomanyattemptsmsg": "شما در مدت زمان کوتاهی تلاشهای ناموفق بسیاری کرده‌اید. لطفا مجددا بعد از {{time}} امتحان کنید.",
"usernotfound": "کاربر پیدا نشد"
},
"providers": {
"local": "محلی",
"windowslive": "حساب مایکروسافت",
"azure": "حساب اکتیو دایرکتوری اژر مایکروسافت",
"google": "حساب گوگل",
"facebook": "فیسبوک",
"github": "گیتهاب",
"slack": "اسلک",
"ldap": "ال‌دپ/اکتیو دایرکتوری"
}
}

View File

@ -0,0 +1,85 @@
{
"editor": {
"codeblockinsert": "وارد کردن بلوک کد",
"codeblocklanguage": "زبان",
"codeblockloading": "در حال بارگذاری سینتکس {{name}}",
"codeblockloadingerror": "خطا: امکان بارگذاری سینتکس برای این زبان وجود ندارد.",
"codeblocksuccess": "بلوک کد شما الحاق شد.",
"codeblocktitle": "الحاق بلوک کد",
"discard": "دور انداختن",
"filedeleteaction": "پاک کردن",
"filedeleteloading": "در حال پاک کردن فایل...",
"filedeletedefault": "این فایل",
"filedeletesuccess": "فایل با موفقیت پاک شد.",
"fileerror": "امکان دریافت فهرست به روز رسانی شده وجود ندارد.",
"filefolderempty": "این پوشه خالی است.",
"fileinsert": "افزودن لینک به فایل",
"fileloading": "در حال دریافت فایلها...",
"filemoveaction": "انتقال به...",
"filemoveerror": "خطا در انتقال: {{err}}",
"filemoveloading": "در حال انتقال فایل...",
"filemovesuccess": "فایل با موفقیت منتقل شد.",
"fileprocessing": "در حال پردازش...",
"filerenameaction": "تغییر نام",
"filesuccess": "پیوند به فایل الحاق شد.",
"filetitle": "الحاق فایل",
"fileupload": "بارگذاری فایل",
"fileuploaderror": "خطا در بارگذاری: {{err}}",
"fileuploadsuccess": "فایلها با موفقیت بارگذاری شدند.",
"folders": "پوشه‌ها",
"foldersloading": "در حال دریافت لیست پوشه‌ها...",
"imagetitle": "الحاق عکس",
"imageinsert": "الحاق عکس",
"imagesuccess": "عکس الحاق شد.",
"imageupload": "بارگذاری عکس",
"imagealignleft": "چپ (پیش‌فرض)",
"imagealigncenter": "مرکز",
"imagealignright": "راست",
"imagealignlogo": "لوگوی صفحه",
"newfolder": "پوشه جدید",
"videoanymp4file": "هر فایل ام‌پی‌۴ استاندارد",
"videoinsert": "الحاق ویدئو",
"videolinktitle": "برای قرار دادن ویدئوی توکار، پیوند ویدئو را وارد کنید:",
"videonotsupported": "این یوآرال نادرست است یا پشتیبانی نمی‌شود.",
"videosuccess": "کد ویدئو الحاق شد.",
"videosupportedtitle": "موارد زیر پشتیبانی میشوند:",
"videotitle": "الحاق ویدئو"
},
"history": {
"pastversions": "نسخه‌های پیشین",
"timestamp": "زمان",
"author": "نویسنده",
"commit": "کامیت",
"comparewith": "مقایسه کن با...",
"view": "نمایش",
"reverttoversion": "برگرداندن به نسخه",
"sidebyside": "نمایش پهلو به پهلو"
},
"modal": {
"abort": "قطع کردن",
"anchorerror": "کپی از کلیپ‌برد امکان‌پذیر نیست. لطفا پیوند را دستی وارد کنید.",
"anchorsuccess": "یوآرال در کلیپ‌برد کپی شد.",
"anchortitle": "پیوند به این قسمت را کپی کن",
"copyclipboard": "کپی در کلیپ‌برد",
"create": "ایجاد",
"createpageinvalid": "مسیر این صفحه نادرست است.",
"createpagepath": "مسیر جدید صفحه را وارد کنید:",
"createpagetitle": "ایجاد صفحه جدید",
"createuser": "ایجاد حساب کاربری",
"createuserauthorize": "دسترسی دادن به کاربر",
"createuseremail": "آدرس ایمیل:",
"createuseremailplaceholder": "مثلا john.doe@company.com",
"createusername": "نام کامل:",
"createusernameplaceholder": "مثلا علی علوی",
"createuserpassword": "گذرواژه:",
"createuserprovider": "سرویس‌دهنده:",
"createusertitle": "ساخت حساب کاربری",
"delete": "پاک کردن",
"deletefiletitle": "پاک شود؟",
"deletefilewarn": "آیا مطمئن هستید که میخواهید پاک شود؟",
"deleteusertitle": "حساب کاربری پاک شود؟",
"deleteuserwarning": "آیا مطمئن هستید که میخواهید حساب کاربری شود؟ این عمل قابل بازگشت نیست.",
"discard": "دور انداختن",
"discardpagecreate": "آیا مطمئن هستید که میخواهید از این صفحه بروید؟ تمام چیزهایی که تا این لحظه نوشتید از بین میروند."
}
}

View File

@ -33,6 +33,8 @@ module.exports = {
// Load authentication strategies
wiki.config.auth.strategies.local = {}
_.forOwn(wiki.config.auth.strategies, (strategyConfig, strategyKey) => {
strategyConfig.callbackURL = `${wiki.config.site.host}${wiki.config.site.path}/login/${strategyKey}/callback`
let strategy = require(`../authentication/${strategyKey}`)