display: grid !important;
grid-template-columns: 1fr auto;
grid-template-rows: 1fr auto / 1fr auto;
- grid-template-areas: "name buttons"
- "lower buttons";
+ grid-template-areas: "name buttons" "lower buttons";
@media screen and (max-width: #{map-get($grid-breakpoints, lg)}) {
- grid-template-areas: "name name"
- "lower buttons";
+ grid-template-areas: "name name" "lower buttons";
}
}
my-subscribe-button {
height: min-content;
}
-}
\ No newline at end of file
+}
-import {
- Component,
- OnInit,
- OnDestroy,
- QueryList,
- ViewChild,
- ElementRef
-} from '@angular/core'
-import { Router, Params, ActivatedRoute } from '@angular/router'
+import { Component, ElementRef, OnDestroy, OnInit, QueryList, ViewChild } from '@angular/core'
+import { ActivatedRoute, Params, Router } from '@angular/router'
import { AuthService, ServerService } from '@app/core'
import { first, tap } from 'rxjs/operators'
import { ListKeyManager } from '@angular/cdk/a11y'
-import { UP_ARROW, DOWN_ARROW, ENTER } from '@angular/cdk/keycodes'
-import { SuggestionComponent, Result } from './suggestion.component'
+import { Result, SuggestionComponent } from './suggestion.component'
import { of } from 'rxjs'
import { ServerConfig } from '@shared/models'
handleKeyUp (event: KeyboardEvent) {
event.stopImmediatePropagation()
if (!this.keyboardEventsManager) return
-
+
switch (event.key) {
- case "ArrowDown":
- case "ArrowUp":
+ case 'ArrowDown':
+ case 'ArrowUp':
this.keyboardEventsManager.onKeydown(event)
break
- case "Enter":
+ case 'Enter':
this.newSearch = false
this.doSearch()
break
$zindex: (
header : 1000,
- /* header context */
- headerLeft : 10,
+ /* header context */
+ headerLeft : 10,
menu : 11000,
dropdown : 12000,
loadbar : 13000,
import { auditLoggerFactory, CustomConfigAuditView, getAuditIdFromRes } from '../../helpers/audit-logger'
import { remove, writeJSON } from 'fs-extra'
import { getServerCommit } from '../../helpers/utils'
-import { Emailer } from '../../lib/emailer'
import validator from 'validator'
import { objectConverter } from '../../helpers/core-utils'
-import { CONFIG, reloadConfig } from '../../initializers/config'
+import { CONFIG, isEmailEnabled, reloadConfig } from '../../initializers/config'
import { PluginManager } from '../../lib/plugins/plugin-manager'
import { getThemeOrDefault } from '../../lib/plugins/theme-utils'
import { Hooks } from '@server/lib/plugins/hooks'
default: defaultTheme
},
email: {
- enabled: Emailer.isEnabled()
+ enabled: isEmailEnabled()
},
contactForm: {
enabled: CONFIG.CONTACT_FORM.ENABLED
import * as cors from 'cors'
import * as express from 'express'
import {
+ CONSTRAINTS_FIELDS,
+ DEFAULT_THEME_NAME,
HLS_STREAMING_PLAYLIST_DIRECTORY,
PEERTUBE_VERSION,
ROUTE_CACHE_LIFETIME,
STATIC_DOWNLOAD_PATHS,
STATIC_MAX_AGE,
STATIC_PATHS,
- WEBSERVER,
- CONSTRAINTS_FIELDS,
- DEFAULT_THEME_NAME
+ WEBSERVER
} from '../initializers/constants'
import { cacheRoute } from '../middlewares/cache'
import { asyncMiddleware, videosDownloadValidator } from '../middlewares'
import { HttpNodeinfoDiasporaSoftwareNsSchema20 } from '../../shared/models/nodeinfo'
import { join } from 'path'
import { root } from '../helpers/core-utils'
-import { CONFIG } from '../initializers/config'
-import { Emailer } from '../lib/emailer'
+import { CONFIG, isEmailEnabled } from '../initializers/config'
import { getPreview, getVideoCaption } from './lazy-static'
import { VideoStreamingPlaylistType } from '@shared/models/videos/video-streaming-playlist.type'
import { MVideoFile, MVideoFullLight } from '@server/typings/models'
default: getThemeOrDefault(CONFIG.THEME.DEFAULT, DEFAULT_THEME_NAME)
},
email: {
- enabled: Emailer.isEnabled()
+ enabled: isEmailEnabled()
},
contactForm: {
enabled: CONFIG.CONTACT_FORM.ENABLED
import { CONSTRAINTS_FIELDS, NSFW_POLICY_TYPES } from '../../initializers/constants'
import { exists, isArray, isBooleanValid, isFileValid } from './misc'
import { values } from 'lodash'
-import { CONFIG } from '../../initializers/config'
+import { isEmailEnabled } from '../../initializers/config'
const USERS_CONSTRAINTS_FIELDS = CONSTRAINTS_FIELDS.USERS
function isUserPasswordValidOrEmpty (value: string) {
// Empty password is only possible if emailing is enabled.
- if (value === '') {
- return !!CONFIG.SMTP.HOSTNAME && !!CONFIG.SMTP.PORT
- }
+ if (value === '') return isEmailEnabled()
+
return isUserPasswordValid(value)
}
import { ApplicationModel } from '../models/application/application'
import { OAuthClientModel } from '../models/oauth/oauth-client'
import { URL } from 'url'
-import { CONFIG } from './config'
+import { CONFIG, isEmailEnabled } from './config'
import { logger } from '../helpers/logger'
import { getServerActor } from '../helpers/utils'
import { RecentlyAddedStrategy } from '../../shared/models/redundancy'
import { isArray } from '../helpers/custom-validators/misc'
import { uniq } from 'lodash'
-import { Emailer } from '../lib/emailer'
import { WEBSERVER } from './constants'
async function checkActivityPubUrls () {
}
// Email verification
- if (!Emailer.isEnabled()) {
+ if (!isEmailEnabled()) {
if (CONFIG.SIGNUP.ENABLED && CONFIG.SIGNUP.REQUIRES_EMAIL_VERIFICATION) {
return 'Emailer is disabled but you require signup email verification.'
}
configChangedHandlers.push(fun)
}
+function isEmailEnabled () {
+ return !!CONFIG.SMTP.HOSTNAME && !!CONFIG.SMTP.PORT
+}
+
// ---------------------------------------------------------------------------
export {
CONFIG,
- registerConfigChangedHandler
+ registerConfigChangedHandler,
+ isEmailEnabled
}
// ---------------------------------------------------------------------------
import { createTransport, Transporter } from 'nodemailer'
import { isTestInstance } from '../helpers/core-utils'
import { bunyanLogger, logger } from '../helpers/logger'
-import { CONFIG } from '../initializers/config'
+import { CONFIG, isEmailEnabled } from '../initializers/config'
import { JobQueue } from './job-queue'
import { EmailPayload } from './job-queue/handlers/email'
import { readFileSync } from 'fs-extra'
if (this.initialized === true) return
this.initialized = true
- if (Emailer.isEnabled()) {
+ if (isEmailEnabled) {
logger.info('Using %s:%s as SMTP server.', CONFIG.SMTP.HOSTNAME, CONFIG.SMTP.PORT)
let tls
}
async sendMail (options: EmailPayload) {
- if (!Emailer.isEnabled()) {
+ if (!isEmailEnabled()) {
throw new Error('Cannot send mail because SMTP is not configured.')
}
import { isUserNSFWPolicyValid, isUserVideoQuotaDailyValid, isUserVideoQuotaValid } from '../../helpers/custom-validators/users'
import { logger } from '../../helpers/logger'
import { CustomConfig } from '../../../shared/models/server/custom-config.model'
-import { Emailer } from '../../lib/emailer'
import { areValidationErrors } from './utils'
import { isThemeNameValid } from '../../helpers/custom-validators/plugins'
import { isThemeRegistered } from '../../lib/plugins/theme-utils'
+import { isEmailEnabled } from '@server/initializers/config'
const customConfigUpdateValidator = [
body('instance.name').exists().withMessage('Should have a valid instance name'),
}
function checkInvalidConfigIfEmailDisabled (customConfig: CustomConfig, res: express.Response) {
- if (Emailer.isEnabled()) return true
+ if (isEmailEnabled()) return true
if (customConfig.signup.requiresEmailVerification === true) {
res.status(400)
import { ServerModel } from '../../models/server/server'
import { body } from 'express-validator'
import { isUserDisplayNameValid } from '../../helpers/custom-validators/users'
-import { Emailer } from '../../lib/emailer'
import { Redis } from '../../lib/redis'
-import { CONFIG } from '../../initializers/config'
+import { CONFIG, isEmailEnabled } from '../../initializers/config'
const serverGetValidator = [
body('host').custom(isHostValid).withMessage('Should have a valid host'),
.end()
}
- if (Emailer.isEnabled() === false) {
+ if (isEmailEnabled() === false) {
return res
.status(409)
.send({ error: 'Emailer is not enabled on this instance.' })